標(biāo)題: 阻塞(=)與非阻塞(<=) [打印本頁(yè)]

作者: wangyin    時(shí)間: 2014-7-30 14:38
標(biāo)題: 阻塞(=)與非阻塞(<=)
                         阻塞賦值操作符用等號(hào)(即 =)表示。“阻塞”是指在進(jìn)程語(yǔ)句(initial和always)中,當(dāng)前的賦值語(yǔ)句阻斷了其后的語(yǔ)句,也就是說(shuō)后面的語(yǔ)句必須等到當(dāng)前的賦值語(yǔ)句執(zhí)行完畢才能執(zhí)行。而且阻塞賦值可以看成是一步完成的,即:計(jì)算等號(hào)右邊的值并同時(shí)賦給左邊變量。從理論上講,它與后面的賦值語(yǔ)句只有概念上的先后,而無(wú)實(shí)質(zhì)上的延遲。若在RHS 加上延遲,則在延遲期間會(huì)阻止賦值語(yǔ)句的執(zhí)行,延遲后才執(zhí)行賦值,這種賦值語(yǔ)句是不可綜合的,在需要綜合的模塊設(shè)計(jì)中不可使用這種風(fēng)格的代碼。

非阻塞賦值操作符用小于等于號(hào)(即 <=)表示!胺亲枞笔侵冈谶M(jìn)程語(yǔ)句(initial和always)中,當(dāng)前的賦值語(yǔ)句不會(huì)阻斷其后的語(yǔ)句。非阻塞語(yǔ)句可以認(rèn)為是分為兩個(gè)步驟進(jìn)行的:

①計(jì)算等號(hào)右邊的表達(dá)式的值,(我的理解是:在進(jìn)入進(jìn)程后,所有的非阻塞語(yǔ)句的右端表達(dá)式同時(shí)計(jì)算,賦值動(dòng)作只發(fā)生在順序執(zhí)行到當(dāng)前非阻塞語(yǔ)句那一刻)。

②在本條賦值語(yǔ)句結(jié)束時(shí),將等號(hào)右邊的值賦給等號(hào)左邊的變量。

非阻塞賦值操作只能用于對(duì)寄存器類型變量進(jìn)行賦值,因此只能用在"initial"塊和"always"塊等過(guò)程塊中。非阻塞賦值不允許用于連續(xù)賦值。



掌握可綜合風(fēng)格的Verilog模塊編程的八個(gè)原則會(huì)有很大的幫助。在編寫時(shí)牢記這八個(gè)要點(diǎn)可以為絕大多數(shù)的Verilog用戶解決在綜合后仿真中出現(xiàn)的90-100%的冒險(xiǎn)競(jìng)爭(zhēng)問(wèn)題。

1)時(shí)序電路建模時(shí),用非阻塞賦值。

2)鎖存器電路建模時(shí),用非阻塞賦值。

3)用always塊建立組合邏輯模型時(shí),用阻塞賦值。

4)在同一個(gè)always塊中建立時(shí)序和組合邏輯電路時(shí),用非阻塞賦值。

5)在同一個(gè)always塊中不要既用非阻塞賦值又用阻塞賦值。

6)不要在一個(gè)以上的always塊中為同一個(gè)變量賦值。

7)用$strobe系統(tǒng)任務(wù)來(lái)顯示用非阻塞賦值的變量值

8) 在賦值時(shí)不要使用 #0延遲











歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1