2009年1月1日 星期四

SystemC SC_THREAD() and SC_CTHREAD()

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();//下個上升緣才更改數據
}
}

Process Type

SC_METHOD

SC_THREAD

SC_CTHREAD

Exec. Trigger

Signal Events

Signal Events

Clock Edge

Exec. Suspend

No

Yes

Yes

Infinite Loop

No

Yes

Yes

Suspend / Resume by

N.A.

wait()

wait() / wait_until()

Construct &

Sensitize Method

SC_METHOD(call_back);

sensitive(events);

sensitive_pos(events);

sensitive_neg(events);

SC_THREAD(call_back);

sensitive(events);

sensitive_pos(events);

sensitive_neg(events);

SC_CTHREAD(call_back,clock_pos())

SC_CTHREAD(call_back,clock_net())


資料來源:
基於SYSTEM C的FPGA設計方法
http://www.cnblogs.com/oomusou/archive/2006/12/13/590991.html

沒有留言: