SystemC

基本process

在SystemC中,有三種主要的進程類型,每種類型適用於不同的場景:

SC_METHOD:

表示方法進程,是SystemC中最簡單的進程類型。它在敏感事件發生時觸發執行,執行結束後即停止,不能使用wait()語句。

  • 特點:
  1. 執行時間短,不能有等待操作(wait()語句)。
  2. 對象在每次敏感事件觸發時執行。
  • 適用場景:
    適用於組合邏輯、簡單的行為建模,通常用於描述不會涉及複雜時序行為的部分。

    ​​​​SC_METHOD(sram_prc);
    ​​​​sensitive << clk.pos();
    

SC_CTHREAD:

表示時鐘線程進程,是由clock驅動的進程,可以在進程內部使用wait()語句以便進行suspend和rresume操作。

特點:

  1. 必須包含一個wait()語句來同步時鐘(即等待一個cycle)。
  2. 可以有多個wait()語句,用於描述複雜的時序行為。
  3. 可以進行掛起和恢復操作,適用於需要進行循環和複雜控制的場景。

suspend/resume:

  1. Suspend:
    定義:指進程在某個點暫停執行,進入等待狀態,直到某個條件或事件發生。
    在SC_CTHREAD中:suspend是通過wait()語句實現的。當進程執行到wait()語句時,進程會暫停,等待下一個時鐘周期或者某個事件發生。

  2. Resume:
    定義:指進程從等待狀態中恢復執行,從suspend的位置繼續執行後續的代碼。
    在SC_CTHREAD中:當等待的條件滿足(例如下一個時鐘周期到來)時,進程會從上一次掛起的位置繼續執行,這就是恢復操作

    ​​​​//suspend, resume example
    ​​​​SC_CTHREAD(example_process, clk.pos());
    
    ​​​​void example_process() {
    ​​​​while (true) {
    ​​​​// 第一個時鐘周期的操作
    ​​​​do_something();
    ​​​​wait(); // suspend,等待下一個時鐘周期
    
    ​​​​// 第二個時鐘周期的操作
    ​​​​do_something_else();
    ​​​​wait(); // suspend,等待下一個時鐘周期
    ​​​​// 第三個時鐘周期的操作
    ​​​​do_another_thing();
    ​​​​wait(); // suspend,等待下一個時鐘周期
    ​​​​}
    ​​​​}
    

適用場景:

適用於時鐘同步的過程、描述複雜時序行為,如寄存器傳輸級(RTL)設計。

SC_CTHREAD(process, clk.pos());

SC_THREAD:

表示線程進程,與SC_METHOD類似,但SC_THREAD可以在進程內部使用wait()語句,從而允許進程suspend or resume。

特點:

  1. 可以使用wait()語句,但不需要與時鐘同步。
  2. 適合描述複雜的時序邏輯和行為建模。
  3. 比SC_CTHREAD更靈活,因為它不強制要求與時鐘同步。

適用場景:

適用於複雜的控制邏輯、模擬真實硬體行為、需要進行suspend/resume的場景。

SC_THREAD(process);
sensitive << clk.pos();

總結:

SC_METHOD:適用組合邏輯。
SC_CTHREAD:時鐘同步,複雜時序,適用於RTL design。
SC_THREAD:較靈活,適用於複雜控制邏輯。

Constructor/Destructor function

Constructor

SystemC的建構函式為SC_CTOR,必須與module的名字相同。

SC_CTOR(sram8x256){
    men=new sc_uint<8>[256]for (int i=0;i<256;i++) mem[i]=0;
    SC_METHOD(sram_prc);
    sensitive<<clk.pos();//對posede clk sensitive
};

Destructor

結束時執行清理工作。
在C++和SystemC中,析構函式以~符號開頭。

~sram8x256(){
	if(mem){
		delete mem;
		mem=0;
	}
}