第2章Verilong基本語法與語句_第1頁
第2章Verilong基本語法與語句_第2頁
第2章Verilong基本語法與語句_第3頁
第2章Verilong基本語法與語句_第4頁
第2章Verilong基本語法與語句_第5頁
已閱讀5頁,還剩100頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 主要內(nèi)容主要內(nèi)容2.1 Verilog概述概述2.2 Verilog基本語法基本語法2.3 2.4 Verilog基本組合電路設(shè)計(jì)基本組合電路設(shè)計(jì)2.5 Verilog基本時(shí)序電路設(shè)計(jì)基本時(shí)序電路設(shè)計(jì)2.1 Verilog概述概述o Verilog語言是語言是1983年由年由GDA(Gateway Design Automation)公司的)公司的Phil Moorby首創(chuàng)的,之后首創(chuàng)的,之后Moorby又設(shè)計(jì)了又設(shè)計(jì)了Verilog-XL仿真器,仿真器,Verilog-XL仿真仿真器大獲成功,也使得器大獲成功,也使得Verilog語言得到推廣使用。語言得到推廣使用。o 1989年,年,Ca

2、dence收購了收購了GDA,1990年,年,Cadence公開發(fā)表了公開發(fā)表了Verilog HDL,并成立了,并成立了OVI組織專門負(fù)責(zé)組織專門負(fù)責(zé)Verilog HDL的發(fā)展。的發(fā)展。o Verilog于于1995年成為年成為IEEE標(biāo)準(zhǔn),稱為標(biāo)準(zhǔn),稱為IEEE Standard 1364-1995(Verilog-1995)o IEEE“1364-2001”標(biāo)準(zhǔn)(標(biāo)準(zhǔn)(Verilog-2001)也獲得通)也獲得通過,多數(shù)綜合器、仿真器都已支持過,多數(shù)綜合器、仿真器都已支持Verilog-2001標(biāo)準(zhǔn)標(biāo)準(zhǔn)1、Verilog發(fā)展發(fā)展2、Verilog語言的特點(diǎn)語言的特點(diǎn)o 既適于可綜合的電

3、路設(shè)計(jì),也可勝任電路與系統(tǒng)的仿真。既適于可綜合的電路設(shè)計(jì),也可勝任電路與系統(tǒng)的仿真。o 能在多個(gè)層次上對(duì)所設(shè)計(jì)的系統(tǒng)加以描述,從開關(guān)級(jí)、能在多個(gè)層次上對(duì)所設(shè)計(jì)的系統(tǒng)加以描述,從開關(guān)級(jí)、門級(jí)、寄存器傳輸級(jí)(門級(jí)、寄存器傳輸級(jí)(RTL)到行為級(jí),都可以勝任,)到行為級(jí),都可以勝任,同時(shí)語言不對(duì)設(shè)計(jì)規(guī)模施加任何限制。同時(shí)語言不對(duì)設(shè)計(jì)規(guī)模施加任何限制。o 靈活多樣的電路描述風(fēng)格,可進(jìn)行行為描述,也可進(jìn)行靈活多樣的電路描述風(fēng)格,可進(jìn)行行為描述,也可進(jìn)行結(jié)構(gòu)描述;支持混合建模,在一個(gè)設(shè)計(jì)中各個(gè)模塊可以結(jié)構(gòu)描述;支持混合建模,在一個(gè)設(shè)計(jì)中各個(gè)模塊可以在不同的設(shè)計(jì)層次上建模和描述。在不同的設(shè)計(jì)層次上建模和描述

4、。o Verilog的行為描述語句,如條件語句、賦值語句和循的行為描述語句,如條件語句、賦值語句和循環(huán)語句等,類似于軟件高級(jí)語言,便于學(xué)習(xí)和使用。環(huán)語句等,類似于軟件高級(jí)語言,便于學(xué)習(xí)和使用。o 內(nèi)置各種基本邏輯門,便于進(jìn)行門級(jí)結(jié)構(gòu)描述;內(nèi)置各內(nèi)置各種基本邏輯門,便于進(jìn)行門級(jí)結(jié)構(gòu)描述;內(nèi)置各種開關(guān)級(jí)元件,可進(jìn)行開關(guān)級(jí)的建模。種開關(guān)級(jí)元件,可進(jìn)行開關(guān)級(jí)的建模。o 易學(xué)易用,功能強(qiáng),可滿足各個(gè)層次設(shè)計(jì)人員的需要。易學(xué)易用,功能強(qiáng),可滿足各個(gè)層次設(shè)計(jì)人員的需要。 3 Verilog模塊的結(jié)構(gòu)模塊的結(jié)構(gòu) module aoi(a,b,c,d,f);/* 模塊名為模塊名為aoi,端口列表,端口列表a,b

5、,c,d,f */input a,b,c,d;/模塊的輸入端口為模塊的輸入端口為a,b,c,doutput f; /模塊的輸出端口為模塊的輸出端口為fwire a,b,c,d,f; /定義信號(hào)的數(shù)據(jù)類型定義信號(hào)的數(shù)據(jù)類型assign f=(a&b)|(c&d); /邏輯功能描述邏輯功能描述endmodule“與與-或或-非非”電路電路 3 Verilog模塊的結(jié)構(gòu)模塊的結(jié)構(gòu)o Verilog程序是由模塊構(gòu)成的。每個(gè)模塊的內(nèi)容都嵌在程序是由模塊構(gòu)成的。每個(gè)模塊的內(nèi)容都嵌在module和和endmodule兩個(gè)關(guān)鍵字之間;每個(gè)模塊實(shí)現(xiàn)兩個(gè)關(guān)鍵字之間;每個(gè)模塊實(shí)現(xiàn)特定的功能。特定的功

