SystemC中的模塊
模塊(SC_MODULE)是SystemC系統建模的一個基本單位。一個系統由許多個模塊構成,各個模塊實現系統中不同的功能。在設計中,設計者需要根據功能把復雜的系統劃分成若干個更小、更易于管理的模塊。模塊內部包含若干個進程(Process)來描述模塊的功能。
一個模塊可以包含端口、內部信號、內部數據、子模塊、進程、構造函數和析構函數等,這些元素實現了模塊要求的功能。SC_MODULE是SystemC庫中定義的一個宏,使用它定義一個模塊實際上是定義了一個新對象。下面是一個半加器的例子:
//File:myand.h
#include < systemc.h > //該文件中存有SystemC類庫的定義,所有SystemC模塊都
//必須包含這個文件
SC_MODULE (myand) //這個模塊的名字為myand
{
sc_in< bool > a,b; //輸入端口
sc_out< bool > c; //輸出端口
void proc_and ( ); //聲明進程proc_and
SC_CTOR (myand) { //構造函數
SC_METHOD (proc_and); //proc_and是一個SC_METHOD型進程
sensitive < < a < < b ; //敏感變量
}
}
//myand.cpp //這個文件存放進程的定義
#include "myand.h″
void myand::proc_and( )
{
c=a.read( ) & b.read( );
}
模塊與模塊之間通過通道實現通信,而進程之間則利用通道或事件互相通信。這是最基本的系統建模概念。模塊、端口、接口和通道這些概念在4.7.6節事務級建模中已經有過介紹。
信號是SystemC中新增加的一個概念,模塊之間的通信需要通過端口連接到通道。信號(以sc_signal為例)實現模塊之間端口的連接。信號也是一種通道。
信號與Verilog中的wire類似,可以實現模塊之間的互連,這是一種硬件方式的互連,因此是可綜合的設計。信號一般通過read( )和write( )函數來讀/寫,由于信號總是連接到端口上,如sc_in、sc_out及sc_inout 等,也可以通過端口讀/寫信號。
其中,sc_in端口支持read( )、event( )、posedge( )及negedge( )4種方法,而sc_out和sc_inout還支持write( )方法。
SystemC中的進程
進程是SystemC中基本的運行單元,調用進程可以仿真目標設備或系統的行為。進程是一個獨立的處理單元,可以實現SystemC中并發的行為動作。
并發是SystemC在C++基礎上新增加的概念。對于每個獨立的進程來說,只有在它的敏感信號或敏感事件發生時進程才會被調用,而在其他情況下處于保持狀態。
當多個獨立的進程有同一個敏感變量時,這個敏感變量可以觸發這些進程的調用,實現并發的行為。SystemC的進程有3種:SC_METHOD、SC_THREAD、C_CTHREAD。
- ? 方法進程(SC_METHOD)是目前唯一可綜合的寄存器傳輸級進程,它可以描述同步或非同步系統。方法進程由sensitive()、sensitive_pos( )、sensitive_neg( )等函數中的敏感信號觸發。當敏感列表上有事件發生時,方法進程就會被調用。方法進程調用后需要立即返回,因此在該進程中不允許使用wait( )之類的語句。方法進程由于面向可綜合的設計,而且方法進程的調用特性使它更傾向于在較低的抽象層次上使用,如在寄存器傳輸層次上。
- ? 線程進程(SC_THREAD)在執行過程中能夠被掛起和重新激活,可以使用wait( )語句執行掛起動作,當敏感事件發生時被重新激活執行。由于線程進程的這個特點,它更加適合于較高抽象層次上的行為和系統的描述。線程進程的另外一個用途就是可以用來描述驗證平臺(testbench)。
- ? 鐘控線程進程(SC_CTHREAD)是一種繼承于線程進程的特殊進程,可以認為是線程進程和方法進程在描述行為上的一個折中。它只能在時鐘的上升沿或下降沿被觸發,這種行為其實更接近于實際硬件的行為。
-
模塊
+關注
關注
7文章
2714瀏覽量
47498 -
ESL
+關注
關注
1文章
74瀏覽量
21358 -
進程
+關注
關注
0文章
203瀏覽量
13962 -
系統
+關注
關注
1文章
1017瀏覽量
21358
發布評論請先 登錄
相關推薦
評論