VHDL非阻塞賦值理解_第1頁(yè)
VHDL非阻塞賦值理解_第2頁(yè)
VHDL非阻塞賦值理解_第3頁(yè)
VHDL非阻塞賦值理解_第4頁(yè)
VHDL非阻塞賦值理解_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、在always語(yǔ)句塊中,verilog語(yǔ)言支持兩種類型的賦值:阻塞賦值和非阻塞賦值。阻塞賦值使用“=,語(yǔ)句; 非阻塞賦值使用“=”語(yǔ)句。注意,千萬(wàn)不要將這兩種賦值方法與assign賦值語(yǔ)句混淆起來(lái),assign賦值 語(yǔ)句根本不允許出現(xiàn)在always語(yǔ)句塊中。位于begin/end塊內(nèi)的多條阻塞賦值語(yǔ)句是串行執(zhí)行的,這一點(diǎn)同標(biāo)準(zhǔn)的程序設(shè)計(jì)語(yǔ)言是相同的。 但是多條非阻塞賦值語(yǔ)句卻是并行執(zhí)行的,這些非阻塞賦值語(yǔ)句都會(huì)在其中任何一條語(yǔ)句執(zhí)行完成之前開 始執(zhí)行。這正是硬件電路的特點(diǎn),因?yàn)閷?shí)際的邏輯門電路都是獨(dú)立運(yùn)轉(zhuǎn)的,而不是等到其他門電路運(yùn)轉(zhuǎn)結(jié) 束之后自己才開始運(yùn)轉(zhuǎn)。下面我們以描述移位寄存器的兩種方法為

2、例來(lái)講述兩種賦值類型的區(qū)別。在下面的這種描述中,第一 個(gè)觸發(fā)器中的數(shù)據(jù)被移到第二個(gè)觸發(fā)器中,第二個(gè)觸發(fā)器中的數(shù)據(jù)被移到第三個(gè)觸發(fā)器中.如此繼續(xù)下 去,直到最后一個(gè)觸發(fā)器中的數(shù)據(jù)被移出該寄存器為止。3outoreg 3outoreg 34always (posedge elk)5begin6q0 = sin; /非阻塞賦值7q1 = q0;8q2 = q19q3 = q2;10/這里寫作 q = q2:0,;11end12endmodule2=sin;更簡(jiǎn)單更好一些module shiftreg (input clk,input sin, :0q);/這是正確使用非阻塞賦值的實(shí)例非阻塞賦值語(yǔ)句的

3、功能是使得所有語(yǔ)句右側(cè)變量的值都同時(shí)被賦給左側(cè)的變量。因此,在上面的實(shí)例中, q1得到的是q0的原始值,而非sin的值(在第一條語(yǔ)句中,sin的值被賦給了 q0)。這正是我們期望得到的實(shí)際硬件電路。當(dāng)然,我們可以把上邊的四條語(yǔ)句合并寫成一條簡(jiǎn)短的語(yǔ)句:qv = q2:0,sin。阻塞賦值語(yǔ)句的功能更接近于傳統(tǒng)的程序設(shè)計(jì)語(yǔ)言,但是阻塞賦值語(yǔ)句并不是準(zhǔn)確的硬件工作模型。下面 考慮使用阻塞賦值語(yǔ)句來(lái)實(shí)現(xiàn)同一模塊可以得到什么結(jié)果。在始終elk的上升沿,verilog將會(huì)把sin的 值賦給q0,然后q0的新值被賦給q1,如此繼續(xù)執(zhí)行下去。最終所有的四個(gè)寄存器都會(huì)得到相同 的值:sin的值。本部分內(nèi)容用意

4、在于:講述使用always語(yǔ)句塊對(duì)時(shí)序邏輯電路進(jìn)行建模的時(shí)候,如何使用非阻塞 賦值。如果設(shè)計(jì)者能夠充分的靈活應(yīng)用,比如倒轉(zhuǎn)上例中四條語(yǔ)句的順序,那么使用阻塞賦值語(yǔ)句仍然能 實(shí)現(xiàn)相應(yīng)的功能,但是與使用非阻塞賦值的方法相比,這種方法并不會(huì)帶來(lái)任何好處,相反還暗藏了巨大 的風(fēng)險(xiǎn)。最后需要注意的是:每個(gè)always語(yǔ)句塊都隱含表示一個(gè)獨(dú)立的邏輯電路模塊。因此,對(duì)于特定的reg類型的變量,只能在一個(gè)always語(yǔ)句塊中對(duì)其進(jìn)行賦值;否則就可能會(huì)出現(xiàn)兩個(gè)硬件模塊同時(shí)從 同一個(gè)輸出端口輸出數(shù)據(jù)的情況,這種情況一般稱為 短路輸出(shorted output)。過程賦值語(yǔ)句多用于對(duì)reg型變量進(jìn)行復(fù)制,過程賦