6、能。o 每個(gè)模塊首先要進(jìn)行端口定義,并說明輸入和輸出口每個(gè)模塊首先要進(jìn)行端口定義,并說明輸入和輸出口(input、output或或inout),然后對(duì)模塊的功能進(jìn)行定),然后對(duì)模塊的功能進(jìn)行定義。義。o Verilog程序書寫格式自由,一行可以寫幾個(gè)語句,一個(gè)語程序書寫格式自由,一行可以寫幾個(gè)語句,一個(gè)語句也可以分多行寫。句也可以分多行寫。o 除了除了endmodule等少數(shù)語句外,每個(gè)語句的最后必須有等少數(shù)語句外,每個(gè)語句的最后必須有分分號(hào)號(hào)。o 可用可用 /*/ 和和 /對(duì)對(duì)Verilog程序作注釋。程序作注釋。o Verilong程序中的關(guān)鍵字程序中的關(guān)鍵字必須小寫必須小寫,其它字符,其

7、它字符區(qū)別大小寫區(qū)別大小寫,輸入程序時(shí)一定要注意!輸入程序時(shí)一定要注意! 模塊聲明模塊聲明o 模塊聲明包括模塊名字,模塊輸入、輸出端模塊聲明包括模塊名字,模塊輸入、輸出端口列表。模塊定義格式如下:口列表。模塊定義格式如下:module 模塊名模塊名(端口端口1,端口,端口2,端口,端口3,);端口(端口(Port)定義)定義o 對(duì)模塊的輸入輸出端口要明確說明,其格式對(duì)模塊的輸入輸出端口要明確說明,其格式為為:input 端口名端口名1,端口名,端口名2, 端口名端口名n;/輸入端口output 端口名端口名1,端口名,端口名2, 端口名端口名n;/輸出端口inout 端口名端口名1,端口名,端

8、口名2, 端口名端口名n;/輸入輸出端口信號(hào)類型聲明信號(hào)類型聲明o 對(duì)模塊中所用到的所有信號(hào)(包括端口信號(hào)、對(duì)模塊中所用到的所有信號(hào)(包括端口信號(hào)、節(jié)點(diǎn)信號(hào)等)都必須進(jìn)行數(shù)據(jù)類型的定義。節(jié)點(diǎn)信號(hào)等)都必須進(jìn)行數(shù)據(jù)類型的定義。Verilog語言提供了各種信號(hào)類型,分別模語言提供了各種信號(hào)類型,分別模擬實(shí)際電路中的各種擬實(shí)際電路中的各種物理連接和物理實(shí)體物理連接和物理實(shí)體。o 如果信號(hào)的數(shù)據(jù)類型沒有定義,則綜合器將如果信號(hào)的數(shù)據(jù)類型沒有定義,則綜合器將其其默認(rèn)為是默認(rèn)為是wire型型。 邏輯功能定義邏輯功能定義o模塊中最核心的部分是邏輯功能定義。模塊中最核心的部分是邏輯功能定義。o定義邏輯功能的定

9、義邏輯功能的幾種基本方法幾種基本方法:(1)用)用assign持續(xù)賦值語句定義持續(xù)賦值語句定義assign語句語句多用于組合邏輯的賦值多用于組合邏輯的賦值,稱為持續(xù)賦值方式。,稱為持續(xù)賦值方式。若干連續(xù)賦值語句是并列執(zhí)行,與順序無關(guān)。若干連續(xù)賦值語句是并列執(zhí)行,與順序無關(guān)。(2)用)用always過程塊定義過程塊定義always過程語句既過程語句既可以用來描述組合電路,也可以描述可以用來描述組合電路,也可以描述時(shí)序電路。過程塊反復(fù)依據(jù)條件執(zhí)行,相當(dāng)無限循環(huán)執(zhí)行。時(shí)序電路。過程塊反復(fù)依據(jù)條件執(zhí)行,相當(dāng)無限循環(huán)執(zhí)行。 多個(gè)多個(gè)always過程塊并行執(zhí)行,與順序無關(guān)。過程塊并行執(zhí)行,與順序無關(guān)。(3

10、)調(diào)用元件(元件例化)調(diào)用元件(元件例化)調(diào)用元件的方法類似于在電路圖輸入方式下調(diào)入圖形符號(hào)調(diào)用元件的方法類似于在電路圖輸入方式下調(diào)入圖形符號(hào)來完成設(shè)計(jì),來完成設(shè)計(jì),這種方法側(cè)重于電路的結(jié)構(gòu)描述。這種方法側(cè)重于電路的結(jié)構(gòu)描述。 以上邏輯功能混合使用時(shí),它們都是并行執(zhí)行的。以上邏輯功能混合使用時(shí),它們都是并行執(zhí)行的。Verilog 模塊的模板模塊的模板 module ();output 輸出端口列表輸出端口列表; /輸出端口聲明輸出端口聲明input 輸入端口列表輸入端口列表; /輸入端口聲明輸入端口聲明/*定義數(shù)據(jù),信號(hào)的類型,函數(shù)聲明定義數(shù)據(jù),信號(hào)的類型,函數(shù)聲明*/reg 信號(hào)名;信號(hào)名;

11、/邏輯功能定義邏輯功能定義assign =; /使用使用assign語句定義邏輯功能語句定義邏輯功能/用用always塊描述邏輯功能塊描述邏輯功能always () begin /過程賦值過程賦值 /if-else,case語句語句 /while,repeat,for循環(huán)語句循環(huán)語句 /task,function調(diào)用調(diào)用 end /調(diào)用其他模塊調(diào)用其他模塊 ();/門元件例化門元件例化 門元件關(guān)鍵字門元件關(guān)鍵字 ();endmodule組合邏輯電路與時(shí)序邏輯電路特點(diǎn)組合邏輯電路與時(shí)序邏輯電路特點(diǎn)o 組合邏輯電路:組合邏輯電路:電路任意時(shí)刻的輸出狀態(tài)只電路任意時(shí)刻的輸出狀態(tài)只由該時(shí)刻各輸入狀態(tài)組

12、合決定,而與電路原由該時(shí)刻各輸入狀態(tài)組合決定,而與電路原狀態(tài)無關(guān)。狀態(tài)無關(guān)。module comp2_1(x,y,z,a,b); input a ,b; output x,y,z; assign x=(a=b)?1:0 /這些語句是并行執(zhí)行 assign y=(ab)?1:0endmodule如下列數(shù)值比較器程序中如下列數(shù)值比較器程序中a,b的輸入狀態(tài)決定的輸入狀態(tài)決定x,y,z輸出結(jié)果。輸出結(jié)果。如在實(shí)驗(yàn)中做過的如在實(shí)驗(yàn)中做過的兩路輸入選擇器和二進(jìn)制半加器兩路輸入選擇器和二進(jìn)制半加器都是組合邏輯電路都是組合邏輯電路組合電路常采用連續(xù)賦值方式(即組合電路常采用連續(xù)賦值方式(即assign語句)

13、進(jìn)行設(shè)計(jì),但采用過語句)進(jìn)行設(shè)計(jì),但采用過程賦值語句(一般用阻塞賦值語句程賦值語句(一般用阻塞賦值語句“=”來賦值)和所有輸入信號(hào)的電來賦值)和所有輸入信號(hào)的電平輸入激勵(lì)方式時(shí)也可實(shí)現(xiàn)組合邏輯電路設(shè)計(jì),但要注意與時(shí)序邏輯平輸入激勵(lì)方式時(shí)也可實(shí)現(xiàn)組合邏輯電路設(shè)計(jì),但要注意與時(shí)序邏輯中使用的賦值方式和激勵(lì)條件的不同。中使用的賦值方式和激勵(lì)條件的不同??梢杂^察到上下兩個(gè)圖輸入狀態(tài)完全決定輸出狀態(tài)!輸出可以觀察到上下兩個(gè)圖輸入狀態(tài)完全決定輸出狀態(tài)!輸出同步跟隨輸入而變!同步跟隨輸入而變!o 時(shí)序邏輯電路:電路的任意時(shí)刻的輸出狀態(tài)時(shí)序邏輯電路:電路的任意時(shí)刻的輸出狀態(tài)不僅取決于該時(shí)刻的輸入狀態(tài),還與電路

