System C特點(diǎn)及FPGA設計
2.過(guò)程
模塊中的處理過(guò)程(process)類(lèi)似于C語(yǔ)言中的子程序,與C語(yǔ)言中的子程序不同的的是它具有HDL語(yǔ)言中的觸發(fā)功能。處理過(guò)程(process)的具體工作部分被保存為.cpp文件。處理過(guò)程的調用類(lèi)似于在C語(yǔ)言中子程序的調用。根據不同的要求,SystemC中有三種處理過(guò)程。
● Methods : SC_METHOD()
● Threads : SC_THREAD()
● Clock Threads : SC_CTHREAD() SC_METHOD是用來(lái)描述組合邏輯,它由輸入信號的變化觸發(fā),但不能在兩次調用中保存控制狀態(tài)。并且在SC_METHOD中不能包含無(wú)限循環(huán)。由于組合邏輯有可能導致毛刺的產(chǎn)生,從而影響系統性能,所以SC_METHOD不易太復雜。
下面是一個(gè)簡(jiǎn)單的SC_METHOD例子:
SC_MODULE(example) {
sc_in din;
sc_out dout;//端口
void inverter();//處理過(guò)程聲明
SC_CTOR(example) {
SC_METHOD(inverter);
sensitive(din);//處理過(guò)程由輸入變化觸發(fā)
}
};
處理過(guò)程inverter如下:
void example::inverter() {
bool internal;
internal = din;//輸入數據取反后由輸出端口輸出
dout = ~internal;
}
SC_THREAD是最常用的處理過(guò)程,基本上可以用在任何地方。它是由輸入信號的變化觸發(fā),但與SC_METHOD不同的是它可以在兩次調用這保存控制狀態(tài)。它的功能類(lèi)似于積存器的功能。SC_THREAD中可以包含有wait()函數,這使得處理過(guò)程可以被掛起。
SC_CTHREAD是SC_THREAD的一種特殊情況。SC_CTHREAD能產(chǎn)生更好的綜合效果。SC_CTHREAD中可以使用wait()函數。在不同的狀態(tài)間加入wait()函數,設計人員可以用SC_CTHREAD來(lái)實(shí)現狀態(tài)機。這種設計風(fēng)格是簡(jiǎn)便的而且容易理解。SC_CTHREAD只能由時(shí)鐘信號沿觸發(fā),而SC_THREAD可以由其它非時(shí)鐘信號觸發(fā)。如果在時(shí)鐘上跳邊觸發(fā),可以使用pos()函數,反之用neg()。
為進(jìn)一步說(shuō)明SC_CTHREAD,下面給出了一個(gè)SC_CTHREAD的例子。
SC_MODULE(example) {
sc_in_clk clock;//輸入時(shí)鐘
sc_in trigger, din;
sc_out dout;
void invert();
SC_CTOR(example) {
SC_CTHREAD(toggler, clock.pos());//時(shí)鐘上升沿觸發(fā)
}
}
void example::invert() {
bool last = false;
for (;;) {
wait_until(trigger.delayed() == true);//等到下個(gè)時(shí)鐘上升沿 //且trigger=1再執行
last = din; dout = last; wait();
last =~din; dout = last;wait();//下個(gè)上升沿才更改數據
}
}
3.端口與信號
與HDL語(yǔ)言相似,使用System C庫就可以在C程序中加入端口和信號。這些原先C語(yǔ)言中沒(méi)有的功能,使設計更復合硬件設計的要求。
模塊與模塊之間是通過(guò)端口信號加一聯(lián)系。只要兩個(gè)端口被連接在一起,信號就可以在它們之間進(jìn)行傳遞。對于這一點(diǎn)習慣用HDL進(jìn)行設計的設計人員是很容易理解和接受的,因為這和HDL中端口的功能是一樣的。 信號只是在一個(gè)模塊的內部使用,這也是和HDL中信號的用法是一致的。 下面給出端口和信號聲明的例子。
sc_in“類(lèi)型”> din// 輸入端口din
sc_out“類(lèi)型”> dout// 輸出端口dout
sc_inout“類(lèi)型”> q// 輸入輸出端口q
sc_signal i[16]; //創(chuàng )建一個(gè)具有16比特的邏輯型信號i
4.數據類(lèi)型
考慮到硬件設計的要求,System C中也加入了一些硬件設計中常用的數據類(lèi)型。具體如下:
sc_int 有符號整數類(lèi)型,最大有64個(gè)比特位。
sc_uint 無(wú)符號整數類(lèi)型,最大有64個(gè)比特位。
sc_bigint 有符號整數類(lèi)型,任意比特位,其最大比特位定義在
sc_constants.h中。
sc_biguint 無(wú)符號整數類(lèi)型,任意比特位,其最大比特位定義在
sc_constants.h中。
sc_bit 二值數據,單比特位。
sc_logic 四值數據,單比特位。
sc_bv 二值數據,任意比特位。
sc_lv 四值數據,任意比特位。
sc_fixed 參數固定的有符號定點(diǎn)數。
sc_ufixed 參數固定的無(wú)符號定點(diǎn)數。
sc_fix 參數不固定的有符號定點(diǎn)數。
sc_ufix 參數不固定的無(wú)符號定點(diǎn)數。
User defined structs 用戶(hù)自定義結構
以上是一些System C的基本概念。
五、結論
System C是一種很有效的設計方法,它不僅可以幫助設計人員完成一個(gè)復雜的系統設計,還可以避免傳統設計中的各種弊端,并提高設計人員的工作效率。它的這些優(yōu)點(diǎn)使System C在復雜的系統設計中大有作為。并且習慣用HDL的設計人員,可以很容易地轉到用System C設計。本文引用地址:http://dyxdggzs.com/article/151249.htm
評論