Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Create an account
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
semicon_lab.jpg

Giới thiệu SystemC và ứng dụng trong thiết kế phần cứng

E-mail Print PDF

1. Giới thiệu

SystemC là một thư viện các lớp và macro C++ dùng để mô tả các hệ thống có các sự kiện xảy ra đồng thời, nên có thể dùng để mô tả phần cứng như các ngôn ngữ Verilog hay VHDL.Để chuyển từ C qua RTL, hiện nay đa số vẫn dùng cách chuyển bằng tay (manual). Cách chuyển này thường dễ tạo ra lỗi do nhiều dữ kiện và vì vậy thời gian thử nghiệm gia tăng và mức gia tăng này có thể gấp nhiều lần so với độ phức tạp của thiết kế.

C chỉ có thể mô tả cách hoạt động tuần tự cho nên không thích hợp với những hệ thống đòi hỏi về hoạt động đồng bộ (multi-thread). SystemC extension đã xuất phát để giải quyết vấn đề này.

SystemC synthesis subset (tổng hợp) cũng đã được đề ra để cho những công cụ tổng hợp tuân theo và chuyển từ systemC qua RTL. Khi tổng hợp, những công cụ này phải làm những công việc mà bình thường được làm bằng tay với lợi điểm là lẹ và chính xác về thời gian hơn.

 

2. Chương trình nhập môn "Hello World"

Như thường lệ khi bắt đầu với một ngôn ngữ lập trình nào, chúng ta luôn bắt đầu với chương trình với tên gọi " hello world". Vậy để bắt đầu, chúng ta cùng xem đoạn code ví dụ về flipflop cơ bản trong systemC (có thể cho là chương trình hello world hoặc không :v ). Giống như Verilog, một chương trình chính của SystemC được gọi là một module.

Ví dụ trên là chương trình flipflop trong cả 2 ngôn ngữ VHDL và SystemC. Đối với những người đã quen với VHDL hay Verilog thì bạn sẽ thấy sự tương đòng giữa 2 ngôn ngữ VHDL với SystemC. Còn đối với những bạn chưa biết tới VHDL hay Verilog thì có thể sẽ thấy lại lẫm với cách tạo chương trình SystemC này. SystemC được dựa trên ngôn ngữ C++ nhưng nó khá là khác xa so với C++.Thôi chém nhiều thì lan man, vần từng câu lệnh của chương trình nào.hi

Bắt đầu một chương trình SystemC là một thư viện "systemc.h" chứa các hàm mà chúng ta có thể sử dụng, và đương nhiên là nó cũng tương tự như gói thư viện std_logic_1164. Như mình đã nói ở trên, chương trình chính của SystemC được gọi là một module nên khi bắt đầu một chương trình nào thì chúng ta cần khai báo nằm trong SC_MODULE, cú pháp:

SC_MODULE (TEN CHUONG TRINH){};

SC_MODULE: bao gồm các cổng I/O, các chương trình con, khởi tạo thành phần process... Nó tương tự như module trong Verilog hoăc ENTITY trong VHDL. Tên module nằm trong dấu ngoặc đơn ở đây có tên là dff.

Sau SC_MODULE là các câu lệnh quy định cổng vào ra của module. Với flipflop, chúng ta cần một xung clk, một cổng vào và một cổng ra , có thể có thêm cổng reset. Cú pháp:

sc_in <kieu du lieu> ten cong;

sc_out <kieu du leiu> ten cong;

Tại sao xung clk lại là kiểu Bool? Lý do sử dụng kiểu bool là do SystemC một bộ tạo xung clock ( sẽ giới thiệu ở phần sau) với kiểu dữ liệu ra là boolean.

Hàm p1 chứa các câu lệnh xử lý, ở trên là một hàm đơn giản với phép gán dout = din khi sườn lên của xung clock. Tương tự như trong môt process của VHDL, hàm p1 sẽ không có giá trị trả về.

Hàm tạo SC_CTOR thì không có cấu trúc tương đương trong VHDL, nó là một phần đặc biệt của ngôn ngữ SystemC. Hàm tạo được gọi cho mỗi thực thể của module dff. Nhiệm vụ của hàm tạo là khoeir tạo các module trong bộ nhớ và truyền lại một số thông tin vào SystemC kernel trước khi mô phỏng bắt đầu.

Bên trong hàm tạo SC_CTOR chúng ta nói với SystemC kernel những loại process bạn muốn cho hàm p1. Trong VHDL chúng ta chỉ có 1 loại process nhưng tring SystemC chúng ta có tới 3 loại (SC_METHOD, SC_THREAD, SC_CTHREAD) ( sẽ giới thiệu ở bài sau 3 loại này). Trong ví dụ trên, chúng ta nói cho SystemC kernel biết rằng hàm p1 là một process loại SC_METHOD.

Tương tự VHDL, chúng ta cần khai báo danh sách độ nhạy cho một process, câu lệnh và cú pháp như trên hình.

Trên đây là bài giới thiệu SystemC và một chương trình ví dụ. Bạn có thể dùng Visual Studio (đã add nguồn SystemC ) để chạy chương trình.

CODE:

// SystemC FlipFlop, dff.h

#include "systemc.h"

SC_MODULE(dff) {

    sc_in<bool > clk;

    sc_in<sc_logic > din;

    sc_out<sc_logic > dout;

    void p1() {

        if (clk.posedge()) {

           dout=din;

        }

    }

    SC_CTOR(dff) {

        SC_METHOD(p1);

          sensitive(clk);

    }

};

 

3. Ứng dụng của SystemC trong thiết kế phần cứng

Tại sao cần phải sử dụng SystemC và vai trò của SystemC trong thiết kế phần cứng là gì?

Câu trả lời có thể có được thông qua một ví dụ đơn giản như sau:

 

Các mẫu xe ô tô hiên đại có hàng trăm con vi điều khiển. Việc thiết kế và kiểm tra một hệ thống như vậy vô cùng phức tạp. Không thể dùng thiết bị thật cho việc thiết kế và kiểm tra mà phải dùng các công cụ mô phỏng.

 

Hiện tại, ngôn ngữ SystemC được dùng để mô tả các mô hình như trên. Bản chất SystemC là một thư viện các lớp C++ hỗ trợ cho việc mô phỏng phần cứng. Kết hợp với C++ chuẩn, một hệ thống phần cứng và phần mềm có thể được mô phỏng đồng thời và các nhà thiết kế có thể tối ưu thiết kế trước khi sản xuất một sản phẩm mẫu.

Nguồn: Vimach, Tổng hợp

Bạn Có Đam Mê Với Vi Mạch hay Nhúng      -     Bạn Muốn Trau Dồi Thêm Kĩ Năng

Mong Muốn Có Thêm Cơ Hội Trong Công Việc

    Và Trở Thành Một Người Có Giá Trị Hơn

Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng

Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON  

 

Hotline: 0972.800.931 - 0938.838.404 (Mr Long)

 

 

Last Updated ( Wednesday, 14 August 2019 20:24 )  

Related Articles

Chat Zalo