2024年3月13日 星期三

*******SystemC--模組

模組是最基本的單位,包含一些其他元素如:連接埠、內部訊號、內部資料、子模組、流程、建構函式和析構函式等。 這些元素共同定義模組所表達的功能。


使用關鍵字 SC_MODULE 來宣告一個模組,也可以用 C++ 的類別來定義模組。


模組的連接埠

模組間的連接埠使資料能夠在模組間通過,模組之間透過訊號將連接埠連接起來。

連接埠分為三種類型:

  • in
  • out
  • inout

如果需要將某一連接埠的資料賦給模組本身的其他訊號,那麼該連接埠就應該是 inout 類型。

你也可以指定連接埠的資料類型,允許的資料類型包括C++基本資料類型如 bool、int、short、char 等或是 SystemC 專有資料類型如 sc_int、sc_unit、sc_logic 等或使用者定義的任何資料類型。

下面是定義連接埠的範例:


抽象連接埠

SystemC 為了支援交易級建模,也支援抽象端口,範例:

class direct_if : public virtual sc_interface
{
public:
virtual bool direct_read(int* data, unsigned int address) = 0;
virutal bool direct_write(int* data, unsigned int address) = 0;
}
sc_port<direct_if> arbiter_port; // 定義類別一個抽象端口

連接埠的讀寫

// 定義輸入埠
sc_in<bool> data_in;

// 可以進行下面的讀取操作
if (data_in == TRUE) { ... }
if (data_in.read() == 1) { ... }
bool flag = data_in;
bool flag = data_in.read();

// 定義輸出埠
sc_out<int> data_out;

// 可以進行下面的寫入操作
data_out.write(10);
data_out.write(data_in.read());

// 非法的
data_out = data_in; // 直接賦值是不行的,因為兩者型別不同。

連接埠和訊號的多驅動處理



普通的訊號是不允許多驅動的。 SystemC 中引進了解析邏輯向量訊號(Resolved LogicalVector signal)來解決多驅動的問題。 可以使用下面的方法定義解析型連接埠:

sc_in_rv<n> x; // n 位元寬的解析邏輯向量型輸入埠
sc_out_rv<n> y;
sc_inout_rv<n> z;
sc_signal_rv_<n> x; // 寬度為 n 位元的解析型向量訊號

https://blog.iwxyi.com/2021/08/02/SystemC-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#sc-mutex

沒有留言:

張貼留言

*******【WSL教學】在Windows上執行Linux + VSCode

安裝WSL: 以管理員身份運行PowerShell來開啟此功能。要做到這一點,您可以在Windows搜索欄中輸入“PowerShell”,然後右鍵單擊Windows PowerShell,選擇“以管理員身份運行”。 在PowerShell中,輸入以下指令以安裝WSL。 wsl -...