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.
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 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.
|
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
Hi anh, anh up lại link mới Vivado 2017.4 hoặc 2018.2 được không?
Trả lờiXóaCảm ơn tác giả
Vivado 2017
Xóahttps://taivenhanh.com/xilinx-vivado-design-suite-2017-14784.html
Hi,
Trả lờiXóaVivado 2018.2: http://download018.fshare.vn/dl/9LsM9ujj35CWXGc126gOK5svCqJi29Vh1HB0-GNnx4f1Rf1vG9mE5tDHWq+Y73YW9lVjESfDuFq1lIZ1/Xilinx.Vivado.Design.Suite.v2018.2.HLx.Edition_hoquangdai.com.rar