System C

System C是由Synopsys公司和CoWare公司積極回響目前各方對系統級設計語言的需求而合作開發的。

基本介紹

  • 中文名:System C
  • 特點:基本
  • 屬於:設計單元
  • 套用:晶片
基本簡介,基本概念,模組,過程,連線埠與信號,

基本簡介

隨著半導體技術的迅猛發展,Soc已經成為當今積體電路設計的發展方向。在系統晶片的各個設計中,像系統定義、軟硬體劃分、設計實現等,積體電路設計界一直在考慮如何滿足Soc的設計要求,一直在尋找一種能同時實現較高層次的軟體和硬體描述的系統級設計語言。
System C正是在這種情況下,由Synopsys公司和CoWare公司積極回響目前各方對系統級設計語言的需求而合作開發的。1999年9月27日,40多家世界著名的EDA公司、IP公司、半導體公司和嵌入式軟體公司宣布成立“System C 聯盟”。System C 從1999年9月聯盟建立初期的0.9版本開始更新,從1.0到1.1版本,2001年10月推出了2.0版本。

基本概念

模組

模組是System C設計中的基本設計單元。模組可以使得設計者將一個複雜的系統分割為一些更小但易於管理的部分。
System C模組的功能和作用與HDL語言中的模組是相類似的,這使得一位習慣於用HDL進行設計的設計人員可以很容易的轉向用System C進行設計。
模組在System C中的關鍵字為SC_MODULE。緊跟著關鍵字後的是模組的名稱,如SC_MODULE(fifo),這就定義了一個叫fifo的模組。定義的模組也可以像HDL語言一樣包含連線埠、信號、其它模組、處理過程和結構體,這些單元實現用以實現模組的功能。通過連線埠可以將幾個模組連線起來。
模組被保存為.h檔案。如果在一個模組中調用其它模組,只需像C++中引入庫一樣將要調用的模組作為一個庫引入即可。

過程

模組中的處理過程(process)類似於C語言中的子程式,與C語言中的子程式不同的的是它具有HDL語言中的觸發功能。處理過程(process)的具體工作部分被保存為.cpp檔案。處理過程的調用類似於在C語言中子程式的調用。根據不同的要求,SystemC中有三種處理過程。
● Methods : SC_METHOD()
● Threads : SC_THREAD()
● Clock Threads : SC_CTHREAD()
SC_METHOD是用來描述組合邏輯,它由輸入信號的變化觸發,但不能在兩次調用中保存控制狀態。並且在SC_METHOD中不能包含無限循環。由於組合邏輯有可能導致毛刺的產生,從而影響系統性能,所以SC_METHOD不易太複雜。 下面是一個簡單的SC_METHOD例子:
SC_MODULE(example) {
sc_in<bool> din;
sc_out<bool> dout;//連線埠
void inverter();//處理過程聲明
SC_CTOR(example) {
SC_METHOD(inverter);
sensitive(din);//處理過程由輸入變化觸發
}
};
處理過程inverter如下:
void example::inverter() {
bool internal;
internal = din;//輸入數據取反後由輸出連線埠輸出
dout = ~internal;
}
SC_THREAD是最常用的處理過程,基本上可以用在任何地方。它是由輸入信號的變化觸發,但與SC_METHOD不同的是它可以在兩次調用這保存控制狀態。它的功能類似於暫存器的功能。SC_THREAD中可以包含有wait()函式,這使得處理過程可以被掛起。
SC_CTHREAD是SC_THREAD的一種特殊情況。SC_CTHREAD能產生更好的綜合效果。SC_CTHREAD中可以使用wait()函式。在不同的狀態間加入wait()函式,設計人員可以用SC_CTHREAD來實現狀態機。這種設計風格是簡便的而且容易理解。SC_CTHREAD只能由時鐘信號沿觸發,而SC_THREAD可以由其它非時鐘信號觸發。如果在時鐘上跳邊觸發,可以使用pos()函式,反之用neg()。
為進一步說明SC_CTHREAD,下面給出了一個SC_CTHREAD的例子。
SC_MODULE(example) {
sc_in_clk clock;//輸入時鐘
sc_in<bool> trigger, din;
sc_out<bool> dout;
void invert();
SC_CTOR(example) {
SC_CTHREAD(toggler, clock.pos());//時鐘上升沿觸發
}
}
void example::invert() {
bool last = false;
for (;;) {
wait_until(trigger.delayed() == true);//等到下個時鐘上升沿 //且trigger=1再執行
last = din; dout = last; wait();
last =~din; dout = last;wait();//下個上升沿才更改數據
}
}

連線埠與信號

與HDL語言相似,使用System C庫就可以在C程式中加入連線埠和信號。這些原先C語言中沒有的功能,使設計更複合硬體設計的要求。
模組與模組之間是通過連線埠信號加一聯繫。只要兩個連線埠被連線在一起,信號就可以在它們之間進行傳遞。對於這一點習慣用HDL進行設計的設計人員是很容易理解和接受的,因為這和HDL中連線埠的功能是一樣的。 信號只是在一個模組的內部使用,這也是和HDL中信號的用法是一致的。 下面給出連線埠和信號聲明的例子。
sc_in<“類型”> din// 輸入連線埠din
sc_out<“類型”> dout// 輸出連線埠dout
sc_inout<“類型”> q// 輸入輸出連線埠q
sc_signal<sc_logic> i[16]; //創建一個具有16比特的邏輯型信號i
考慮到硬體設計的要求,System C中也加入了一些硬體設計中常用的數據類型。具體如下:
sc_int 有符號整數類型,最大有64個比特位。
sc_uint 無符號整數類型,最大有64個比特位。
sc_bigint 有符號整數類型,任意比特位,其最大比特位定義在
sc_constants.h中。
sc_biguint 無符號整數類型,任意比特位,其最大比特位定義在
sc_constants.h中。
sc_bit 二值數據,單比特位。
sc_logic 四值數據,單比特位。
sc_bv 二值數據,任意比特位。
sc_lv 四值數據,任意比特位。
sc_fixed 參數固定的有符號定點數。
sc_ufixed 參數固定的無符號定點數。
sc_fix 參數不固定的有符號定點數。
sc_ufix 參數不固定的無符號定點數。
User defined structs 用戶自定義結構
以上是一些System C的基本概念。

相關詞條

熱門詞條

聯絡我們