FPGA應用與開發(fā)實踐教程 課件 附A4 Verilog HDL語言描述形式-塊語句和賦值語句規(guī)則及案例_第1頁
FPGA應用與開發(fā)實踐教程 課件 附A4 Verilog HDL語言描述形式-塊語句和賦值語句規(guī)則及案例_第2頁
FPGA應用與開發(fā)實踐教程 課件 附A4 Verilog HDL語言描述形式-塊語句和賦值語句規(guī)則及案例_第3頁
FPGA應用與開發(fā)實踐教程 課件 附A4 Verilog HDL語言描述形式-塊語句和賦值語句規(guī)則及案例_第4頁
FPGA應用與開發(fā)實踐教程 課件 附A4 Verilog HDL語言描述形式-塊語句和賦值語句規(guī)則及案例_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

VerilogHDL基本語法運算符及表達式過程語句(initial、always)塊語句(begin-end、fork-join)賦值語句條件語句循環(huán)語句task和function說明語句主要內(nèi)容:實際電路中的某些操作需要多條VerilogHDL語句才能描述,這時就需要用塊語句將多條語句復合在一起。當塊語句包含一條語句時,塊標識符可以省略。塊語句將兩條或多條語句組合在一起,格式上看像一條語句有兩種塊語句:串行塊begin-end和并行塊fork-joinbegin-end用來標識順序執(zhí)行的語句:

塊內(nèi)的語句按順序執(zhí)行,上條不執(zhí)行完,下條不執(zhí)行;

直到最后一條語句執(zhí)行完,程序流程控制才跳出該語句塊;

每條語句的延遲時間相對于前一條語句的仿真時間。fork-join用來標識并行執(zhí)行的語句

塊內(nèi)的語句同時執(zhí)行;

每條語句的延遲時間相對于進入該塊的仿真時間;

延遲時間用來給賦值語句提供執(zhí)行時間;

時間排序最后語句執(zhí)行完后,跳出該程序塊。一、塊語句(begin-end、fork-join)31、串行塊begin-endbegin語句1;語句2;......語句n;end例如:beginrega=regb;regc=rega;//regc的值為rega的值。end4用begin-end串行塊實現(xiàn)延時器`timescale100ns/100ns//定義仿真時間單位為100nsmodulebegin_end(dout,din);//本例為一個延時器,將輸入數(shù)據(jù)延時300ns后輸出inputdin;outputdout;wiredin;reg

dout;regtemp1,temp2;//中間變量always@(din)begin//begin…end之間的語句是順序執(zhí)行的

#1temp1=din;//延時100ns執(zhí)行

#1temp2=temp1;//當temp1=din執(zhí)行完畢后,延時100ns執(zhí)行

#1dout=temp2;//當temp2=temp1執(zhí)行完畢后,延時100ns執(zhí)行endendmodule52、并行塊fork-join格式如下:fork語句1;語句2;.......語句n;joinrega=2’b01regb=2’b11例如:

forkrega=regb;regc=rega;Join//regc與rega的值是不同的例如:beginrega=regb;regc=rega;end

