Verilog 中 <= 和=賦值區(qū)別

非阻塞(Non_Blocking)賦值方式( 如 b <= a; ), 塊結(jié)束后才完成賦值操作,值并不是立刻就改變的, 這是一種比較常用的賦值方法。(特別在編寫可綜合模塊時)。

阻塞(Blocking)賦值方式( 如 b = a; ), 賦值語句執(zhí)行完后,塊才結(jié)束,值在賦值語句執(zhí)行完后立刻就改變的, 可能會產(chǎn)生意想不到的結(jié)果。

見西安企云基創(chuàng)軟件

一般情況下組合邏輯使用=賦值,時序邏輯使用<=賦值。

舉個例子:初始化m=1,n=2,p=3;分別執(zhí)行以下語句
1、begin
m=n;n=p;p=m;
end
2、begin
m<=n; n<=p; p<=m;
end
結(jié)果分別是:1、m=2,n=3,p=2;(在給p賦值時m=2已經(jīng)生效)
2、m=2,n=3,p=1;(在begin-end過程中,m=2一直無效而是在整體執(zhí)行完后才生效)
這兩種賦值“=”用于阻塞式賦值;“<=”用于非阻塞式賦值中。
阻塞賦值:阻塞賦值語句是在這句之后所有語句執(zhí)行之前執(zhí)行的,即后邊的語句必須在這句執(zhí)行完畢才能執(zhí)行,所以稱為阻塞,實際上就是順序執(zhí)行。
非阻塞賦值:非阻塞賦值就是與后邊相關(guān)語句同時執(zhí)行,即就是并行執(zhí)行。
所以一般時序電路使用非阻塞賦值,assign語句一般使用=阻塞賦值;
組合邏輯電路使用阻塞賦值。

在使用阻塞賦值和非阻塞賦值時的八大原則:

1)時序電路建模時,采用非阻塞賦值;

2)鎖存器電路建模時,采用非阻塞賦值;

3)用always塊建立組合邏輯模型時,采用阻塞賦值;

4)用always塊建立時序和組合邏輯混合電路時,采用非阻塞賦值;

5)不要在同一個always塊中同時使用非阻塞賦值和阻塞賦值;

6)不要在一個以上的always塊中為同一個變量賦值;

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

8)在賦值時,不要用#0延遲;

————————————————
版權(quán)聲明:本文為CSDN博主「iPlatForm」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/iplatform/article/details/78874239

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容