版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第4章 Verilog HDL 基本語法4.1 Verilog 簡介硬件描述語言(Hardware Description Language,HDL)是電子系統(tǒng)硬件(1)行為描述、(2)結(jié)構(gòu)描述、(3)數(shù)據(jù)流描述的一種語言。數(shù)字電路系統(tǒng)的設計者通過這種語言a可以從上層到下層,從抽象到具體,逐層次地描述自己的設計思想,b用一系列分層次的模塊來表示極其復雜的數(shù)字系統(tǒng),C然后利用模塊組合經(jīng)由自動綜合工具轉(zhuǎn)換到門級電路網(wǎng)表,d再用自動布局布線工具把網(wǎng)表轉(zhuǎn)換為具體電路進行布局布線后,e下載到專用集成電路(ASIC)或現(xiàn)場可編程邏輯器件。4.1.1 Verilog HDL發(fā)展過程Verilog HDL語言
2、最初是于1983年由Gateway Design Automation公司為其模擬器產(chǎn)品開發(fā)的硬件建模語言。Verilog 語言于1995年成為IEEE標準,稱為IEEE Std 13641995;2001年又發(fā)布了Verilog HDL1363-2001標準;隨即在2005年又發(fā)布了System Verilog 1800-2005標準,這一系列標準的制定使得Verilog語言在綜合、仿真、驗證及IP重用等方面有很大幅度的提高。Verilog HDL 是System Verilog語言的基礎(chǔ)。SystemVerilog結(jié)合了來自 Verilog、VHDL、C+的概念,它將硬件描述語言(HDL)
3、與現(xiàn)代的高層級驗證語言結(jié)合了起來。System Verilog加入了一些C+的元素。近些年在國內(nèi)Verilog的應用率顯著增加,國內(nèi)絕大多數(shù)IC設計公司都采用Verilog HDL。學習Verilog不僅可以對數(shù)字電路技術(shù)有更進一步的了解,而且可為以后學習高級的行為綜合、物理綜合、IP設計和復雜系統(tǒng)設計打下堅實的基礎(chǔ)。4.1.2 Verilog HDL 與C語言比較C語言與Verilog HDL運算符基本相同。而C語言是一種在硬件上運行的語言,而Verilog是描述硬件的語言,要受到具體硬件電路的限制,它們的區(qū)別如下:在Verilog HDL中不能使用C語言中很多抽象的表示方法,如迭代表示法、
4、指針(C語言最具特點的語法)、不確定的循環(huán)及動態(tài)聲明等等。C語言是一行一行地執(zhí)行,按順序執(zhí)行;而Verilog HDL描述的是硬件,可以在同一時間內(nèi)有很多硬件電路一起并行執(zhí)行,兩者之間有區(qū)別。C語言的輸入/輸出函數(shù)豐富,而Verilog HDL 能用的輸入/輸出函數(shù)很少。C語言無時間延遲的指定,而Verilog HDL可以指定時間延遲。C語言中函數(shù)的調(diào)用是唯一的,每一個都是相同的,可以無限制調(diào)用。而Verilog HDL對模塊的每一次調(diào)用都必須賦予一個不同的別名,雖然調(diào)用的是同一模塊實例,但不同的別名代表不同的模塊,即生成了新的硬件電路模塊。與C語言相比,Verilog HDL描述語法較死,限
5、制較多,能用的判斷敘述有限。Verilog HDL中的延時語句只能用于仿真,不能被綜合工具所綜合。4.2 Verilog HDL設計舉例1、1位比較器的三種不同風格Verilog HDL程序設計【例4.2.1】1位比較器的Verilog HDL程序。通過對輸入信號A,B的比較,把比較的結(jié)果反映到m,L,e端口。2、測試模塊例子Verilog HDL可以用來描述變化的測試信號,它給出模塊的輸入信號,通過觀測被測試模塊是否符合要求,可以調(diào)試和驗證邏輯系統(tǒng)設計和結(jié)構(gòu)的正確性,并能發(fā)現(xiàn)問題及時修改。每一項工程是由大量功能各異的模塊組合而成的。模塊是由兩部分組成的:(1)一部分是接口描述(該模塊與其他外
6、部模塊進行通信的端口),(2)另一部分是邏輯功能描述(描述某個設計的功能或者結(jié)構(gòu)),即定義輸入是如何影響輸出的。模塊可以進行層次嵌套,將大型的數(shù)字電路設計分割成不同的小模塊來實現(xiàn)特定的功能,最后通過頂層模塊調(diào)用子模塊來實現(xiàn)整體功能。4.3 Verilog 模塊的結(jié)構(gòu)一個模塊, 由module1.模塊名 (module_name) 2端口列表 (port_list)3端口聲明 (input、output、inout)4變量聲明 (reg、wire、parameter)5行為描述語言 (initial、always)6連續(xù)賦值語句 (continuous assignment)7模塊調(diào)用語句 (m
7、odule instantiation)8任務及函數(shù) (task、function)endmodule在模塊的所有組成部分中,只有module、模塊名和endmodule必須出現(xiàn),其它部分都是可選的模塊:verilog模塊的部件module 模塊名,端口列表,端口(如果有端口)參數(shù)聲明wire、reg和其它類型的變量的聲明底層模塊實例數(shù)據(jù)流語句(assign)always塊和initial塊,所有行為語句全都在這些塊中任務和函數(shù)endmodule模塊語句結(jié)束可以在模塊內(nèi)部以任意位置,以任意順序出現(xiàn)作用:端口是模塊與外界交互的接口; 于外部環(huán)境(使用者/連接者)來講,模塊內(nèi)部 不可見,對模塊的調(diào)
8、用只能通過其端口進行。舉例:module sr_latch(q,qbar,sbar,rbar);說明:被處理信號(數(shù)據(jù))從sbar,rbar進入模塊,處理結(jié)果從q,qbar端口送出,這樣它可被外界調(diào)用; (2)實例引用4.2 I/O說明常見I/O口類型有1.輸入口(input)2.輸出口(output)3.雙向口(inout),分別表示數(shù)據(jù)流的方向是輸入,輸出或雙向的。常用到的是assign語句和always塊語句。1.assign語句-數(shù)據(jù)流描述風格的主要建模語句, 通常用來描述組合邏輯 。assign聲明語句很簡單,只需要寫一個“assign” (賦值),后面再加一個方程式即可。例如 :a
9、ssign sa & b & c;該語句描述了一個三輸入的與門,這是一個組合邏輯。注意:s的數(shù)據(jù)類型只能是wire類型。4.4、功能描述2.always塊 -行為級建模的主要語句 既可以用來描述組合邏輯, 也可以用來描述時序邏輯。從字面上理解,always的意思是“總是,永遠”。在Verilog HDL中,只要指定的事件發(fā)生,由always指定的內(nèi)容將不斷地重復運行,不論該事件已經(jīng)發(fā)生了多少次。這恰恰反映了實際電路的特征,即在通電的情況下電路將不斷運行。最常用的兩種事件是電平觸發(fā)和邊沿觸發(fā)。電平觸發(fā)是指當某個信號的電平發(fā)生變化時,執(zhí)行always指定的內(nèi)容;邊沿觸發(fā)是指當某個信號的上升沿或下降
10、沿到來時,執(zhí)行always指定的內(nèi)容。電平觸發(fā)的寫法是在“”后面直接寫觸發(fā)信號的名稱;邊沿觸發(fā)的寫法是在“”后面寫“posedge 信號名”或者“negedge 信號名”,posedge代表信號的上升沿,negedge則代表信號的下降沿。4.5 模塊調(diào)用-結(jié)構(gòu)級建模的主要語句4.4 Verilog HDL語言要素與表達式介紹Verilog語法中的注釋、常量、變量、操作符、字符串、關(guān)鍵字和標識符等基本語法要素。4.4.1 注釋在代碼中插入注釋可以有效地增加程序的可讀性,也便于文檔管理。Verilog HDL允許單行注釋和多行注釋。單行注釋以“/”開始,直到行末結(jié)束;多行注釋以“/ *”開始,以“
11、*/”結(jié)束。這兩種注釋的方法和C+的注釋方式相同。4.4.2 常量1、數(shù)字(1)整數(shù) 有以下4種進制表示形式:二進制整數(shù)(b或B)、十進制整數(shù)(d或D)、十六進制整數(shù)(h或H)、八進制整數(shù)(o或O)。數(shù)字表達方式主要有三個部分:位寬、進制和數(shù)字。位寬指數(shù)字常量的二進制寬度,進制表示數(shù)字的類型。數(shù)字表達方式一共有三種:位寬 進制 數(shù)字,這種方式描述數(shù)字最為完整;進制 數(shù)字,這種描述方式省略了位寬,在這種情況下,數(shù)字的位寬采用系統(tǒng)默認位寬(由系統(tǒng)決定,至少是32位)數(shù)字,這種描述方式省略了位寬和進制信息,采用默認的位寬和進制(十進制)。例如:8b00101000 /位寬為8的二進制表示,b表示二進
12、制(2)負數(shù) 數(shù)字同樣也可以定義為負數(shù),只需要在位寬表達式前面加一個減號。(3)x和z值 Verilog語法中,有x和z兩種特殊值。在數(shù)字電路中,x代表不定值,z代表高阻值。在不同進制中,x和z表示的不定值或高阻值的位數(shù)不同。例如:4bx1x0 /位寬為4的二進制數(shù)從低位數(shù)起的第二位和第四位為不定值(4)下畫線 為了提高程序的可讀性,尤其在使用二進制表示較長的數(shù)字常量的時候,我們可以使用下劃線將數(shù)字分隔開來。 例如:16 b0010_0100_1101_0001 /合法格式2、參數(shù)聲明用parameter來定義常量,稱為符號常量,即標識符形式常量,采用標識符代表一個常量可以提高程序的可讀性和可
13、維護性。參數(shù)的聲明格式:parameter 參數(shù)名1=常數(shù)表達式1, 參數(shù)名2=常數(shù)表達式2,;例如:parameter ALL_X=16bx; /定義參數(shù)ALL_X為常數(shù)16bxparameter state0=2b00, /定義參數(shù)state0為常數(shù)2b004.4.3 變量變量是在程序運行過程中其值可以改變的量。1、線網(wǎng)類型線網(wǎng)類型可以理解為實際電路中的導線,通常用于表示結(jié)構(gòu)實體之間的物理連接。2、寄存器變量類型寄存器變量類型主要有以下6種:reg,integer,time,real,realtime,memory型。(1)寄存器是數(shù)據(jù)儲存單元的抽象,寄存器數(shù)據(jù)類型的關(guān)鍵字是reg。reg
14、型變量定義格式如下:reg signed 最高位 :最低位 寄存器名1, 寄存器名2,寄存器名N;其中,signed表示數(shù)值為有符號數(shù)(以二進制補碼形式保存),默認情況下為無符號數(shù)。例如:reg 3:0 bus; /定義了一個4位的名為bus 的reg型變量總之,1.wire表示直通,即只要輸入有變化,輸出馬上無條件地變化; reg 一定要有觸發(fā),輸出才會反映輸入。2.wire只能被assign連續(xù)賦值,reg只能在initial和always中賦值。3.wire使用在連續(xù)賦值語句中,而reg使用在過程賦值語句中。(2)使用integer、real、time關(guān)鍵字定義寄存器變量和使用reg進行
15、定義并沒有本質(zhì)上的區(qū)別,僅僅是為了使程序的表述更加清晰明了。integer、real、time型變量的位寬是固定的,integer型變量的位寬為32,real型變量的位寬為64,time real型變量的位寬為64,它們已經(jīng)是矢量,因此在定義變量時不可以加入位寬。如integera1,b1;/定義a1、b1為32位整型變量(3)memory型數(shù)據(jù) 可以通過reg型變量建立數(shù)組來對存儲器建模,可以描述RAM型存儲器、ROM存儲器和reg文件。數(shù)組中的每一個單元通過一個數(shù)組索引進行尋址。memory型變量定義格式如下:reg 最高位 :最低位 存儲器名 最高位 :最低位;下面舉例說明:reg 7:
16、0 mema 0:255;4.4.4 操作符1、 算術(shù)運算符算術(shù)運算符有+(加法符號,正值符號)、 (減法符號,負值符號)、 * (乘); / (除) 、 % (取模)、 *(指數(shù)冪)6種。例如:reg1reg2 / “”為加法符號 -num/ “-”為負值符號9 / 4/ 9除以4結(jié)果為2-/ -5模以2結(jié)果為 -1,取第一個操作數(shù)的符號值2*4/ 2的4次方算術(shù)運算中任意一個操作符中含有一位或多位不確定值x或z,則整個運算結(jié)果為x。例如:4b10 x04b0001 結(jié)果為4bxxxx; 2、位運算符Verilog 作為一種硬件描述語言,是針對硬件電路而言的。硬件電路中信號有1,0,x,z。
17、在硬件電路中信號進行與、或、非時,反映在Verilog中則是相應的操作數(shù)的位運算。Verilog 位運算符有(取反)、 & (按位與)、 |(按位或)、 (按位異或)、 , (按位同或)5種。(3)邏輯運算符Verilog中邏輯運算符有 & (邏輯與)、 |(邏輯或)、 ! (邏輯非)三種。邏輯運算符只對邏輯0 (定義為假)、1 (定義為真)或者x (邏輯關(guān)系不明確,未知) 進行操作,操作產(chǎn)生的結(jié)果通常也只為0或1。4、關(guān)系運算符關(guān)系運算符共有(大于)、 (小于)、 (大于等于)、 (小于等于)4種。關(guān)系操作符的結(jié)果如果為真(ture),則返回值為1;結(jié)果如果為假(false),則返回值為0;
18、如果操作數(shù)中有一個或多個含有不定值x和z,則邏輯為模糊,返回值為x。5、等式運算符等式運算符有(等于)、 ?。ú坏扔冢ⅲㄈ扔冢?、!(不全等于)4種。 在全等比較(“” ,“!”)中 ,不考慮實際物理意義,把 1,0,x,z均當做數(shù)值來進行比較,若全等結(jié)果為1,否則結(jié)果為0,它們常用于case表達式的判別,所以又稱為“case等式運算符”;而在邏輯比較(“”,“!”)中,若操作數(shù)中出現(xiàn)x或z,則結(jié)果很可能是不確定值x。6、移位運算符 移位操作符有(邏輯左移運算符)、 (邏輯右移運算符)、 (算術(shù)左移運算符)、 (算術(shù)右移運算符)4種。7、位拼接運算符位拼接運算符可以把兩個或多個信號的某些位拼
19、接起來,其使用方法如下:expr1,expr2,expr3,exprN拼接運算符是把位于大括號“ ”中的兩個或兩個以上用逗號“,”分隔的小表達式按位連接在一起,形成一個大的表達式。8、縮減運算符縮減運算符的操作數(shù)只有一個,并且只產(chǎn)生1位數(shù)據(jù)結(jié)果??s減運算符運算有&(縮減與)、 |(縮減或)、 &(縮減與非)、 |(縮減或非)、 (縮減異或)、 (縮減同或)六種??s減運算符是對單個操作數(shù)進行與、或、非遞推運算,最后的運算結(jié)果是1位二進制數(shù)??s減運算的具體運算過程是:第一步先將操作數(shù)的第1位與第2位進行與、或、非運算;第二步將運算結(jié)果與第3位進行與、或、非運算,依次類推,直到最后1位。9、條件運算
20、符條件運算符是一個三目運算符,其格式如下:條件表達式 ? 表達式1 :表達式2條件運算符根據(jù)條件表達式的值從兩個表達式中選擇一個表達式,若條件表達式為1,則執(zhí)行表達式1;若條件表達式為0,則執(zhí)行表達式2。4.4.5 字符串、關(guān)鍵字、標識符1、字符串字符串是用雙引號括起來的字符序列。2、關(guān)鍵字關(guān)鍵字是Verilog HDL預留的定義語言結(jié)構(gòu)的特殊標識,全部由小寫字母定義。3、標識符標識符是模塊、變量、端口、實例、塊結(jié)構(gòu)、函數(shù)等對象的名稱,程序通過標識符訪問相應的對象。4.5 賦值語句Verilog HDL有兩種為變量賦值的方法,一種叫做連續(xù)賦值(Continuous Assignment),另一
21、種叫做過程賦值(Procedural Assignment)。過程賦值又分為阻塞賦值(Blocking Assignment)和非阻塞賦值(Nonblocking Assignment)。4.5.1 連續(xù)賦值assign語句-是verilog數(shù)據(jù)流建模的基本語句2.最基本的格式:assign # 延時量 線網(wǎng)型變量名 賦值表達式3. 賦值表達式可以是 a.標量 b.向量線網(wǎng) c.向量寄存器 d.函數(shù)調(diào)用; 被賦值的目標變量可以是a.線網(wǎng)變量 b.多個線網(wǎng)的拼接4.執(zhí)行過程:連續(xù)賦值語句總是處于激活狀態(tài),只要右側(cè)表達式中的任意一個操作數(shù)發(fā)生變化,表達式就會被立即重新計算,并且將結(jié)果賦值給對象。5
22、.例如:/線網(wǎng)聲明wire flag_tag;reg7:0 Data_byte;/連續(xù)賦值語句assign flag_tag &Data_byte描述組合電路的主要手段1.連續(xù)賦值是為線網(wǎng)型的變量提供驅(qū)動的一種方法, 它只能為線網(wǎng)型變量賦值, 并且線網(wǎng)型變量也必須用連續(xù)賦值的方法賦值。普通賦值延遲在連續(xù)賦值語句中說明延遲值,延遲值位于關(guān)鍵字assign的后面。assign #10 out=in1&in2;6.2延遲1.普通賦值延遲(慣性延遲)assign #10 out=in1&in2;而有一些連續(xù)賦值語句有時延:assign #5 A_rst = gate_a & gate_b; 圖4.5.
23、1舉例說明了時延的概念,A_rst是右端表達式的傳輸前的計算值。4.5.2 過程賦值過程賦值提供了為寄存器型變量賦值的方法,出現(xiàn)的位置是在各種塊結(jié)構(gòu)中,例如always塊、 initial塊等。過程賦值又分為阻塞賦值和非阻塞賦值兩種。1、阻塞賦值阻塞賦值使用“=”為變量賦值,如a=b;在賦值結(jié)束以前不可以進行其它操作,在賦值結(jié)束后才繼續(xù)后面的操作。這個過程好像阻斷了程序的運行,因而被稱為阻塞賦值。阻塞賦值語句阻塞賦值方式(使用“=”為變量賦值,如a=b,在每個右端表達式計算完后立即賦給左端變量,也就是在該語句結(jié)束時就完成了賦值操作):賦值按順序執(zhí)行,只有上一條語句執(zhí)行完成(賦值結(jié)束),才會執(zhí)行
24、(賦值)下一條語句;在賦值結(jié)束以前不可以進行其它操作,在賦值結(jié)束后才繼續(xù)后面的操作。這個過程好像阻斷了程序的運行,因而被稱為阻塞賦值。顯然,連續(xù)的阻塞賦值操作是順序完成的。阻塞過程性賦值所綜合出來的電路為并接方式?!纠?.5.1】阻塞賦值舉例。always (posedge clk)beginb=a;c=b;end4位阻塞賦值程序reg_bpa.vmodule reg4_bpa(qout, clk, reset, din); output 3:0 qout; input clk, reset; input din; reg 3:0 qout; always (posedge clk or po
25、sedge reset) /上升沿clk異步復位reset if (reset) qout = 4b0000; else begin qout0 = din; qout1 = qout0; qout2 = qout1; qout3 = qout2; endendmodule2、非阻塞賦值非阻塞賦值使用“=”為變量賦值,在執(zhí)行到連續(xù)的非賦值語句時,僅僅對“=” 右端表達式進行評估,但并不立即賦值給左端,然后繼續(xù)執(zhí)行后面的操作,當塊結(jié)構(gòu)結(jié)束后所有的非阻塞賦值同時進行賦值。這個過程好像沒有阻斷程序的運行,因而被稱為非阻塞賦值。非阻塞賦值語句非阻塞賦值方式(“=”,在塊結(jié)束時才完成賦值操作):所有語句
26、的賦值都發(fā)生在當前仿真的最后一個時間步,賦值是并行執(zhí)行的。執(zhí)行步驟:(1)讀取操作數(shù),計算右側(cè)表達式的值并保存在臨時變量中;(2)對左側(cè)的賦值由仿真器調(diào)度到相應的仿真時刻;(3)每個賦值操作在被調(diào)度的仿真時刻完成。典型應用:流水線建模 互斥數(shù)據(jù)傳輸問題:仿真速度下降 內(nèi)存使用量增加非阻塞過程性賦值所綜合出來的電路為串接方式。4位非阻塞賦值程序reg_nbp.vmodule reg4_nbp(qout, clk, reset, din); output 3:0 qout; input clk, reset; input din; reg 3:0 qout; always (posedge clk
27、 or posedge reset) /上升沿clk或異步復位reset if (reset) qout = 4b0000;else begin qout0 = din; qout1 = qout0; qout2 = qout1; qout3 = qout2; endendmodule3、使用阻塞賦值與非阻塞賦值語句的注意事項阻塞賦值語句的操作符為“=”,非阻塞賦值語句的操作符為“b成立,out=1;否則out=0。if (ab) out =1;else out=0;4.7.2 case 語句當分支有很多時,選用Verilog中的case語句,定義如下:case(控制表達式)分支表達式1: 操
28、作1;分支表達式2: 操作2;分支表達式n: 操作n;default: 操作n+1;endcase【例4.7.3】 case 語句舉例1。case(in) 1b 0: out=a; 1b 1: out=b default: out=1bz; /這里給一個默認值endcase【例4.7.4】 case 語句舉例2。always (posedge clk ) begin out = out; case( sel ) /synopsys full-case 2b00: out = a; 2b10: out = b; 2b01: out = c; endcase end 和case語句功能相似的還有c
29、asex和casez語句。這兩條語句用于處理在條件表達式和分支項的比較過程中存在x或者z的情況,casez語句將忽略比較過程中的值為z的位,而casex語句將忽略比較過程中的值為x或z的位。表4.7.1、表4.7.2、表4.7.3 所示是case、casez和casex語句的真值表。4.7.3 比較if else嵌套與 case 語句4.8 循環(huán)語句 Verilog HDL中有for循環(huán)語句、forever循環(huán)語句、repeat 循環(huán)語句、while 循環(huán)語句4類循環(huán)語句,用來控制執(zhí)行語句的執(zhí)行次數(shù)。4.8.1 for循環(huán)語句Verilog HDL中for循環(huán)語句跟C語言中for循環(huán)語句的語法
30、幾乎一樣,容易被學習過C語言的設計人員所接受。其格式如下:(1)for(循環(huán)變量賦初值; 循環(huán)終止條件; 更新循環(huán)變量) 循環(huán)執(zhí)行語句;(2)for(循環(huán)變量賦初值; 循環(huán)終止條件; 更新循環(huán)變量) begin 語句; end在使用for循環(huán)時,需要先定義一個用于控制循環(huán)次數(shù)的變量。for語句執(zhí)行過程是:(1)先求解循環(huán)變量的初值。(2) 再求解循環(huán)終止條件,若其值為真(非0),則執(zhí)行for語句中循環(huán)執(zhí)行語句,然后執(zhí)行下面的第3步;若其值為假(0),轉(zhuǎn)到第5步。(3) 執(zhí)行更新循環(huán)變量。(4) 轉(zhuǎn)回第(2)步繼續(xù)執(zhí)行。(5) 執(zhí)行for語句下面的語句?!纠?.8.1】 用for語句,對變量a進
31、行加4操作。for(i=0; i4; i=i+1) begin a=a+1; end4.8.2 forever循環(huán)語句 forever是永遠執(zhí)行的語句,也就是代表無窮的循環(huán)下去,不需要聲明任何變量。如果想要退出循環(huán),必須采用強制退出循環(huán)的方法。語法形式如下:(1)forever 語句;(2)forever begin 語句; end4.8.3 repeat循環(huán)語句repeat帶有一個控制循環(huán)次數(shù)的常量或者變量,是最簡單的循環(huán)語句,用于已知循環(huán)次數(shù)的情況。語法形式如下:repeat(循環(huán)次數(shù)) 語句;repeat(循環(huán)次數(shù)) begin 語句; end【例4.8.3】利用repeat語句實現(xiàn)連續(xù)
32、4次加1操作。repeat (4) begin a=a+1; end4.8.4 while循環(huán)語句repeat語句只能用于固定循環(huán)次數(shù)的情況,而while語句則靈活得多,它可以通過控制某個變量的取值來控制循環(huán)次數(shù)。while循環(huán)語句的語法格式如下:while(條件表達式) 語句;while(條件表達式) begin 多條語句; end4.9 過程語句在這里我們介紹兩種過程性語句 always語句和initial語句。一個程序模塊可以有多個initial和 always過程塊。每個initial和always語句在仿真的一開始就同時立即開始執(zhí)行。initial語句只執(zhí)行一次,而always語句則
33、是不斷地重復被運行著,直到仿真過程結(jié)束。但always語句后跟著的過程塊是否運行,則要看它的觸發(fā)條件是否滿足,如滿足則運行過程塊一次,再次滿足則再運行一次,直至仿真過程結(jié)束。4.9.1 initial 語句initial過程塊由initial語句和語句塊組成,一條initial語句只執(zhí)行一次,initial語句在仿真開始時開始執(zhí)行,其語法格式如下:initial 語句塊語句塊的格式:begin 行為語句1; 行為語句n;end4.9.2 always 語句always語句在仿真過程中是不斷重復執(zhí)行的,但always 語句后跟著的過程塊是否執(zhí)行,則要看它的觸發(fā)條件是否滿足,如滿足則運行過程塊一次
34、;如不滿足,則不執(zhí)行語句塊。其語法格式如下:always (敏感時間列表)begin 行為語句1; 行為語句n;end針對上述格式做以下說明:(1) 過程語句關(guān)鍵詞always標明該過程塊是一個always過程塊;(2) (敏感時間列表)是一個可選項,帶有敏感時間列表的語句塊的執(zhí)行要受到敏感時間的控制。敏感時間列表是由一個或者多個時間表達式組成的,當存在多個時間表達式的時候用or將他們組合起來。例如:always (negative clk or positive rst)敏感時間是clk信號的下降沿或rst信號的上升沿,此時才執(zhí)行下面的語句塊;(3) 為可選項,用來指定延時時間。4.10 任
35、務與函數(shù)4.10.1 任務Verilog HDL中的任務與高級語言的過程類似,它不帶返回值,可以直接調(diào)用。盡管任務不帶有返回值,但任務的參數(shù)可以定義為輸出端口或者雙向端口,因此實際上任務可以返回多個值。定義一個任務使用關(guān)鍵字task endtask。2、調(diào)用變量的傳遞任務調(diào)用語句給出傳入任務的參數(shù)值和接收結(jié)果的變量值。任務調(diào)用語句是過程語句,可以在always語句或initial語句中使用。形式如下:任務名 (端口1, 端口2, 端口3, 端口N);4.10.2 函數(shù)函數(shù)類似于C語言中的函數(shù)。調(diào)用函數(shù)的目的是返回一個表達式的值。因此,函數(shù)至少需要一個輸入?yún)?shù),且參數(shù)必須都為輸入端口,不可以包含
36、輸出或者雙向端口。函數(shù)有一個返回值,返回值被賦給和函數(shù)名同名的變量,這也決定了函數(shù)只能存在一個返回值。定義函數(shù)使用functionendfunction 關(guān)鍵字。4.11 預編譯指令同C語言一樣,Verilog HDL也可以對程序進行預編譯處理。預編譯處理的含義就是在程序被編譯之前,將需要做處理的地方按照要求進行處理,然后再進行編譯。在Verilog HDL中,預編譯指令都有一個明顯的標志,就是以符號“”開頭(注意在鍵盤上“”通常位于數(shù)字1的左邊),總的來說,預編譯指令不是Verilog HDL語句,結(jié)尾不用加分號。4.11.1 宏定義語句(define、undef)宏定義語句define指令
37、用于文本替換,很像C語言中的#define 指令,它用一個指定的標識符來代替一個字符串。在編譯之前,編譯器先將程序中出現(xiàn)的標識符全部替換為它所表示的字符串,然后再進行編譯。宏定義主要可以起到兩個作用:一是用一個有意義的標識符取代程序中反復出現(xiàn)的含義不明顯的字符型;二是用一個較短的標識符替代反復出現(xiàn)的較長的字符串。宏定義的一般形式為difine 標識符(宏名) 字符串 (宏內(nèi)容)例如: define BUS_SIZE 32 /宏名為BUS_SIZE,宏內(nèi)容為32. . .reg BUS_SIZE - 1:0 AddReg; / BUS_SIZE在編譯前被替代為324.11.2 文件包含語句(include)Verilgo HDL中的文件包含指
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 開學主題教育活動方案5篇
- DB4106T 77-2022 玉米螟防控技術(shù)規(guī)程
- 五年級一本書作文500字(10篇)
- 感恩父母主題班會教案9篇
- 2024年技術(shù)服務合同標的詳解
- 2024年建筑外墻裝修腳手架搭建合同
- 2024年房屋中介提供裝修貸款合同
- 2024年投資并購雙方保密及競業(yè)禁止協(xié)議
- 2024年房屋簡易裝修半包合同
- 2024互聯(lián)網(wǎng)金融借貸平臺運營授權(quán)合同
- JC-T 738-2004水泥強度快速檢驗方法
- 胸腔積液患者病例討論
- 第六章-冷凍真空干燥技術(shù)-wang
- 大學生職業(yè)生涯規(guī)劃成長賽道
- 建設項目設計管理方案
- 2024年屆海南航空控股股份有限公司招聘筆試參考題庫含答案解析
- 前程無憂在線測試題庫及答案行測
- 《軍事理論》課程標準
- 倉庫貨物條碼管理培訓
- 第六章-中國早期社會學中的社區(qū)學派-《中國社會學史》必備
- 太陽能發(fā)電技術(shù)在航天與航空領(lǐng)域的應用
評論
0/150
提交評論