Chủ Nhật, 28 tháng 4, 2019

[SystemC][High Level Design]Bài 5 - Hướng dẫn cài đặt một số phần mềm và thư viện để compile

Bài viết này trình bày cách cài đặt một số phần mềm như Cygwin, gtkwave, Vivado và thư viện SystemC trên Windows để kiểm tra, compile và mô phỏng SystemC code. Về cơ bản, sau khi đã viết đầy đủ model code như hướng dẫn ở bài 1 bài 2 bài 3bài 4. Chúng ta cần một số công cụ sau đây để phục vụ kiểm tra, biên dịch và chạy mô phỏng.

1) Cygwin Terminal
Cygwin là một phần mềm tập hợp các công cụ mã nguồn mở và các công cụ GNU tương tự như trên Linux để chạy trên Windows. Chúng ta cài đặt phần mềm này để sử dụng công cụ gcc/g++ biên dịch code SystemC.
Các bạn tải Cygwin ở đây: https://www.cygwin.com/
Chú ý, Cygwin có hai phiên bản 32 bit và 64 bit (hình minh họa trong bài này ứng với bản cài đặt Cygwin64 nhưng với Cygwin32 là tương tự). Cả hai đều compile được SystemC bằng g++ nhưng các bạn hãy cài bản 32 bit để có thể chạy mô phỏng được. Trên bản Cygwin64, hiện file .exe sau khi biên dịch không thể chạy mô phỏng như mong muốn nhưng nhóm tác giả chưa tìm ra cách khắc phục.
Hình 1: Tải Cygwin Terminal
Sau khi tải về, các bạn tiến hành cài đặt theo các bước sau đây (chú ý, việc cài đặt sẽ tải các gói công cụ từ các site cung cấp mã nguồn nên cần kết nối internet ổn định):
  • Bước 1, thông tin tổng quan về Cygwin và phiên bản cài đặt
Hình 2: Cygwin - bước 1, thông tin chung về Cygwin
  • Bước 2, tùy chọn cài đặt
    • Install from Internet: Cài trực tiếp các gói công cụ cần thiết qua internet -> Chọn option này
    • Dowload Without Installing: Chỉ tải source code chứ không cài đặt'
    • Install from Local Directory: Cài đặt từ source code mà bạn đã có sẵn trên máy tính
Hình 3: Cygwin - bước 2, chọn phương pháp cài đặt

  • Bước 3, chọn thư mục cài đặt tại "Root directory" và quyền sử dụng Cygwin:
    • All Users: Tất cả các user được tạo trên máy tình đều có thể sử dụng -> Chọn option này
    • Just me: Chỉ User mà bạn dùng để cài đặt mới có thể sử dụng Cygwin

Hình 4: Cygwin - bước 3, chọn thư mục cài đặt và quyền sử dụng

  • Bước 4, chọn thư mục lưu các file cần tải trong quá trình cài đặt

Hình 5: Cygwin - bước 4, chọn thư mục lưu các file cần tải trong quá trình cài đặt

  • Bước 5, chọn cách kết nối internet, chọn "Direct Connection" nếu bạn không có thiết lập gì đặc biệt.

Hình 6: Cygwin - bước 5, chọn cách kết nối internet mà bạn muốn thiết lập

  • Bước 6, chọn site để tải các gói cài đặt, bạn chọn site bất kỳ, nếu trong quá trình cài đặt, bạn thấy việc tải quá chậm hoặc không thể kết nối thì hãy thoát và chọn lại site khác.

Hình 7: Cygwin - bước 6, chọn site mà bạn sẽ tải các gói cài đặt Cygwin

  • Bước 7, tải các thông tin cài đặt từ site đã chọn ở bước 6

