Bài học SYSTEMC 2: Cơ chế biên dịch thực hiện một chương trình SystemC

Thảo luận trong 'C/C++/SYSTEMC' bắt đầu bởi Lu ROm, 22 Tháng bảy 2016.

Chia sẻ trang này

Lượt xem: 2,859

  1. Lu ROm

    By:Lu ROmin: 22 Tháng bảy 2016
    Administrator Staff Member

    Tham gia ngày:
    25 Tháng bảy 2014
    Bài viết:
    481
    Đã được thích:
    118
    - Sau bài một giới thiệu về ngôn ngữ SystemC tại đây. Phần tiếp theo chúng ta sẽ tìm hiểu về cơ chế biên dịch thực hiện một chương trình SystemC. Như đã giới thiệu SystemC là một thư viện lớp C++, do đó, để biên dịch và chạy một chương trình Hello_SystemC, người ta phải thực hiện C ++ và trên môi trường SystemC. Các thành phần của môi trường này bao gồm:
    • SystemC-supported platform
    • SystemC-supported C++ compiler
    • SystemC library (downloaded and compiled)
    • Compiler command sequence, make file, or equivalent.
    - Các thư viện và mã nguồn SystemC mới nhất luôn được cập nhật tại trang chủ www.systemc.org. Bạn có thể vào đó tham khảo và tải về thư viện bạn cần. Bạn có thể làm theo hướng dẫn cài đặt chương trình và tạo thư viện SystemC tại đây.
    1. Luồng thiết kế.
    - Luồng để biên soạn một chương trình SystemC hoặc thiết kế là rất truyền thống, và được minh họa trong Hình 3-2 dành cho GNU C ++. Hầu hết các trình biên dịch khác cũng tương tự. Các trình biên dịch C ++ đọc mỗi file code SystemC thiết lập riêng biệt và tạo ra một object file (đối tượng, phần mở rộng của file thường là .o). Mỗi file thiết lập bao gồm hai tập tin thường có phần mở rộng tập tin tiêu chuẩn. Chúng ta sử dụng .h.cpp là phần mở rộng tập tin, đây là 2 file mở rộng phổ biến nhất trong C++. Các tập tin .h thường được gọi là tập tin header và tập tin cpp thường được gọi là tập tin implementation(thực thi).
    upload_2016-7-22_9-37-21.png
    - Sau khi tạo ra các tập tin đối tượng, trình biên dịch (loader hoặc linker) sẽ liên kết các tập tin đối tượng của bạn với các tập tin đối tượng thích hợp từ thư viện SystemC. Các tập tin kết quả thường được gọi là một executable, và nó chứa các kernel mô phỏng SystemC và chức năng thiết kế của bạn.
    - Compiler và linker cần phải biết hai mẩu đặc biệt của thông tin. Đầu tiên, các trình biên dịch cần phải biết nơi mà các tập tin header SystemC nằm ( #include <systemc.h>). Thứ hai, linker cần phải biết nơi mà các thư viện SystemC biên dịch được đặt. Điều này thực hiện bằng cách cung cấp một biến môi trường có tên SYSTEMC, và đảm bảo các quy tắc Makefile sử dụng thông tin. Nếu sử dụng gcc, lệnh có thể trông giống như thế này:
    Mã:
    g++ –I$ (SYSTEMC) /include \
    –L$ (SYSTEMC) /lib–$ (ARCH) –lsystemc \
    $(SRC)
    
    - Một ví dụ về SystemC ở bên dưới. Bạn có thể copy và chạy trên trình biên dịch của bạn. Có thể dung visual 2010, GCC hay công cụ khác để biên dịch và hiểu rỏ hơn.(Mình thì dùng Vivado HLS).
    Mã:
    #include <systemc.h>
    #include <iostream>
    SC_MODULE(Hello_SystemC) {//declare the module class
    sc_in_clk iclk; //define the clock port
    SC_CTOR(Hello_SystemC) {//create a constructor
    SC_METHOD(main_method) ;// register the main
    // process
    sensitive << iclk. neg();//specify clk
    // sensitivity
    dont_initialize(); //skip initial call
    }
    void main_method(void) {
    std:: cout << sc_time_stamp()
    <<" Hello world! "
    << std:: endl;
    }
    };
    int sc_main(int argc,  char* argv[]) {
    //declare a time constant
    const sc_time t_PERIOD (8, SC_NS) ;
    //create periodic clock
    sc_clock clk ("clk", t_PERIOD);
    //create an instance
    HelloWorld iHelloWorld ("iHelloWorld");
    //connect the clock port and clock
    iHelloWorld. iclk(clk);
    // invoke the simulator
    sc_start(10, SC_NS);
    return 0;
    }
    -*** Bài viết mình dịch từ sách tiếng anh nên có vài sai sót mong các bạn thông cảm và góp ý.