關(guān)于阻塞賦值和非阻塞賦值的問題,明德?lián)P的學(xué)員提得比較多,今天小黑老師專門給大家普及一下阻塞賦值和非阻塞賦值的相關(guān)知識。
一、概述
1、阻塞賦值對應(yīng)的電路往往與觸發(fā)沿沒有關(guān)系,只與電平的變化有關(guān)系。
阻塞賦值符號“=”。
2、非阻塞賦值對應(yīng)的電路結(jié)構(gòu)往往與邊沿觸發(fā)有關(guān)系,只有在觸發(fā)沿時(shí)才有可能發(fā)生賦值的情況。
非阻塞賦值符號“<=”。
二、賦值方式
1、阻塞賦值
阻塞賦值操作符用等號(即 = )表示。阻塞賦值時(shí)先計(jì)算等號右手方向(RHS)部分的值,這時(shí)賦值語句不允許任何別的語句的干擾,直到現(xiàn)行的賦值完成時(shí)刻,即把RHS賦值給 LHS的時(shí)刻,它才允許別的賦值語句的執(zhí)行。一般可綜合的阻塞賦值操作在RHS不能設(shè)定有延遲,(即使是零延遲也不允許)。若在RHS 加上延遲,則在延遲期間會阻止賦值語句的執(zhí)行, 延遲后才執(zhí)行賦值,這種賦值語句是不可綜合的,在需要綜合的模塊設(shè)計(jì)中不可使用這種風(fēng)格的代碼。
阻塞賦值的執(zhí)行可以認(rèn)為是只有一個(gè)步驟的操作:
所謂阻塞的概念是指在同一個(gè)always塊中,其后面的賦值語句從概念上(即使不設(shè)定延遲)是在前一句賦值語句結(jié)束后再開始賦值的。
如果在一個(gè)過程塊中阻塞賦值的RHS變量正好是另一個(gè)過程塊中阻塞賦值的LHS變量,這兩個(gè)過程塊又用同一個(gè)時(shí)鐘沿觸發(fā),這時(shí)阻塞賦值操作會出現(xiàn)問題,即如果阻塞賦值的次序安排不好,就會出現(xiàn)競爭。若這兩個(gè)阻塞賦值操作用同一個(gè)時(shí)鐘沿觸發(fā),則執(zhí)行的次序是無法確定的。
2、非阻塞賦值
非阻塞賦值操作符用小于等于號 (即 <= )表示。在賦值操作時(shí)刻開始時(shí)計(jì)算非阻塞賦值符的RHS表達(dá)式,賦值操作時(shí)刻結(jié)束時(shí)更新LHS。在計(jì)算非阻塞賦值的RHS表達(dá)式和更新LHS期間,其他的Verilog語句,包括其他的Verilog非阻塞賦值語句都能同時(shí)計(jì)算RHS表達(dá)式和更新LHS。非阻塞賦值允許其他的Verilog語句同時(shí)進(jìn)行操作。
非阻塞賦值的操作可以看作為兩個(gè)步驟的過程:
1)在賦值時(shí)刻開始時(shí),計(jì)算非阻塞賦值RHS表達(dá)式。
2)在賦值時(shí)刻結(jié)束時(shí),更新非阻塞賦值LHS表達(dá)式。
非阻塞賦值操作只能用于對寄存器類型變量進(jìn)行賦值,因此只能用在“initial”塊和“always”塊等過程塊中。非阻塞賦值不允許用于連續(xù)賦值。
三、舉例
1、阻塞賦值
2、非阻塞賦值
四、總結(jié)
綜上所述,明德?lián)P至簡設(shè)計(jì)法提出這樣的規(guī)則:
時(shí)序邏輯用非阻塞賦值
組合邏輯用阻塞賦值。
審核編輯:湯梓紅
-
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28360 -
阻塞賦值
+關(guān)注
關(guān)注
0文章
9瀏覽量
9157 -
非阻塞賦值
+關(guān)注
關(guān)注
0文章
10瀏覽量
9999
發(fā)布評論請先 登錄
相關(guān)推薦
評論