Hình 8: Cygwin - bước 7, tải các thông tin cần thiết từ site đã chọn

  • Bước 8, lựa chọn các công cụ (tool) bạn muốn cài đặt.
  • View: Chọn nhóm. "Full" sẽ liệt kê tất cả các công cụ được hỗ trợ
  • Search: Liệt kê các công cụ chứa từ khóa muốn tìm
  • Để tùy chọn cài đặt hãy chú ý các cột sau:
    • New: nhấp các ô của vào cột này để chọn tác vụ mà bạn muốn
      • Skip: bỏ qua, không cài đặt
      • Uninstall: gỡ bỏ công cụ đã cài đặt trước đó
      • Install hoặc "dãy số phiên bản": Cài đặt
      • Reinstall: Cài đặt lại công cụ đã có trước đó
    • Package hoặc Description: Tên công cụ
    • Size: dung lượng của gói công cụ
  • Cygwin là một tập hợp các công cụ của Unix có thể chạy trên nền Windows, vơi mục tiêu sử dụng Cygwin để biên dịch và kiểm tra code SystemC thì bạn cần cài đặt:
    • GNU compiler Collection (C, ...): Đây là gcc, một trình biên dịch code C
    • GNU compiler Collection (C++): Đây là g++, một trình biên dịch code C++
    • The GNU version of the "make" utility: Đây là công cụ "make", dùng để cài đặt các thư viện SystemC 
Hình 9: Cygwin - bước 8, lựa chọn các công cụ (tool) bạn muốn cài đặt cho Cygwin
  • Bước 9, cài đặt các công cụ đã chọn

Hình 10: Cygwin - bước 9, cài đặt
Sau khi cài đặt, chương trình có biểu tượng sau đây là Cygwin.
Hình 11: Cygwin logo
Thêm đường dẫn các tool của Cygwin, ví dụ C:\cygwin\bin, đến biến môi trường PATH của Windows để tránh lỗi không tìm thấy file cygwin1.dll.
Hình 12: Thêm đường dẫn thư mục cài đặt Cygwin đến biến PATH
2) Cài đặt thư viện SystemC
Thư viện SystemC được tải tại website:
https://www.accellera.org/downloads/standards/systemc

Hình 13: Tải thư viện SystemC
SystemC có nhiều phiên bản khác nhau, bản mới nhất là 2.3.3. Sau khi giải nén bạn sẽ có thư mục "systemc-2.3.3".
Hình 14: Thư mục dùng để cài đặt SystemC sau giải nén
Bước 1, mở Cygwin, vào thư mục đã giải nén chạy lệnh sau:
./configure --prefix=<đường dẫn thư mục sẽ cài SystemC>
Ví dụ:
./configure --prefix=/cygdrive/d/20.Project/1.ModelBaseDesign/SystemC_lib


Hình 15: Kết quả chạy configure
Bước 2, chạy lệnh cài đặt:
make install
Hình 16: Quá trình cài đặt thư viện SystemC
Nếu trước đó đã cài đặt nhưng bây giờ cần cài lại thì cần chạy lệnh sau trước khi "make install"
make clean
Đối với thư viện SystemC-2.2.0 trở về trước, cần chỉnh sửa file systemc-2.2.0/src/systemc.h trước khi cài đặt. Tìm đến các dòng code sau:
    using std::wctomb;
    using std::mbstowcs;
    using std::wcstombs;
Xóa 2 dòng:
    //using std::wctomb;
    using std::mbstowcs;
    //using std::wcstombs;
Hoặc sửa thành:
#if !defined(__CYGWIN__) && !defined(__CYGWIN32)
    using std::wctomb;
    using std::wcstombs;
#endif
Phiên bản SystemC-2.3.* không cần chỉnh.

