標(biāo)題:
Verilog中,順序執(zhí)行與非阻塞賦值
[打印本頁]
作者:
geige
時間:
2015-7-26 02:08
標(biāo)題:
Verilog中,順序執(zhí)行與非阻塞賦值
順序語句是執(zhí)行完一句再執(zhí)行下一句,如果有非阻塞就要按照并行處理,再說幾個概念:
并行,順序:verilog主要的模塊之間都是并行執(zhí)行的,例如各個always之間、always與assign之間、assign之間,如果你在一個always中要對a賦值,而在另一個always中要使用a的值,這時候就要注意了,兩者并行的,處理先后不能確定。你當(dāng)前處理的a,是這個時鐘被賦值的還是上一時鐘被賦值的,意義可能完全不同,這就是并行需要考慮的問題。
而在always內(nèi)部,一般使用了begin...end。這里面的內(nèi)容都是順序執(zhí)行的,比如b=a; c=b,先執(zhí)行一條,再執(zhí)行下一條,那就是c=a了如果里面有兩組if/else,就是先執(zhí)行前一組,再執(zhí)行后一組。但是如果是非阻塞,那就要特殊對待,多個非阻塞賦值是在一個塊結(jié)束時一起執(zhí)行的,比如b<=a; c<=b,那就跟之前不同了,當(dāng)執(zhí)行c<=b 時b還沒有變化成a的值,因此這個賦值的結(jié)果是b被賦值前的值,這兩條語句其實是獨立的、并行的。好處是放得先后順序沒關(guān)系,只要在一個塊內(nèi),隨便寫。這個不是很好理解,怎么說了begin...end之間是順序,到了非阻塞就又變成并行執(zhí)行的呢。不好理解也沒辦法, verilog就是這樣,先告訴你是這樣的,然后又告訴你這樣行不通,習(xí)慣就好了,另外掌握幾條原則:組合邏輯用阻塞賦值,時序邏輯用非阻塞賦值,同一個模塊中不要既用阻塞又用非阻塞...
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1