6用fork_join并行塊實現(xiàn)延時器`timescale100ns/100ns//定義仿真基本周期為100nsmodulebegin_end(dout,din);//本例為一個延時器,將輸入數(shù)據(jù)延時300ns后輸出inputdin;outputdout;wiredin;regdout;regtemp1,temp2;//中間變量always@(din)fork//fork…join之間的語句是并行執(zhí)行的#1temp1=din;’//相對于塊開始延時100ns#2temp2=temp1;//相對于塊開始延時200ns#3dout=temp2;//相對于塊開始延時300nsjoinendmodule7在并行塊和順序塊中都有一個起始時間和結束時間的概念initialfork#10a=1;#15b=1;begin#20c=1#10d=1;end#25e=1;join該程序運行的結果如下:時刻

|執(zhí)行的語句10|a=1;15|b=1;20|c=1;25|e=1;30|d=1;

VerilogHDL基本語法運算符及表達式過程語句(initial、always)塊語句(begin-end、fork-join)賦值語句條件語句循環(huán)語句task和function說明語句主要內(nèi)容兩種賦值方法:連續(xù)賦值(ContinuousAssignment),過程賦值(ProceduralAssignment)過程賦值:阻塞賦值(BlockingAssignment),非阻塞賦值(NonblockingAssignment)。moduleor2(c,a,b);inputa,b;outputc;wirec;assignc=a|b;endmodulemoduleor2(c,a,b);inputa,b;outputc;regc;always@(aorb); c=a|b;endmodule二、賦值語句101、連續(xù)賦值連續(xù)賦值常用于數(shù)據(jù)流行為建模。連線續(xù)值語句,常以assign為關鍵字。只能為線網(wǎng)型變量賦值,并且線網(wǎng)型變量也必須用連續(xù)賦值的方法賦值。用來描述組合邏輯(例如:assigny=a&b)注意:只有當變量聲明為線網(wǎng)型變量后,才能使用連續(xù)賦值語句進行賦值。11語句格式:

assign

賦值目標線網(wǎng)變量=表達式;可以是顯式的,也可以是隱式的。wireadder_out;assignadder_out=mult_out+out;wireadder_out=mult_out+out;

//隱含了連續(xù)賦值語句帶函數(shù)調(diào)用的連續(xù)賦值語句:

assignc=max(a,b);//調(diào)用了函數(shù)max,將函數(shù)返回值賦給c12特點:連續(xù)賦值語句中“=”的左邊必須是線網(wǎng)型變量,右邊可以是線網(wǎng)型、寄存器型變量或者是函數(shù)調(diào)用語句。連續(xù)賦值語屬即刻賦值,即賦值號右邊的運算值一旦變化,被賦值變量立刻隨之變化。assign經(jīng)常使用條件運算符進行條件判斷后賦值。例如:連續(xù)賦值方式描述一個比較器modulecompare2(equal,a,b);input[1:0]a,b;outputequal;assignequal=(a==b)?1:0;endmodule132、過程賦值多用于對reg型變量進行賦值,這類型變量在被賦值后,其值保持不變,直到賦值進程又被觸發(fā),變量才被賦予新值。過程賦值主要出現(xiàn)在過程塊always和initial語句內(nèi)。分為阻塞賦值和非阻塞賦值兩種,在功能有佷大不同。14兩種賦值語句:阻塞賦值“b=a”;非阻塞賦值“b<=a”Verilog的特色:將語句執(zhí)行和被賦值對象更新分開阻塞賦值(blocking):“b=a”執(zhí)行完畢,b的值立即改變上一條語句不執(zhí)行完畢,語句不會繼續(xù)向下進行reg[3:0]a,b,c;initialbegina=4’d1;b=4’d2;c=4’d3;#10;b=a;c=b;end執(zhí)行完后c=b=a=4’d1reg[3:0]a,b,c;initialbegina=4’d1;b=4’d2;c=4’d3;#10;b<=a;c<=b;非阻塞賦值阻塞賦值b=4’d1c=4’d2執(zhí)行完后151)非阻塞(Non_Blocking)賦值方式操作符:“<=”其基本語法格式如下:寄存器變量(reg)<=表達式/變量如b<=a;(執(zhí)行完之后,b的值才更新)非阻塞賦值在整個過程塊結束后才完成賦值操作。連續(xù)的非阻塞賦值操作是同時完成的,即在同一個順序塊中,非阻塞賦值表達式的書寫順序,不影響賦值的結果。用于觸發(fā)器的建模。16例如:連續(xù)的非阻塞賦值modulenon_blocking(reg_c,reg_d,data,clk);outputreg_c,reg_d;inputclk,data;regreg_c,reg_d;always@(posedgeclk)beginreg_c<=data;reg_d<=reg_c;endendmodule17182)阻塞(Blocking)賦值方式操作符:“=”基本語法格式如下:寄存器變量(reg)=表達式/變量,

如b=a;阻塞賦值在該語句結束時就立即完成賦值操作,即b的值在該條語句結束后立刻改變。如果在一個塊語句中有多條阻塞賦值語句,那么寫在前面的賦值語句沒有完成之前,后面的語句就不能被執(zhí)行,仿佛被阻塞了(blocking)一樣,因而被稱為阻塞賦值。連續(xù)的阻塞賦值操作是順序完成的。19例如:連續(xù)的阻塞賦值moduleblocking(reg_c,reg_d,data,clk);outputreg_c,reg_d;inputclk,data;regreg_c,reg_d;always@(posedgeclk)beginreg_c=data;reg_d=reg_c;endendmodule五、賦值語句2021為了避免出錯,在同一個always塊內(nèi),最好不要將輸出再作為輸入使用,為了用阻塞賦值方式完成與上述非阻塞賦值同樣的功能,可采用兩個always塊來實現(xiàn),如下所示。在下面的例子中,兩個always過程塊是并發(fā)執(zhí)行的。22modulenon_blocking(reg_c,reg_d,data,clk);outputreg_c,reg_d;inputclk,data;regreg_c,reg_d;always@(posedgeclk)beginreg_c=data;endalways@(posedgeclk)beginreg_d=reg_c;endendmodule23阻塞賦值與非阻塞賦值是學習Verilog語言的難點之一。總的來說,多條阻塞賦值語句是順序執(zhí)行的,而多條非阻塞語句是并行執(zhí)行的。下面列出了兩者在使用上的一些注意事項:在使用always塊描述組合邏輯(電平敏感)時使用阻塞賦值,在使用always塊描述時序邏輯(邊沿敏感)時使用非阻塞賦值。建立latch模型時,采用非阻塞賦值語句。在一個always塊中同時有組合和時序邏輯時,采用非阻塞賦值語句。不要在同一個always塊內(nèi)同時使用阻塞賦值和非阻塞賦值。無論是使用阻塞賦值還是非阻塞賦值,不要在不同的always塊內(nèi)為同一個變量賦值。因為佷難保證不會引起賦值沖突。24modulewrong_assign(out,a,b,sel,clk);//在不同的always塊為相同的

溫馨提示

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

評論

0/150

提交評論