1.前言
最近幫朋友搞定一個(gè)小問題,記錄一下。不啰嗦,直接上結(jié)論:當(dāng)某個(gè)信號(hào)出現(xiàn)多于一個(gè)驅(qū)動(dòng)源的時(shí)候,或者某個(gè)信號(hào)是雙向(inout)的時(shí)候,都需要使用wire來完成線網(wǎng)連接。具體用法就是聲明某個(gè)信號(hào)為wire sigal_a;或者wire logic signal_a;就可以了。注意直接聲明為logic signal_a;是不行的,會(huì)報(bào)類似如下的錯(cuò)誤:xmelab: *E,ICDCBA: Illegal combination of driver and output clockvar to variable 'signal_a' detected (output clockvar found in ......).
2. 實(shí)例代碼
interface test_if(input clk); //var logic multi_drv_sig;//code bug logic multi_drv_sig;//code bug //wire logic multi_drv_sig;//ok //wire multi_drv_sig;//ok clocking cb @(posedge clk); inout multi_drv_sig; endclocking modport modp_0(output multi_drv_sig); modport modp_1(input multi_drv_sig); endinterface module test(); test_if test_if0(); assign test_if0.modp_1.multi_drv_sig=0; endmodule
3.Makefile腳本
all:clean xrun -sv -64bit -access rwc -top test ./*.sv clean: rm -rf *.d *.history *.log4.仿真結(jié)果
5.報(bào)錯(cuò)信息查詢
如下圖所示,查詢報(bào)錯(cuò)信息的含義,xrun甚至還給出了解決方案,通過添加工具提供的選項(xiàng)-warn_multiple_driver的確可以將這個(gè)*E的Error降為Warning,但是這不是問題的根源。
6. 問題的根源
如下圖所示,第4行和第5行的用法都是對(duì)的,第2行和第3行的用法都是錯(cuò)誤的。
7. Summary& Conclusion
在SystemVerilog中,類型可以分為線網(wǎng)(net)和變量(variable)。線網(wǎng)的賦值設(shè)定與Verilog的要求相同,即線網(wǎng)賦值需要使用連續(xù)賦值語句(assign),而不應(yīng)該出現(xiàn)在過程塊(initial/always)中;相比于線網(wǎng)驅(qū)動(dòng)的限制,變量(var)類型的驅(qū)動(dòng)要求就沒有那么多了,如logic [15:0] signal_b,該變量默認(rèn)類型是var(變量),對(duì)它可以使用連續(xù)賦值或過程賦值。
簡(jiǎn)言之,可以在module中的數(shù)值存儲(chǔ)和線網(wǎng)連接,多數(shù)情況下使用logic類型變量,而很少有只能使用wire的情況。那么什么時(shí)候需要使用wire類型呢?就是本文的這種scenario:當(dāng)某個(gè)信號(hào)出現(xiàn)多于一個(gè)驅(qū)動(dòng)源的時(shí)候,或者某個(gè)信號(hào)是雙向(inout)的時(shí)候,都需要使用wire來完成線網(wǎng)連接。具體用法就是聲明某個(gè)信號(hào)為wire sigal_a;或者wire logic signal_a;就可以了。
編輯:黃飛
-
信號(hào)處理
+關(guān)注
關(guān)注
48文章
1030瀏覽量
103292 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110124 -
Makefile
+關(guān)注
關(guān)注
1文章
125瀏覽量
19189
原文標(biāo)題:SystemVerilog中如何處理信號(hào)的雙驅(qū)動(dòng)問題
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論