14、的不僅取決于該時(shí)刻的輸入狀態(tài),還與電路的原狀態(tài)有關(guān)。所以時(shí)序電路都有記憶功能。原狀態(tài)有關(guān)。所以時(shí)序電路都有記憶功能。組合邏輯電路與時(shí)序邏輯電路特點(diǎn)下列的下列的D觸發(fā)器程序,一般時(shí)序電路都由過程語句賦值觸發(fā)器程序,一般時(shí)序電路都由過程語句賦值(可用阻塞(可用阻塞“=”或非阻塞賦值語句或非阻塞賦值語句“=”來表示)賦值)來表示)賦值) ,且有邊沿時(shí)鐘激勵(lì)條件。,且有邊沿時(shí)鐘激勵(lì)條件??梢钥吹缴厦鎴D形中的輸入可以看到上面圖形中的輸入d,只有在,只有在CLK上升沿時(shí)才能決上升沿時(shí)才能決定輸出,其它時(shí)刻輸出都由觸發(fā)器的原狀態(tài)決定(即輸出不定輸出,其它時(shí)刻輸出都由觸發(fā)器的原狀態(tài)決定(即輸出不是同步跟隨輸入

15、而變)。是同步跟隨輸入而變)。2.2 Verilog基本語法概述基本語法概述1 Verilog語言要素構(gòu)成語言要素構(gòu)成Verilog 程序由符號(hào)流構(gòu)成,符號(hào)包括程序由符號(hào)流構(gòu)成,符號(hào)包括o 空白符(空白符(White space)o 注釋(注釋(Comments)o 操作符(操作符(Operators)o 數(shù)字(數(shù)字(Numbers)o 字符串(字符串(Strings)o 標(biāo)識(shí)符(標(biāo)識(shí)符(Identifiers)o 關(guān)鍵字(關(guān)鍵字(Keywords)等)等例如:數(shù)碼顯示電路module decode4_7(decodeout,indec);output6:0 decodeout;input3:

16、0 indec; reg6:0 decodeout;always (indec) begin case(indec) /用用case語句進(jìn)行譯碼語句進(jìn)行譯碼 4d0:decodeout=7b1111110; 4d1:decodeout=7b0110000; 4d2:decodeout=7b1101101; 4d3:decodeout=7b1111001; 4d4:decodeout=7b0110011; 4d5:decodeout=7b1011011; 4d6:decodeout=7b1011111; 4d7:decodeout=7b1110000; 4d8:decodeout=7b11111

17、11; 4d9:decodeout=7b1111011; default: decodeout=7bx; endcase endendmodule標(biāo)識(shí)符標(biāo)識(shí)符數(shù)字?jǐn)?shù)字操作符操作符注釋注釋關(guān)鍵字關(guān)鍵字空白符和注釋 空白符(空白符(White space)空白符包括:空格、空白符包括:空格、tab、換行和換頁??瞻追?、換行和換頁??瞻追勾a錯(cuò)落有致,閱讀起來更方便。在綜合時(shí)空白符代碼錯(cuò)落有致,閱讀起來更方便。在綜合時(shí)空白符被忽略。被忽略。注釋(注釋(Comment) 單行注釋:以單行注釋:以“/”“/”開始到本行結(jié)束開始到本行結(jié)束 多行注釋:多行注釋以多行注釋:多行注釋以“/“/* *”開始,

18、到開始,到“* */”/”結(jié)束結(jié)束例如例如:標(biāo)識(shí)符(Identifiers)標(biāo)識(shí)符(標(biāo)識(shí)符(Identifiers)Verilog中的標(biāo)識(shí)符可以是任意一組字母、數(shù)字以及符號(hào)中的標(biāo)識(shí)符可以是任意一組字母、數(shù)字以及符號(hào)“$”和和“_”(下劃線)的組合,但標(biāo)識(shí)符的第一個(gè)字符必須是(下劃線)的組合,但標(biāo)識(shí)符的第一個(gè)字符必須是字母或者下劃線字母或者下劃線。另外,標(biāo)識(shí)符是。另外,標(biāo)識(shí)符是區(qū)分大小寫的區(qū)分大小寫的。Examples:countCOUNT /COUNT與與count是不同的是不同的_A1_d2 /以下劃線開頭以下劃線開頭R56_68FIVE用于定義各種用于定義各種功能模塊、參數(shù)和變量功能模塊、

19、參數(shù)和變量的名字。的名字。關(guān)鍵字(Keywords)Verilog語言內(nèi)部已經(jīng)使用的詞稱為語言內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵字關(guān)鍵字或或保保留字留字,這些保留字用戶不能作為變量或節(jié)點(diǎn)名,這些保留字用戶不能作為變量或節(jié)點(diǎn)名字使用。關(guān)鍵字都是字使用。關(guān)鍵字都是小寫小寫的。的。 例如例如: 整數(shù)整數(shù) 實(shí)數(shù)實(shí)數(shù) 字符串字符串2、常量及類型 程序運(yùn)行中,值不能被改變的量稱為程序運(yùn)行中,值不能被改變的量稱為常量(常量(constants),),Verilog中的常量主中的常量主要有如下要有如下3種類型:種類型: o 簡(jiǎn)單的十進(jìn)制格式 這種形式的整數(shù)數(shù)值代表一個(gè)可選的+或-的操作符的數(shù)字系列。并且是一個(gè)有符號(hào)的數(shù)

20、,在計(jì)算機(jī)內(nèi)將轉(zhuǎn)換為32位補(bǔ)碼形式。 如 32 -15等整數(shù)(整數(shù)(integer)o基數(shù)格式表示法基數(shù)格式表示法o整數(shù)按如下方式書寫:整數(shù)按如下方式書寫: 即即 size 為為對(duì)應(yīng)二進(jìn)制數(shù)的寬度對(duì)應(yīng)二進(jìn)制數(shù)的寬度;base為進(jìn)制;為進(jìn)制;value是基于進(jìn)制的數(shù)字是基于進(jìn)制的數(shù)字序列。序列。這種形式的表示可靈活控制整數(shù)在計(jì)算機(jī)內(nèi)位數(shù)。這種形式的表示可靈活控制整數(shù)在計(jì)算機(jī)內(nèi)位數(shù)。進(jìn)制有如下進(jìn)制有如下4種表示形式:種表示形式: 二進(jìn)制(二進(jìn)制(b或或B) 十進(jìn)制(十進(jìn)制(d或或D或缺?。┗蛉笔。?十六進(jìn)制(十六進(jìn)制(h或或H) 八進(jìn)制(八進(jìn)制(o或或O)整數(shù)(整數(shù)(integer)Example

21、s:8b11000101 /位寬為八位的二進(jìn)制數(shù)位寬為八位的二進(jìn)制數(shù)110001018hd5 /位寬為八位的十六進(jìn)制數(shù)位寬為八位的十六進(jìn)制數(shù)d5;5O27 /5位八進(jìn)制數(shù)位八進(jìn)制數(shù)4D2 /4位十進(jìn)制數(shù)位十進(jìn)制數(shù)24B1x_01 /4位二進(jìn)制數(shù)位二進(jìn)制數(shù)1x015Hx /5位位x(擴(kuò)展的(擴(kuò)展的x),即),即xxxxx4hZ /4位位z,即,即zzzz8h2A /*在位寬和在位寬和之間,以及進(jìn)制和數(shù)值之間,以及進(jìn)制和數(shù)值之間允許出現(xiàn)空格,之間允許出現(xiàn)空格,但但和和進(jìn)制進(jìn)制之間,數(shù)值間是不允許出之間,數(shù)值間是不允許出現(xiàn)空格的,現(xiàn)空格的,比如比如8h2A、8h2A等形式都是不合法的寫等形式都是不合

22、法的寫法法 */整數(shù)(整數(shù)(integer)“位寬位寬”如果缺省則按數(shù)字串的實(shí)際位數(shù)計(jì)算,如指如果缺省則按數(shù)字串的實(shí)際位數(shù)計(jì)算,如指定的位寬與數(shù)字串的長(zhǎng)度不相符,則首先保留右邊的低位,定的位寬與數(shù)字串的長(zhǎng)度不相符,則首先保留右邊的低位,左邊超出的高位部分被截?cái)?;若指定的位寬超過數(shù)字的實(shí)左邊超出的高位部分被截?cái)啵蝗糁付ǖ奈粚挸^數(shù)字的實(shí)際長(zhǎng)度,通常在數(shù)字系列的高位部分添際長(zhǎng)度,通常在數(shù)字系列的高位部分添0補(bǔ)位,若數(shù)字系補(bǔ)位,若數(shù)字系列最左邊一位是列最左邊一位是X或或Z,則用,則用x或或z在左邊補(bǔ)齊。在左邊補(bǔ)齊?!斑M(jìn)制符號(hào)進(jìn)制符號(hào)”如果缺省則如果缺省則默認(rèn)為十進(jìn)制默認(rèn)為十進(jìn)制?!皵?shù)字串?dāng)?shù)字串”中除

23、中除09和字母和字母AF(與十六進(jìn)制對(duì)應(yīng)的數(shù)字)外還可以與十六進(jìn)制對(duì)應(yīng)的數(shù)字)外還可以出現(xiàn)出現(xiàn)3種符號(hào);種符號(hào);x(表示不確定或隨機(jī)狀態(tài))、(表示不確定或隨機(jī)狀態(tài))、z(表示高(表示高阻狀態(tài))和阻狀態(tài))和_(下劃線,沒有實(shí)際意義,用于增強(qiáng)程序的(下劃線,沒有實(shí)際意義,用于增強(qiáng)程序的可讀性)。每個(gè)字符所代表的寬度取決于所用的進(jìn)制??勺x性)。每個(gè)字符所代表的寬度取決于所用的進(jìn)制。使用中注意的問題:使用中注意的問題:o 實(shí)數(shù)(實(shí)數(shù)(Real)有下面兩種表示法。有下面兩種表示法。 十進(jìn)制表示法。十進(jìn)制表示法。這種表示時(shí)必須加小數(shù)點(diǎn)這種表示時(shí)必須加小數(shù)點(diǎn)。例如:例如:2.02.00.1 0.1 / /以

24、上以上2 2例是合法的實(shí)數(shù)表示形式例是合法的實(shí)數(shù)表示形式2. 2. / /非法:非法:小數(shù)點(diǎn)兩側(cè)都必須有數(shù)字小數(shù)點(diǎn)兩側(cè)都必須有數(shù)字 科學(xué)計(jì)數(shù)法。例如:科學(xué)計(jì)數(shù)法。例如:43_5.1e2 43_5.1e2 / /其值為其值為43510.043510.09.6E2 9.6E2 /960.0 (e/960.0 (e與與E E相同相同) )5E-4 5E-4 /0.0005/0.0005實(shí)數(shù)(實(shí)數(shù)(Real)字符串(字符串(Strings)o字符串是字符串是雙引號(hào)內(nèi)的字符序列雙引號(hào)內(nèi)的字符序列。o字符串不能分成多行書寫字符串不能分成多行書寫。例如:。例如: INTERNAL ERROR 是錯(cuò)誤的是錯(cuò)誤

25、的o字符串的作用主要是用于仿真時(shí),顯示一些相關(guān)的信息,或者指定字符串的作用主要是用于仿真時(shí),顯示一些相關(guān)的信息,或者指定顯示的格式。顯示的格式。 字符串是字符串是8位位ASC值的系列,是無符號(hào)整數(shù)。值的系列,是無符號(hào)整數(shù)。 用反斜杠用反斜杠表示的字符是特殊的反義字符。表示的字符是特殊的反義字符。 如如n 表示換行符表示換行符 t 制表符制表符 * 2063、變量及數(shù)據(jù)類型、變量及數(shù)據(jù)類型o Verilog有下面有下面四種四種基本的邏輯狀態(tài)?;镜倪壿嫚顟B(tài)。 0:低電平、邏輯:低電平、邏輯0或邏輯非或邏輯非 1:高電平、邏輯:高電平、邏輯1或或“真真” x或或X:不確定或未知的邏輯狀態(tài):不確定或

26、未知的邏輯狀態(tài) z或或Z:高阻態(tài):高阻態(tài)o Verilog中的所有中的所有數(shù)據(jù)類型數(shù)據(jù)類型都在上述都在上述4類邏輯狀態(tài)中類邏輯狀態(tài)中取值取值,其中其中x和和z都不區(qū)分大小寫都不區(qū)分大小寫,也就是說,值,也就是說,值0 x1z與值與值0X1Z是等同的。是等同的。變量是用來表示數(shù)字電路中的變量是用來表示數(shù)字電路中的物理連線、數(shù)據(jù)存儲(chǔ)物理連線、數(shù)據(jù)存儲(chǔ)和傳輸單元和傳輸單元等物理量,變量遵循標(biāo)識(shí)符命名規(guī)則。等物理量,變量遵循標(biāo)識(shí)符命名規(guī)則。 數(shù)據(jù)類型n Verilog中的中的變量變量分為如下分為如下兩種數(shù)據(jù)類型兩種數(shù)據(jù)類型: net型型 variable型型net型中常用的有型中常用的有wire、tr

27、i等;等;variable型包括型包括reg、integer等。等。n 注意:在注意:在Verilog-1995標(biāo)準(zhǔn)中,標(biāo)準(zhǔn)中,variable型變量稱為型變量稱為register型;在型;在Verilog-2001標(biāo)準(zhǔn)中將標(biāo)準(zhǔn)中將register一詞改為一詞改為了了variable,以避免初學(xué)者將,以避免初學(xué)者將register和硬件中的寄存器概和硬件中的寄存器概念混淆起來。念混淆起來。Verilog HDL 有兩大類數(shù)據(jù)類型線網(wǎng)類型線網(wǎng)類型( (net型型) net type 表示Verilog結(jié)構(gòu)化元件間的物理連線。它的值由驅(qū)動(dòng)元件的值決定,例如連續(xù)賦值或門的輸出。如果沒有驅(qū)動(dòng)元件連接到

28、線網(wǎng),線網(wǎng)的缺省值為z z。寄存器類型寄存器類型( (variable型型) register type表示一個(gè)抽象的數(shù)據(jù)存儲(chǔ)單元,它只能在 always語句和 initial語句中被賦值,并且它的值從一個(gè)賦值到另一個(gè)賦值被保存下來。寄存器類型的變量具有x x的缺省值。*線網(wǎng)類型表示構(gòu)件間的物理連線,而寄存器類型表示抽象線網(wǎng)類型表示構(gòu)件間的物理連線,而寄存器類型表示抽象的數(shù)據(jù)存儲(chǔ)元件。的數(shù)據(jù)存儲(chǔ)元件。net型n Net型數(shù)據(jù)相當(dāng)于硬件電路中的各種型數(shù)據(jù)相當(dāng)于硬件電路中的各種物理連接物理連接,其特點(diǎn)是,其特點(diǎn)是輸出的值緊跟輸入值的變化而變化。對(duì)連線型有兩種驅(qū)輸出的值緊跟輸入值的變化而變化。對(duì)連線

29、型有兩種驅(qū)動(dòng)方式,一種方式是在結(jié)構(gòu)描述中將其連接到一個(gè)門元?jiǎng)臃绞?,一種方式是在結(jié)構(gòu)描述中將其連接到一個(gè)門元件或模塊的輸出端;另一種方式是用持續(xù)賦值語句件或模塊的輸出端;另一種方式是用持續(xù)賦值語句assign對(duì)其進(jìn)行賦值。對(duì)其進(jìn)行賦值。n wire是最常用的是最常用的Net型型變量。變量。變量默認(rèn)是變量默認(rèn)是wire。n wire型變量的定義格式如下:型變量的定義格式如下:wire 數(shù)據(jù)寬度數(shù)據(jù)寬度數(shù)據(jù)名數(shù)據(jù)名1,數(shù)據(jù)名,數(shù)據(jù)名2,數(shù)據(jù)名數(shù)據(jù)名n; 數(shù)據(jù)寬度數(shù)據(jù)寬度 :忽略時(shí),后面的變量寬度為忽略時(shí),后面的變量寬度為“1位位”例如:例如: wire a,bwire a,b; / /定義了兩個(gè)定義

30、了兩個(gè)wirewire型變量型變量a a和和b b,寬度為,寬度為1 1位。位。n Examples:wire7:0 databus; /databus的寬度是的寬度是8位位wire19:0 addrbus; /addrbus的寬度是的寬度是20位位o module mux4_1a(out,in1,in2,in3,in4,s0,s1);o input in1,in2,in3,in4,s0,s1; output out;o wire s0_n,s1_n,w,x,y,z; /可以省略可以省略o not (s0_n,s0),(s1_n,s1);o and (w,in1,s0_n,s1_n),(x,i

31、n2,s0_n,s1),o (y,in3,s0,s1_n),(z,in4,s0,s1);o or (out,w,x,y,z);o endmodule這個(gè)這個(gè)4 4選選1 1邏輯電路采用結(jié)構(gòu)描述邏輯電路采用結(jié)構(gòu)描述方法,其中的方法,其中的s0_ns0_n、s1_ns1_n、w w、x x、y y、z z這這6 6個(gè)信號(hào)代表器件之間的個(gè)信號(hào)代表器件之間的物理連接,定義為物理連接,定義為wirewire型,當(dāng)然型,當(dāng)然輸入與輸出口采用默認(rèn),也是輸入與輸出口采用默認(rèn),也是wirewire型。型?!纠纠?.1】Wire特性wire 變量仿真時(shí)不需要占用存儲(chǔ)單元變量仿真時(shí)不需要占用存儲(chǔ)單元. Varia

32、ble(或稱寄存器型)變量有5種不同的寄存器類型: reg integer time real realtimevariable型變量必須放在型變量必須放在過程語句過程語句(如(如initial、always)中,通過過程賦值語句賦值;在中,通過過程賦值語句賦值;在always、initial等過程塊內(nèi)等過程塊內(nèi)被賦值的信號(hào)必須定義成被賦值的信號(hào)必須定義成variable型型。注意:注意:variable型變量并不意味著一定對(duì)應(yīng)著硬件上的一型變量并不意味著一定對(duì)應(yīng)著硬件上的一個(gè)觸發(fā)器或寄存器等存儲(chǔ)元件,但在仿真時(shí)需要占用一個(gè)存儲(chǔ)個(gè)觸發(fā)器或寄存器等存儲(chǔ)元件,但在仿真時(shí)需要占用一個(gè)存儲(chǔ)單元,在綜合

33、器進(jìn)行綜合時(shí),單元,在綜合器進(jìn)行綜合時(shí),variable型變量會(huì)根據(jù)具體情型變量會(huì)根據(jù)具體情況來確定是況來確定是映射成連線還是映射為觸發(fā)器或寄存器。映射成連線還是映射為觸發(fā)器或寄存器。 例如:同樣定義為reg型,但生成的電路單元不同。module sel(a,b,s,y);input a,b,s;output y; reg y; always(a,b,s) begin if(s) y=b; else y=a; end endmoduley生成的為線型驅(qū)動(dòng)的組合邏輯電路生成的為線型驅(qū)動(dòng)的組合邏輯電路q生成的為寄存器型時(shí)序邏輯電路生成的為寄存器型時(shí)序邏輯電路reg型變量型變量reg型變量型變量 是

34、最常用的一種是最常用的一種variable型變量型變量。 定義格式如下定義格式如下: reg msb:lsb reg1, reg2, . regN;msb和和lsb 定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義定義了范圍,并且均為常數(shù)值表達(dá)式。范圍定義是可選的;如果沒有定義范圍,缺省值為是可選的;如果沒有定義范圍,缺省值為 1 位寄存器。位寄存器。 例如:例如:reg a,b; /定義了兩個(gè)定義了兩個(gè)reg型變量型變量a,b,長(zhǎng)度長(zhǎng)度1位位reg7:0 qout,a; /定義定義qout和和a均為均為8位寬的位寬的reg型向量型向量reg1:8 qout; reg型變量型變量寄存器可以取任意長(zhǎng)度

35、,寄存器中的值通常被解釋為無符號(hào)數(shù)。reg 1:4 Comb;. . .Comb = 2; / Comb 的值為14(1 1 1 0), 1 1 1 0 是2 的補(bǔ)碼。Comb = 5; /Comb的值為5 (0 1 0 1)。如:如:在過程語句中的被賦值變量必須定義為在過程語句中的被賦值變量必須定義為reg型型例如:例如:always語句中被賦值的變量定義為語句中被賦值的變量定義為reg型型integer為整數(shù)型變量為整數(shù)型變量 一般整數(shù)型在計(jì)算機(jī)內(nèi)至少是一般整數(shù)型在計(jì)算機(jī)內(nèi)至少是32位長(zhǎng)度,為補(bǔ)碼有符號(hào)數(shù),位長(zhǎng)度,為補(bǔ)碼有符號(hào)數(shù),不能進(jìn)行位操作,只能整體賦值,但可以通過賦值不能進(jìn)行位操作,

36、只能整體賦值,但可以通過賦值reg將其轉(zhuǎn)變將其轉(zhuǎn)變?yōu)槲徊僮?。為位操作?格式為:格式為: integer integer1, integer2,. . . intergerN msb: 1sb ; integer變量如:如:integer a,b,c; 定義了定義了3個(gè)個(gè)32位整型變量位整型變量 integer hist3:6; 一個(gè)由一個(gè)由4個(gè)整型數(shù)組成的個(gè)整型數(shù)組成的32位數(shù)組位數(shù)組msb和lsb是定義整數(shù)數(shù)組界限的常量表達(dá)式,數(shù)組界限的定義是可選的。注意容許無位界限的情況。一個(gè)整數(shù)最少容納 32位。但是具體實(shí)現(xiàn)可提供更多的位。i n t e g e r J;r e g 3:0 B c q

37、;J = 6; /J的值為3 2 b 0 0 0 0 . . . 0 0 1 1 0。B c q = J; /B c q的值為4 b 0 1 1 0 。B c q = 4b0101.J = B c q; /J的值為3 2 b 0 0 0 0 . . . 0 0 1 0 1。J = 6; /J 的值為 3 2 b 1 1 1 1 . . . 1 1 0 1 0。B c q = J; /B c q的值為4 b 1 0 1 0。注意賦值總是從最右端的位向最左邊的位進(jìn)行;任何多余的位被截?cái)唷@纾?integer與reg變量轉(zhuǎn)換reg 31:0 Breg;integer Bint; / /B i n

38、t 6 和B i n t 2 0 : 1 0 是不允許的。. . .Breg = Bint; /*現(xiàn)在, B r e g 6 和B r e g 2 0 : 1 0 是允許的,并且從整數(shù) B i n t獲取相應(yīng)的位值。 */上例說明了如何通過簡(jiǎn)單的賦值將整數(shù)轉(zhuǎn)換為位向量。類型轉(zhuǎn)換自動(dòng)完成,不必使用特定的函數(shù)。從位向量到整數(shù)的轉(zhuǎn)換也可以通過賦值完成。time類型o time類型的寄存器用于存儲(chǔ)和處理時(shí)間。 time類型的寄存器使用下述方式加以說明。time time_id1, time_id2, . . . , time _ idN msb: 1sb ; msb和 lsb是表明范圍界限的常量表達(dá)式

39、。如果未定義界限,每個(gè)標(biāo)識(shí)符存儲(chǔ)一個(gè)至少 64位的時(shí)間值。時(shí)間類型的寄存器只存儲(chǔ)無符號(hào)數(shù)。如: time Events 0:31; /為32個(gè)64位時(shí)間值數(shù)組。 time CurrTime; /CurrTime 存儲(chǔ)一個(gè)64位時(shí)間。4 參數(shù)(parameter)n 在在Verilog語言中,用參數(shù)語言中,用參數(shù)parameter來定義符號(hào)常量,即來定義符號(hào)常量,即用用parameter來定義一個(gè)標(biāo)志符代表一個(gè)常量。來定義一個(gè)標(biāo)志符代表一個(gè)常量。參數(shù)常用參數(shù)常用來定義時(shí)延和變量的寬度。參數(shù)是局部的,只在其定義的模來定義時(shí)延和變量的寬度。參數(shù)是局部的,只在其定義的模塊內(nèi)部起作用。塊內(nèi)部起作用。n

40、其定義格式如下:其定義格式如下:parameter 參數(shù)名參數(shù)名1=表達(dá)式表達(dá)式1,參數(shù)名,參數(shù)名2=表達(dá)式表達(dá)式2,參數(shù)名,參數(shù)名3=表表達(dá)式達(dá)式3, ; /表達(dá)式可以是數(shù)字和已定義的參數(shù)組成的表達(dá)式表達(dá)式可以是數(shù)字和已定義的參數(shù)組成的表達(dá)式n 例如:例如:parameterparameter SEL=8,CODE=8ha3 SEL=8,CODE=8ha3;/ /分別定義參數(shù)分別定義參數(shù)SELSEL代表常數(shù)代表常數(shù)8 8(1010進(jìn)制),參數(shù)進(jìn)制),參數(shù)CODECODE代表常代表常量量a3a3(1616進(jìn)制)進(jìn)制)參數(shù)(parameter)o 【例2.2】 采用參數(shù)定義的加法器o modul

41、e add_w(a,b,sum);o parameter MSB=15; /參數(shù)定義參數(shù)定義o inputMSB:0 a,b; outputMSB+1:0 sum;o assign sum=a+b;o endmodule定義參數(shù)便于對(duì)程序中進(jìn)行相關(guān)調(diào)試!定義參數(shù)便于對(duì)程序中進(jìn)行相關(guān)調(diào)試!5 向量向量 o 標(biāo)量與向量標(biāo)量與向量寬度為寬度為1位的變量稱為位的變量稱為標(biāo)量標(biāo)量,如果在變量聲明中沒有指定位寬,如果在變量聲明中沒有指定位寬,則默認(rèn)為標(biāo)量(則默認(rèn)為標(biāo)量(1位)。舉例如下:位)。舉例如下: wire a; /a為標(biāo)量為標(biāo)量 reg clk; /clk為標(biāo)量為標(biāo)量reg型變量型變量o線寬大于線

42、寬大于1位的變量(包括位的變量(包括net型和型和variable型)稱為型)稱為向量向量(vector)。向量的寬度用下面的形式定義:)。向量的寬度用下面的形式定義: msb : lsbo比如:比如: wire3:0 bus; /4位的總線位的總線o位選擇和域選擇位選擇和域選擇 在表達(dá)式中可任意選中向量中的一位或相鄰幾位,分別稱為在表達(dá)式中可任意選中向量中的一位或相鄰幾位,分別稱為位選位選擇和域選擇擇和域選擇,這種使用方法方便靈活處理各種問題。,這種使用方法方便靈活處理各種問題。例如:例如:A=mybyte6; /位選擇位選擇B=mybyte5:2; /域選擇域選擇o再比如:再比如:reg7

43、:0 a,b; reg3:0 c; reg d;d=a7&b7; /位選擇位選擇c=a7:4+b3:0; /域選擇域選擇5 向量向量 5 向量向量 存儲(chǔ)器定義存儲(chǔ)器定義格式:格式:regreg 位線最高位序號(hào)位線最高位序號(hào): :位線最低序號(hào)位線最低序號(hào) 信號(hào)名信號(hào)名 字線最字線最高位序號(hào)高位序號(hào): :字線最低序號(hào)字線最低序號(hào);其中的其中的 內(nèi)的值可省略,默認(rèn)內(nèi)的值可省略,默認(rèn)1 1位。位。如:如:regreg7:0mem0:2557:0mem0:255定義了一個(gè)有定義了一個(gè)有256256個(gè)單元的寬度為個(gè)單元的寬度為8 8位的存儲(chǔ)器。位的存儲(chǔ)器。RegReg一維定義的是一維定義的是矢量寄

44、存器,矢量寄存器,二維定義的是二維定義的是存儲(chǔ)器存儲(chǔ)器。5 向量向量 在一個(gè)在一個(gè)reg語句中既可以定義存儲(chǔ)器型又可以定義寄存器型變量語句中既可以定義存儲(chǔ)器型又可以定義寄存器型變量與一維與一維regreg型變量不同的是,二維型變量不同的是,二維regreg型變量在引用時(shí)只能以一型變量在引用時(shí)只能以一個(gè)單元為單位,既不能同時(shí)選擇多個(gè)單元,也不能單獨(dú)操作單元中個(gè)單元為單位,既不能同時(shí)選擇多個(gè)單元,也不能單獨(dú)操作單元中的某些位的某些位。猶如。猶如integerinteger型變量本身就是型變量本身就是3232位的數(shù)據(jù),因此位的數(shù)據(jù),因此integerinteger型數(shù)組也只能以一個(gè)整數(shù)為單位引用。如

45、果想對(duì)位操作,可以先讀型數(shù)組也只能以一個(gè)整數(shù)為單位引用。如果想對(duì)位操作,可以先讀出對(duì)應(yīng)單元數(shù)據(jù)賦值給一個(gè)寄存器,這樣就可以對(duì)位操作。出對(duì)應(yīng)單元數(shù)據(jù)賦值給一個(gè)寄存器,這樣就可以對(duì)位操作。5 向量向量 6 運(yùn)算符(運(yùn)算符(Operators) o 算術(shù)運(yùn)算符(算術(shù)運(yùn)算符(Arithmetic operators)o 常用的算術(shù)運(yùn)算符包括:與通常算數(shù)運(yùn)算相常用的算術(shù)運(yùn)算符包括:與通常算數(shù)運(yùn)算相同。同。算術(shù)運(yùn)算符算術(shù)運(yùn)算符o 位運(yùn)算符(位運(yùn)算符(Bitwise operators) 位運(yùn)算是將兩個(gè)操作數(shù)按位運(yùn)算是將兩個(gè)操作數(shù)按對(duì)應(yīng)位對(duì)應(yīng)位分別分別進(jìn)行進(jìn)行邏輯運(yùn)算邏輯運(yùn)算(若長(zhǎng)度不同要將位數(shù)少的(若長(zhǎng)度

46、不同要將位數(shù)少的操作數(shù)填零補(bǔ)齊)。操作數(shù)填零補(bǔ)齊)。按位取反按位取反&按位與按位與|按位或按位或按位異或按位異或,按位同或(符號(hào)按位同或(符號(hào)與與是等價(jià)是等價(jià)的)的)運(yùn)算符(運(yùn)算符(Operators)o 邏輯運(yùn)算符(邏輯運(yùn)算符(Logical operators)&邏輯與邏輯與| 邏輯或邏輯或!邏輯非邏輯非 同按位操作不同的是將整個(gè)操作數(shù)視為真、假或不確同按位操作不同的是將整個(gè)操作數(shù)視為真、假或不確定進(jìn)行邏輯運(yùn)算(即定進(jìn)行邏輯運(yùn)算(即1、0、x),運(yùn)算結(jié)果也為這三種狀,運(yùn)算結(jié)果也為這三種狀態(tài)。當(dāng)態(tài)。當(dāng)操作數(shù)為向量時(shí),邏輯操作符會(huì)自動(dòng)強(qiáng)制其邏輯化,操作數(shù)為向量時(shí),邏輯操作符會(huì)自

47、動(dòng)強(qiáng)制其邏輯化,即非零向量當(dāng)作即非零向量當(dāng)作“1”處理,全零向量當(dāng)作處理,全零向量當(dāng)作“0”處理,相當(dāng)處理,相當(dāng)于做了一個(gè)于做了一個(gè)“或或”規(guī)約。如果操作數(shù)中含有規(guī)約。如果操作數(shù)中含有x或或z,結(jié)果也,結(jié)果也為為x。運(yùn)算符(運(yùn)算符(Operators)o 關(guān)系運(yùn)算符(關(guān)系運(yùn)算符(Relational operators)小于小于大于大于=大于或等于大于或等于 用于判斷兩個(gè)表達(dá)式的值之間的大小關(guān)系,皆為二元用于判斷兩個(gè)表達(dá)式的值之間的大小關(guān)系,皆為二元操作符,判斷結(jié)果為真、假和不確定(即操作符,判斷結(jié)果為真、假和不確定(即1、0、x)三種三種狀態(tài)。狀態(tài)。運(yùn)算符(運(yùn)算符(Operators)mod

48、ule comp2_2(x,y,z,a,b); input a ,b; output x,y,z; reg x,y,z;always (a,b) begin if (a=b) x=1b1; else if (ab) y=1b1; else z=1b1; end endmodulemodule comp2_2(x,y,z,a,b); input a ,b; output x,y,z; reg x,y,z;always (a,b) begin if (a=b) begin x=1b1;y=1b0;z=1b0;end else if (ab) begin y=1b1;x=1b0;z=1b0;end

49、else begin z=1b1;x=1b0;y右移右移左移左移功能與功能與c語言邏輯移位指令一樣,語言邏輯移位指令一樣,空出的位添空出的位添0補(bǔ)齊補(bǔ)齊。操作數(shù)操作數(shù))移動(dòng)位數(shù)移動(dòng)位數(shù)a=4B0010; a2; a=4B1000如如【例【例2.3】 采用參數(shù)定義的約翰遜計(jì)數(shù)器采用參數(shù)定義的約翰遜計(jì)數(shù)器o module johnson_w(clk,clr,qout);o input clk,clr;o parameter WIDTH=8; /參數(shù)定義參數(shù)定義o output reg(WIDTH-1):0 qout;o always (posedge clk or posedge clr)o be

50、gin if(clr) qout=0;o else begin qout=qout1;o qout0=qoutWIDTH-1;o /靈活運(yùn)用位賦值實(shí)現(xiàn)復(fù)雜邏輯功能靈活運(yùn)用位賦值實(shí)現(xiàn)復(fù)雜邏輯功能o endo endo endmodule0000000000000001000000110000011111111111仿真結(jié)果運(yùn)算符(運(yùn)算符(Operators)o 條件運(yùn)算符(條件運(yùn)算符(conditional operators)o 三目運(yùn)算符三目運(yùn)算符 = ? :,其定義方式如下:,其定義方式如下:signal=condition?true_expression:false_expression

51、;o 即:信號(hào)即:信號(hào)=條件條件?表達(dá)式表達(dá)式1:表達(dá)式表達(dá)式2;當(dāng)條件成立時(shí),信號(hào)取表達(dá)式當(dāng)條件成立時(shí),信號(hào)取表達(dá)式1的值,反之取表達(dá)式的值,反之取表達(dá)式2的值。的值。module comp2_1(x,y,z,a,b); parameter WIDTH=8; /通過配置參數(shù)通過配置參數(shù)width來調(diào)節(jié)比較器的位寬來調(diào)節(jié)比較器的位寬 input WIDTH-1:0a ,b; output x,y,z; assign x=(a=b)?1:0 ;/這些語句是并行執(zhí)行這些語句是并行執(zhí)行 assign y=(ab)?1:0;endmodule 4位輸入,位輸入,2位輸出的位輸出的4-2二進(jìn)制編碼器。當(dāng)

52、輸入編碼不是二進(jìn)制編碼器。當(dāng)輸入編碼不是4中取一碼時(shí),輸中取一碼時(shí),輸出編碼為全出編碼為全x。 / example_4_9: 4-2 binary encodermodule binary_encoder_4_2 ( input 3:0 i_dec, output 1:0 o_dec ); / 利用數(shù)據(jù)流描述和條件運(yùn)算符利用數(shù)據(jù)流描述和條件運(yùn)算符? :進(jìn)行建模進(jìn)行建模 assign o_dec = (i_dec = 4b0001) ? 2b00 : (i_dec = 4b0010) ? 2b01 : (i_dec = 4b0100) ? 2b10 : (i_dec = 4b1000) ? 2b

53、11 : 2bxx;endmodule4-2二進(jìn)制編碼器二進(jìn)制編碼器運(yùn)算符(運(yùn)算符(Operators)位拼接位拼接運(yùn)算符(運(yùn)算符(concatenation operators) 該運(yùn)算符將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來。使該運(yùn)算符將兩個(gè)或多個(gè)信號(hào)的某些位拼接起來。使用如下:用如下:信號(hào)信號(hào)1的某幾位,信號(hào)的某幾位,信號(hào)2的某幾位,的某幾位,信號(hào),信號(hào)n的某幾位的某幾位如:如:assign ci,si=ai+bi 半加器求和賦值語句半加器求和賦值語句運(yùn)算符的優(yōu)先級(jí)下列為默認(rèn)的操作符優(yōu)先級(jí)排列,在書寫程序時(shí)下列為默認(rèn)的操作符優(yōu)先級(jí)排列,在書寫程序時(shí)建議用括號(hào)建議用括號(hào)()()來控制運(yùn)算的優(yōu)先級(jí)

54、。來控制運(yùn)算的優(yōu)先級(jí)。 參數(shù)(parameter)【例【例2.4】 采用參數(shù)定義的數(shù)據(jù)比較器采用參數(shù)定義的數(shù)據(jù)比較器module compare_w(a,b,larger,equal,less);parameter SIZE=6; /參數(shù)定義參數(shù)定義inputSIZE-1:0 a,b;output larger,equal,less; wire larger,equal,less;/可以省略可以省略assign larger=(ab);assign equal=(a=b);assign less=(ab);endmodule參數(shù)(parameter)【例【例2.5】 采用參數(shù)定義的二進(jìn)制計(jì)數(shù)器

55、采用參數(shù)定義的二進(jìn)制計(jì)數(shù)器module count_w(en,clk,reset,out);input clk,reset,en;parameter WIDTH=8; /參數(shù)定義參數(shù)定義outputWIDTH-1:0 out; regWIDTH-1:0 out;always (posedge clk or negedge reset)if(!reset) out=0;else if(en) out=out+1;endmodule 主要內(nèi)容主要內(nèi)容2.3 Verilog HDL行為語句行為語句類別類別語句語句可綜合性可綜合性過程語句過程語句initial always塊語句塊語句串行塊串行塊be

56、gin-end并行塊并行塊fork-join 賦值語句賦值語句持續(xù)賦值持續(xù)賦值assign過程賦過程賦值值=、=條件語句條件語句if-elsecase循環(huán)語句循環(huán)語句forrepeat while forever 編譯向?qū)дZ句編譯向?qū)дZ句defineincludeifdef, else, endif1 過程語句過程語句o initialo alwayso 在一個(gè)模塊(在一個(gè)模塊(module)中,使用)中,使用initial和和always語句的次數(shù)是語句的次數(shù)是不受限制不受限制的。的。initial語句常用于仿語句常用于仿真中的初始化,真中的初始化,initial過程塊中的語句過程塊中的語句

57、僅執(zhí)行一僅執(zhí)行一次次;always塊內(nèi)的語句則是塊內(nèi)的語句則是不斷重復(fù)執(zhí)行不斷重復(fù)執(zhí)行的。的。并且模塊中的多個(gè)并且模塊中的多個(gè)always和和initial語句是同時(shí)并語句是同時(shí)并行運(yùn)行。行運(yùn)行。always過程語句使用模板過程語句使用模板o always ()begin/過程賦值過程賦值/if-else,case,casex,casez選擇語句選擇語句/while,repeat,for循環(huán)循環(huán)/task,function調(diào)用調(diào)用endo “always”過程語句通常是帶有觸發(fā)條件的,觸發(fā)條件過程語句通常是帶有觸發(fā)條件的,觸發(fā)條件寫在敏感信號(hào)表達(dá)式中,只有寫在敏感信號(hào)表達(dá)式中,只有當(dāng)觸發(fā)條件滿

58、足當(dāng)觸發(fā)條件滿足時(shí),其后時(shí),其后的的“begin-end”塊內(nèi)語句才塊內(nèi)語句才能按順序執(zhí)行能按順序執(zhí)行。敏感信號(hào)表達(dá)式敏感信號(hào)表達(dá)式:()o 敏感信號(hào)表達(dá)式又稱事件表達(dá)式或敏感信號(hào)列表,敏感信號(hào)表達(dá)式又稱事件表達(dá)式或敏感信號(hào)列表,即當(dāng)該表達(dá)式中變量的值改變時(shí),就會(huì)引發(fā)塊內(nèi)即當(dāng)該表達(dá)式中變量的值改變時(shí),就會(huì)引發(fā)塊內(nèi)語句的執(zhí)行。因此敏感信號(hào)表達(dá)式中應(yīng)列出影響語句的執(zhí)行。因此敏感信號(hào)表達(dá)式中應(yīng)列出影響塊內(nèi)取值的所有信號(hào)。若有兩個(gè)或兩個(gè)以上信號(hào)塊內(nèi)取值的所有信號(hào)。若有兩個(gè)或兩個(gè)以上信號(hào)時(shí),時(shí),它們之間用它們之間用“,”連接連接( (或用或用“or”“or”連接)連接)。敏感信號(hào)列表可放在模塊內(nèi)任何位置

59、,但一般放敏感信號(hào)列表可放在模塊內(nèi)任何位置,但一般放在在always語句后。語句后。o 例如:例如: (a) (a) / /當(dāng)信號(hào)當(dāng)信號(hào)a a的值發(fā)生改變的值發(fā)生改變 (a (a ,b) b) / /當(dāng)信號(hào)當(dāng)信號(hào)a a或信號(hào)或信號(hào)b b的值發(fā)生改變的值發(fā)生改變 (posedge clock) / (posedge clock) /當(dāng)當(dāng)clock clock 的上升沿到來時(shí)的上升沿到來時(shí) (negedge clock) / (negedge clock) /當(dāng)當(dāng)clock clock 的下降沿到來時(shí)的下降沿到來時(shí) (posedge clk or negedge reset) (posedge c

60、lk or negedge reset) / /當(dāng)當(dāng)clkclk的上升沿到來或的上升沿到來或resetreset信號(hào)的下降沿到來信號(hào)的下降沿到來敏感信號(hào)列表舉例敏感信號(hào)列表舉例module mux4_1(out,in0,in1,in2,in3,sel);output out;input in0,in1,in2,in3;input1:0 sel; reg out;always (in0 , in1 , in2 , in3 , sel) /敏感信號(hào)列表敏感信號(hào)列表case(sel) 2b00: out=in0; 2b01: out=in1; 2b10: out=in2; 2b11: out=in3; default: out=2bx;end

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論