阻塞與非阻塞賦值
首先從名字上理解,阻塞賦值即賦值沒(méi)完成,后邊的語(yǔ)句將無(wú)法執(zhí)行,非阻塞剛好與其相反,即賦值完不完成并不阻礙后續(xù)程序的執(zhí)行,所以我們常說(shuō)非阻塞賦值的對(duì)象并未立馬得到新值,如果從時(shí)序來(lái)看,被賦值對(duì)象會(huì)比賦值對(duì)象差一個(gè)時(shí)鐘周期。
有了上述理解之后,我們就很容易明白為什么阻塞賦值的對(duì)象會(huì)立即發(fā)生改變,在fpga中我們多接觸到的是時(shí)序電路,并不希望被賦值對(duì)象立即改變,所以有對(duì)于組合電路而言,常用阻塞賦值,時(shí)序電路常用非阻塞賦值。
先看一個(gè)大家都熟悉的例子:
先看非阻塞代碼:
clk為主時(shí)鐘分頻之后的時(shí)鐘,clk先賦值給a,然后a在賦值給b,看一看生成的電路圖
可以看出是兩個(gè)觸發(fā)器,而且前一個(gè)觸發(fā)器的輸出是后一個(gè)觸發(fā)器的輸入,再來(lái)看看阻塞的
由于完全為組合電路并未有觸發(fā)器產(chǎn)生,從仿真結(jié)果來(lái)看兩種的區(qū)別
相信大家能夠很容易看出哪個(gè)是阻塞的,哪個(gè)是非阻塞的,從非阻塞的時(shí)序來(lái)看,a比clk延遲了一個(gè)主時(shí)鐘,b比a又延遲了一個(gè)主時(shí)鐘,這不是我想說(shuō)的重點(diǎn),我想讓大家看看a和b是什么時(shí)候開(kāi)始發(fā)生變化的,教材上一直說(shuō)是當(dāng)整個(gè)進(jìn)程結(jié)束時(shí),a和b的值才發(fā)生更新,試問(wèn)你知道什么時(shí)候進(jìn)程結(jié)束么?從仿真結(jié)果來(lái)看,還不如理解為,在每個(gè)時(shí)鐘的上升沿到來(lái)時(shí)a,b的值立即改變,只不過(guò)比原始信號(hào)差一個(gè)時(shí)鐘周期。
-
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601238
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論