5、值有阻塞復(fù)制和非阻塞賦值兩種。非阻塞賦值的符號(hào)為:=阻塞賦值符號(hào)為:=非阻塞賦值的例子: reg c,b;always(posedge clk) beginb = a;c = b;endName:aji clk4 blOD Dns 20D.0ns 300.0ns 400 0ns 500.0ns 000.0ns 700 0ns SOQ Ois 900 0nsJName:aji clk4 blOD Dns 20D.0ns 300.0ns 400 0ns 500.0ns 000.0ns 700 0ns SOQ Ois 900 0nsJLX1iri i0XXValue-阻塞賦值的例子:reg c,b;

6、always (posedge clk)beginb = a;c = b;endVatu$:100.0ns 2OO.Dns 300Dns 400.0倨 600.0ns GtH.Ons 7D0b11ns BOO.Ons1iclkIq11 1r0b1pc1上述例子中,使用非阻塞賦值方法,其中的每個(gè)=都可以理解為一個(gè)寄存器。而在同一 個(gè)時(shí)鐘下面采用的非阻塞賦值方法,模塊內(nèi)所有寄存器都同時(shí)隨時(shí)鐘跳變。這是硬件處理 的精髓,也是時(shí)序電路中大量使用非阻塞賦值的原因。在實(shí)際書寫verilog HDL代碼的過程中,對(duì)于always中reg型變量,如果不是處理組合邏 輯,盡量不使用阻塞賦值的方法。這主要是基于代

7、碼的可綜合性考慮的,因?yàn)樵趘erilog HDL代碼編譯的時(shí)候,對(duì)于有些從后編譯的編譯器,阻塞賦值會(huì)找成時(shí)序上與預(yù)想的不 一致。對(duì)于以上阻塞賦值的例子,采用非阻塞方法應(yīng)該寫為reg c,b;always (posedge clk)beginb = a;c = a;end實(shí)現(xiàn)電路和原方法一樣。而在always用于組合邏輯中,采用阻塞賦值表明未使用寄存器。如reg a,A,B,f_a;always (a or A or B)beginf_a = a ? A : B;end以下是使用阻塞和非阻塞賦值應(yīng)遵循的一些基本原則,這些原則有利于防止競(jìng)態(tài)(racecon ditio n)的發(fā)生。1)當(dāng)用alwa

8、ys塊來(lái)描述組合邏輯(comb in atio nal logic)時(shí),應(yīng)當(dāng)使用阻塞賦值。對(duì)于時(shí)序邏輯(sequential logic)的描述和建模,應(yīng)當(dāng)使用非阻塞賦值。在同一個(gè)always模塊中,最好不要混合使用阻塞賦值和非阻塞賦值,對(duì)同一變量 既進(jìn)行阻塞賦值,又進(jìn)行非阻塞賦值,在綜合時(shí)會(huì)出錯(cuò)。所以always中要么全部使用非 阻塞賦值,要么把阻塞賦值和非阻塞賦值分在不同的always中書寫。盡量不要再在多個(gè)不同的always塊中對(duì)同一變量賦值。使用$strobe顯示使用非阻塞賦值的變量。在Verilog HDL中,有兩種過程性賦值方式,即阻塞式(blocking)和非阻塞式(non-bl

9、ocking)。這兩種 賦值方式看似差不多,其實(shí)在某些情況下卻有著根本的區(qū)別,如果使用不當(dāng),綜合出來(lái)的結(jié)果和你所想得 到的結(jié)果會(huì)相去甚遠(yuǎn)。Tip:所謂過程性賦值就是指在initial或always語(yǔ)句內(nèi)的賦值,它只能對(duì)寄存器數(shù)據(jù)類型的變量賦值。阻塞式 (blocking)的操作符為“=”非阻塞式(non-blocking)的操作符為“ =”首先,我們通過兩個(gè)例子來(lái)看看這兩種賦值方式的區(qū)別,這里使用的綜合工具為Qt ii。例1:非阻塞式賦值moduletest_non_blocking(in putclk,in puttesta,in puttestb,in puttestc,in puttes

10、td,output regtestout);reg testreg;always (posedge clk) begintestreg = testb | teste;beginif (testa) begintestout = testreg & testd;endelse begintestout -testout-Otestcut-regD WEDCLftbsstout分析:可以看到,例1和例2的code寫法完全一樣,只是在always語(yǔ)句塊中使用了不同的賦值方 式,就導(dǎo)致綜合出來(lái)的結(jié)果不同。在例1中,是非阻塞式賦值方式,非阻塞式賦值的賦值對(duì)象總是在當(dāng)前仿真時(shí)刻結(jié)束時(shí)被賦 值,所以,當(dāng)在對(duì)語(yǔ)句2中的testout賦值這一時(shí)刻,testreg值還沒有得到

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論