2015-09-05 64 views
2

我正在將一些verilog代碼轉換爲SC。下面是一個情況讓我感到困惑: 用Verilog,連續作業,如:SystemC中的verilog wire相當於什麼?

wire a; 
assign a =1; 

凡將在轉讓之後立即得到1。如果我們把它寫在SC中:

sc_signal<bool> a; 
a.write(1); 

a的當前值不會是1.如何解決這個問題?像以下一樣?

bool a; 
a = 1; 

回答

4

在Verilog中,如果您正在更改RHS並在同一時間同步讀取兩個不同進程中的LHS,則無法保證讀取連續賦值的更新值。您需要使用非阻塞賦值來避免競爭條件。

在SystemC中,write()方法類似於非阻塞賦值。區別在於您需要在SystemC中使用write()方法。所以,你只應該寫信號作爲線程/進程的輸出。如果你需要讀取進程中的信號,那麼你需要使用線程的局部變量。

+0

你說得對,我想。謝謝。我發現SC比Verilog更難,雖然我很熟悉C++。 – swgchlry

+0

他們是不同的語言,不同的優點和缺點。嘗試逐行轉換是困難的。順便說一句,請通過標記來接受這個答案。 –

相關問題