1. 非阻塞指派
- 非阻塞指派操作符用小于等于号 (即 <= )表示。在指派操作時刻開始時計算非阻塞指派符的RHS表達式,指派操作時刻結束時更新LHS。在計算非阻塞指派的RHS表達式和更新LHS期間,其他的Verilog語句,包括其他的Verilog非阻塞指派語句都能同時計算RHS表達式和更新LHS。非阻塞指派允許其他的Verilog語句同時進行操作。
- 非阻塞指派的操作可以看作為兩個步驟的過程:
在指派時刻開始時,計算非阻塞指派RHS表達式。
在指派時刻結束時,更新非阻塞指派LHS表達式。
- 非阻塞指派操作隻能用于對寄存器類型變量進行指派,是以隻能用在“initial”塊和“always”塊等過程塊中。非阻塞指派不允許用于連續指派。
2.阻塞指派
-
阻塞指派操作符用等号(即 = )表示。阻塞指派時先計算等号右手方向(RHS)部分的值,這時指派語句不允許任何别的語句的幹擾,直到現行的指派完成時刻,即把RHS指派給 LHS
的時刻,它才允許别的指派語句的執行。
- 阻塞指派的執行可以認為是隻有一個步驟的操作:
計算RHS并更新LHS,此時不能允許有來自任何其他Verilog語句的幹擾。
- 所謂阻塞的概念是指在同一個always塊中,其後面的指派語句從概念上(即使不設定延遲)是在前一句指派語句結束後再開始指派的。
- 如果在一個過程塊中阻塞指派的RHS變量正好是另一個過程塊中阻塞指派的LHS變量,這兩個過程塊又用同一個時鐘沿觸發,這時阻塞指派操作會出現問題,即如果阻塞指派的次序安排不好,就會出現競争。若這兩個阻塞指派操作用同一個時鐘沿觸發,則執行的次序是無法确定的。
3.邏輯設計所遵循的原則
原則1:時序電路模組化時,用非阻塞指派。
原則2:鎖存器電路模組化時,用非阻塞指派。
原則3:用always塊寫組合邏輯時,采用阻塞指派。
原則4:在同一個always塊中同時建立時序群組合邏輯電路時,用非阻塞指派。
原則5:在同一個always塊中不要同時使用非阻塞指派和阻塞指派。
原則6:不要在多個always塊中為同一個變量指派。