3) Tải và cài đặt phần mềm gtkwave để đọc file vcd xem waveform
Khi mô phỏng SystemC code, chúng ta có thể tạo (dump) file waveform với định dạng .vcd. gtkwave là một trong nhưng công cụ miễn phí hỗ trợ việc đọc và hiển thị waveform.
Các bạn có thể tải các phiên bản muốn sử dụng ở đây: http://gtkwave.sourceforge.net/
Hình 17: Tải GTKWave
Có rất nhiều phiên bản nhưng ở đây, nhóm tác giả sử dụng phiên bản 32 bit gtkwave-3.3.100-bin-win32 đã build sẵn, chỉ cần tải về -> giải nén -> sử dụng.
Hình 18: Tải bản GTKWave cho win32
Chú ý, nhóm tác giả có thử tải bản gtkwave-3.3.100-bin-win64 nhưng bản này bị lỗi khi chạy chương trình gtkwave\bin\gtkwave.exe.
4) Cài đặt phần mềm Vivado để tổng hợp SystemC
Đây là một phần mềm dành cho FFGA của Xilinx nhưng sẽ được nhóm tác giả sử dụng để biên dịch từ SystemC code (model code) thành Verilog code để kiểm chứng khả năng tổng hợp của model code.
Việc tải và đặt đã được hướng dẫn chi tiết ở đường dẫn sau:
5) Biên dịch model code với g++ trên Cygwin và xem waveform với gtkwave
Sau khi đã cài Cygwin (bản 32 bit) và công cụ g++ kèm theo. Các bạn hãy thử kiểm tra với model code được mô tả sau đây. Chú ý, model code này lấy từ tài liệu về SystemC của Peeter Ellervee trên website "https://wiki.ttu.ee". Đây là một model có cả phần design, test và tạo file waveform .vcd nên nhóm tác giả dùng để kiểm chứng các tool đã cài đặt, còn việc làm thế nào để viết và hiểu code này, các bạn sẽ được hướng dẫn tiếp trong những bài tiếp theo với ví dụ SCPU của nhóm tác giả.
Model code 1 - header file 
#include "systemc.h"
SC_MODULE (mux) {
  int const static bit_number=8;
  sc_in <sc_bv <bit_number> > a_in;
  sc_in <sc_bv <bit_number> > b_in;
  sc_in <bool> juht;
  sc_out <sc_bv <bit_number> > out_sig;
  SC_CTOR(mux):a_in("a_in"),b_in("b_in"),
    juht("juht"),out_sig("out_sig") {
    cout<<"mux constructor"<<endl;
    //
    SC_METHOD( choose_out );
      sensitive<<juht<<a_in<<b_in;
  }
  //
  void choose_out() {
    if (juht.read())
      out_sig.write(a_in.read());
    else out_sig.write(b_in.read());
  }
};

Model code 2 - body file
#include "systemc.h"
#include "mux.h"
SC_MODULE (t_mux) {
  int const static num_bits=8;
  sc_signal <sc_bv <num_bits> > t_a_in;
  sc_signal <sc_bv <num_bits> > t_b_in;
  sc_signal <bool> t_juht;
  sc_signal <sc_bv <num_bits> > t_out_sig;
  mux* mux_instance;
  void stimulus();
  SC_CTOR(t_mux):t_a_in("t_a_in"),
    t_b_in("t_b_in"),t_juht("t_juht"),
    t_out_sig("t_out_sig") {
    cout<<"t_mux constructor"<<endl;
    mux_instance=new mux("mux");
    mux_instance->a_in(t_a_in);
    mux_instance->b_in(t_b_in);
    mux_instance->juht(t_juht);
    mux_instance->out_sig(t_out_sig);
    //
    SC_THREAD(stimulus);
  }
};
void t_mux::stimulus()
{
  t_a_in.write("11111111");
  t_b_in.write("00001111");
  t_juht.write((bool)0);
  wait(1, SC_PS);
  t_juht.write((bool)1);
  wait(10, SC_NS);
  t_juht.write((bool)0);
  wait(10, SC_NS);
  t_a_in.write("11110000");
  t_b_in.write("10101010");
  t_juht.write((bool)0);
  wait(10, SC_NS);
  t_juht.write((bool)1);
  wait();
}
int sc_main(int args, char* argv[])
{
  t_mux testMux("t_mux");
  sc_trace_file *trcf=
  sc_create_vcd_trace_file("trace-it");
  if(trcf==NULL) cout<<"Sorry, no tracing..."<<endl;
  sc_trace(trcf, testMux.t_a_in, "t_a_in");
  sc_trace(trcf, testMux.t_b_in, "t_b_in");
  sc_trace(trcf, testMux.t_juht, "t_juht");
  sc_trace(trcf, testMux.t_out_sig, "t_out_sig");
  sc_start(40, SC_NS);
  sc_close_vcd_trace_file(trcf);
  return 0;
}
Bước 1, biên dịch model code.
Mở Cygwin và chuyển đến thư mục chứa model code, ví dụ ở đây là 8560w:/cygdrive/d/mux
Hình 19: Thưc mục chứa model code
Chạy lệnh biên dịch:
g++ -I. -I/cygdrive/d/20.Project/1.ModelBaseDesign/SystemC_lib32_233/include -L. -L/cygdrive/d/20.Project/1.ModelBaseDesign/SystemC_lib32_233/lib-cygwin -o t_mux t_mux.cpp -lsystemc -lm
Trong đó:
  • -I là đường dẫn thư mục cai đặt chứa các file header (.h)
  • -L là đường dẫn thư mục cài đặt thư viện SystemC, ứng với từng nền tảng cụ thể tên thư mục này sẽ khác nhau, ví dụ đối với cygwin32 là "lib-cygwin, đối với cygwin64 là "lib-cygwin64, trên hệ điều hành linux 64 bit là "lib-linux64, ...
  • -o t_mux là tạo file ngõ ra của quá trình biên dịch. Đây là một file thực thi (.exe) tên t_mux
  • t_mux.cpp là file TOP
Hình 20: Biên dịch model code
Sau khi biên dịch thành công, file t_mux.exe được tạo ra. Đây là một file thực thi có đuôi .exe. Chú ý, trên hệ điều hành linux, file được tạo ra sẽ là "t_mux" chứ không phải "t_mux.exe"
Hình 21: Kết quả biên dịch
Bước 2, chạy mô phỏng bằng cách thực thi chương trình C (.exe)
./t_mux.exe
Hình 22: Thực thi chương trình t_mux.exe
Sau khi thực thi chương trình t_mux.exe, file waveform trace-it.vcd được tạo ra. Tên file thể hiện trong model code, các bạn có thể đọc lại để biết.
Hình 23: Kết quả chạy mô phỏng và tạo waveform
Bước 3, xem waveform để debug (nếu cần)
Mở phần mềm gtkwave (gtkwave\bin\gtkwave.exe). Trên menu, chọn File->Open New Tab, mở file .vcd
Hình 24: Mở file .vcd
Thêm các tín hiệu được trace đến cửa sổ wave, các tín hiệu này phải được khai báo trong model code bằng sc_trace.
Hình 25: Add các tín hiệu được trace đến cửa sổ wave
Chọn YES ở cửa sổ sau:
Hình 26: Xác nhận các tín hiệu được add đến wave
Cuối cùng, chúng ta có thể quan sát waveform của tất cả các tín hiệu cần debug.
Hình 27: Quan sát waveform bằng gtkwave
Lịch sử cập nhật:
1. 2019.Apr.29 - Tạo lần đầu

Danh sách tác giả:
1. Lê Hoàng Vân
2. Trương Công Hoàng Việt
3. Nguyễn Hùng Quân

3 bình luận:

  1. Hi anh, anh up lại link mới Vivado 2017.4 hoặc 2018.2 được không?
    Cảm ơn tác giả

    Trả lờiXóa
    Trả lời
    1. Vivado 2017
      https://taivenhanh.com/xilinx-vivado-design-suite-2017-14784.html

      Xóa
  2. Hi,
    Vivado 2018.2: http://download018.fshare.vn/dl/9LsM9ujj35CWXGc126gOK5svCqJi29Vh1HB0-GNnx4f1Rf1vG9mE5tDHWq+Y73YW9lVjESfDuFq1lIZ1/Xilinx.Vivado.Design.Suite.v2018.2.HLx.Edition_hoquangdai.com.rar

    Trả lờiXóa