




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、13.8 3.8 循環(huán)語句循環(huán)語句3.9 3.9 結構說明語句結構說明語句3.10 3.10 編譯預處理語句編譯預處理語句3.11 3.11 語句的順序執(zhí)行與并行執(zhí)行語句的順序執(zhí)行與并行執(zhí)行3.12 3.12 不同抽象級別的不同抽象級別的Verilog HDLVerilog HDL模型模型3.13 3.13 設計技巧設計技巧3.1 3.1 引言引言3.2 Verilog HDL3.2 Verilog HDL基本結構基本結構3.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量3.4 3.4 運算符及表達式運算符及表達式3.5 3.5 語句語句3.6 3.6 賦值語句和塊語句賦值語句和塊語句3
2、.7 3.7 條件語句條件語句硬件描述語言硬件描述語言Verilog HDLVerilog HDL23.1 3.1 引言引言一、什么是一、什么是Verilog HDLVerilog HDL二、二、Verilog HDLVerilog HDL的發(fā)展歷史的發(fā)展歷史三、不同層次的三、不同層次的Verilog HDLVerilog HDL抽象抽象 四、四、Verilog HDLVerilog HDL的特點的特點33.1 3.1 引言引言一、一、什么是什么是Verilog HDL Verilog HDL是一種用于是一種用于數(shù)字數(shù)字邏輯電路設計的硬件描述語邏輯電路設計的硬件描述語言(言(Hradware
3、Description Language ),可以用來進行,可以用來進行數(shù)字電路的仿真驗證、時序分析、邏輯綜合。數(shù)字電路的仿真驗證、時序分析、邏輯綜合。用Verilog HDL描述的電路設計就是該電路的Verilog HDL模型。Verilog HDL 既是一種行為描述語言也是一種結構描述語言。 既可以用電路的功能描述,也可以用元器件及其之間的既可以用電路的功能描述,也可以用元器件及其之間的連接來建立連接來建立Verilog HDLVerilog HDL模型。模型。43.1 3.1 引言引言二、二、Verilog HDLVerilog HDL的發(fā)展歷史的發(fā)展歷史 1983年,由年,由GDA(G
4、ateWay Design Automation)公)公司的司的Phil Moorby首創(chuàng);首創(chuàng); 1989年,年,Cadence公司收購了公司收購了GDA公司;公司; 1990年,年, Cadence公司公開發(fā)表公司公開發(fā)表Verilog HDL; 1995年年,IEEE制定并公開發(fā)表制定并公開發(fā)表Verilog HDL1364-1995標準;標準; 1999年,模擬和數(shù)字電路都適用的年,模擬和數(shù)字電路都適用的Verilog標準公開標準公開發(fā)表發(fā)表53.1 3.1 引言引言三、不同層次的三、不同層次的Verilog HDLVerilog HDL抽象抽象 Verilog HDLVerilog
5、HDL模型可以是實際電路的不同級別的抽象。模型可以是實際電路的不同級別的抽象。抽象級別可分為抽象級別可分為五五級:級:系統(tǒng)級系統(tǒng)級(system level): (system level): 用高級語言結構(如case語句)實現(xiàn)的設計模塊外部性能的模型;算算法級法級(algorithmic level): (algorithmic level): 用高級語言結構實現(xiàn)的設計算法模型(寫出邏輯表達式);RTLRTL級級(register transfer level): (register transfer level): 描述數(shù)據(jù)在寄存器之間流動和如何處理這些數(shù)據(jù)的模型;門級門級(gate l
6、evel): (gate level): 描述邏輯門(如與門、非門、或門、與非門、三態(tài)門等)以及邏輯門之間連接的模型;開關級開關級(switch level): (switch level): 描述器件中三極管和儲存節(jié)點及其之間連接的模型。返回返回3.1263.1 3.1 引言引言四、四、Verilog HDLVerilog HDL的特點的特點 語法結構上的主要語法結構上的主要特點特點:形式化地表示電路的行為和結構;借用C語言的結構和語句;可在多個層次上對所設計的系統(tǒng)加以描述,語言對設計規(guī)模不加任何限制;具有混合建模能力:一個設計中的各子模塊可用不同級別的抽象模型來描述;基本邏輯門、開關級結構
7、模型均內(nèi)置于語言中,可直接調(diào)用;易創(chuàng)建用戶定義原語(UDP,User Designed Primitive) 。 易學易用,功能強易學易用,功能強與與C C語言語言非常相非常相似似!73.2 Verilog HDL3.2 Verilog HDL基本結構基本結構一、簡單的一、簡單的Verilog HDLVerilog HDL例子例子二、二、Verilog HDLVerilog HDL模塊的結構模塊的結構三、邏輯功能定義三、邏輯功能定義四、關鍵字四、關鍵字五、標識符五、標識符六、編寫六、編寫Verilog HDLVerilog HDL源代碼的標準源代碼的標準83.2 Verilog HDL3.2
8、Verilog HDL基本結構基本結構一、簡單的一、簡單的Verilog HDLVerilog HDL例子例子 例例3.2.1 8 8位全加器位全加器module adder8 ( cout,sum,a,b,cin ); output cout; / 輸出端口聲明輸出端口聲明 output 7:0 sum; input 7:0 a,b; / 輸入端口聲明輸入端口聲明 input cin; assign cout,sum=a+b+cin;endmodule assign語句:無論右邊表達式操作數(shù)何時發(fā)生變化,右邊表達式都語句:無論右邊表達式操作數(shù)何時發(fā)生變化,右邊表達式都會重新計算,并且在指定的
9、延遲后給左邊表達式賦值。會重新計算,并且在指定的延遲后給左邊表達式賦值。I/O說明說明端口定義端口定義功能描述功能描述模塊名(文件名)整個整個Verilog HDLVerilog HDL程序嵌套在程序嵌套在modulemodule和和endmoduleendmodule聲明語句中。聲明語句中。每條語句相對每條語句相對modulemodule和和endmoduleendmodule最好縮進最好縮進2 2格或格或4 4格!格!/ / 表示注釋部分,一般只占據(jù)表示注釋部分,一般只占據(jù)一一行。對編譯不起作用!行。對編譯不起作用!單行注釋符93.2 Verilog HDL3.2 Verilog HDL基
10、本結構基本結構 例例3.2.2 8 8位計數(shù)器位計數(shù)器module counter8 ( out,cout,data,load, cin,clk ); output 7:0 out; output cout; input 7:0 data; input load, cin,clk ; reg7:0 out; always (posedge clk) begin if(load) out = data; / 同步預置數(shù)據(jù)同步預置數(shù)據(jù) else out = out + 1 + cin; / 加加1計數(shù)計數(shù) end assign cout = &out & cin; /若若out為為
11、8hFF,cin為為1,則,則cout為為1endmoduleI/O說明說明端口定義端口定義功能描述功能描述信號類型聲明信號類型聲明縮減運算符位運算符103.2 Verilog HDL3.2 Verilog HDL基本結構基本結構 例例3.2.3 2 2位比較器位比較器module compare2 ( equal,a,b); output equal; input 1:0 a,b; assign equal = ( a = = b ) ? 1:0; / * 如果如果a等于等于b,則,則equal 為為1,否則為,否則為0 * /endmodule“=”非阻塞過程性賦值:將想要賦給左式的值安排
12、在未來時刻。不等上一個賦值非阻塞過程性賦值:將想要賦給左式的值安排在未來時刻。不等上一個賦值完成執(zhí)行下個賦值語句。完成執(zhí)行下個賦值語句?!?” 阻塞過程性賦值:按照順序執(zhí)行,前一個賦值結束才執(zhí)行下邊的賦值語句。阻塞過程性賦值:按照順序執(zhí)行,前一個賦值結束才執(zhí)行下邊的賦值語句。連續(xù)賦值語句連續(xù)賦值語句條件運算符條件運算符/ / * * * * / /內(nèi)表示注釋部分,一般可占據(jù)內(nèi)表示注釋部分,一般可占據(jù)多多行。行。對編譯不起作用!對編譯不起作用!多行注釋符多行注釋符113.2 Verilog HDL3.2 Verilog HDL基本結構基本結構 例例3.2.4 三態(tài)驅(qū)動器三態(tài)驅(qū)動器module t
13、rist2(out,in,enable); output out; input in, enable; bufif1 mybuf(out,in,enable);endmodule例化元件名門元件關鍵字門元件例化門元件例化程序通過調(diào)用一程序通過調(diào)用一個在個在VerilogVerilog語言庫中現(xiàn)存的實例語言庫中現(xiàn)存的實例門元件來實現(xiàn)某邏輯門功能。門元件來實現(xiàn)某邏輯門功能。 Inputs | OutputIN ENABLE| OUTX0| Z11| 101| 0bufif1bufif1的真值表的真值表門元件例化門元件例化12module trist1(out,in,enable); output
14、out; input in, enable; mytri tri_inst(out,in,enable);endmodulemodule mytri(out,in,enable); output out; input in, enable; assign out = enable? in:bz; / * 如果如果enable為為1,則,則out = in,否則為高阻態(tài),否則為高阻態(tài) * /endmodule3.2 Verilog HDL3.2 Verilog HDL基本結構基本結構 例例3.2.5 三態(tài)驅(qū)動器三態(tài)驅(qū)動器例化元件名子模塊名頂層模塊頂層模塊子模塊子模塊模塊元件例化模塊元件例化模塊元
15、件例化模塊元件例化頂層模塊(頂層模塊(trist1trist1)調(diào)用由某子模塊)調(diào)用由某子模塊(mytrimytri)定義的實例元件()定義的實例元件(tri_insttri_inst)來實現(xiàn)某功能。)來實現(xiàn)某功能。返回返回邏輯邏輯功能定義功能定義133.2 Verilog HDL3.2 Verilog HDL基本結構基本結構Verilog HDL程序是由程序是由模塊模塊構成的。每個模塊嵌套在構成的。每個模塊嵌套在module和和endmodule聲明語句中。模塊是可以進行層次嵌套的。聲明語句中。模塊是可以進行層次嵌套的。每個每個Verilog HDL源文件中只準有一個頂層模塊,其他為子模塊。
16、源文件中只準有一個頂層模塊,其他為子模塊。每個模塊要進行端口定義,并說明輸入輸出端口,然后對模塊的每個模塊要進行端口定義,并說明輸入輸出端口,然后對模塊的功能進行行為邏輯描述。功能進行行為邏輯描述。程序書寫格式自由,一行可以寫幾個語句,一個語句也可以分多程序書寫格式自由,一行可以寫幾個語句,一個語句也可以分多行寫。行寫。除了除了endmodule語句、語句、begin_end語句和語句和fork_join語句外,每個語語句外,每個語句和數(shù)據(jù)定義的最后必須有分號。句和數(shù)據(jù)定義的最后必須有分號??捎每捎?*.*/和和/.對程序的任何部分作注釋。加上必要的注釋,以對程序的任何部分作注釋。加上必要的注
17、釋,以增強程序的可讀性和可維護性。增強程序的可讀性和可維護性。143.2 Verilog HDL3.2 Verilog HDL基本結構基本結構二、二、Verilog HDLVerilog HDL模塊的結構模塊的結構 VerilogVerilog的基本設計單元是的基本設計單元是“模塊模塊 (block) (block) ” 。 Verilog Verilog 模塊的結構由在模塊的結構由在modulemodule和和endmoduleendmodule關鍵詞關鍵詞之間的之間的4 4個主要部分組成:個主要部分組成:module block1(amodule block1(a, ,b b, ,c c,
18、 ,d )d ); input ainput a, ,b b, ,c c; output doutput d; wire xwire x; assign d = a | xassign d = a | x; assign x = ( b & assign x = ( b & c )c );endmoduleendmoduleI/O說明說明端口定義端口定義功能描述功能描述信號類型聲明信號類型聲明1234153.2 Verilog HDL3.2 Verilog HDL基本結構基本結構三、邏輯功能定義三、邏輯功能定義 在在Verilog Verilog 模塊中有模塊中有3 3種方法可
19、以描述電路的邏輯功能種方法可以描述電路的邏輯功能:(1 1)用用assign 語句語句 assign x = ( b & c );連續(xù)賦值語句連續(xù)賦值語句常用于描述組合組合邏輯門元件例化門元件例化例化元件名門元件關鍵字(2 2)用元件例化(用元件例化(instantiate)and myand3( f,a,b,c);v 注注1 1:元件例化即是調(diào)用:元件例化即是調(diào)用Verilog HDLVerilog HDL提供的元件;提供的元件;v 注注2 2:元件例化包括:元件例化包括門門元件例化和元件例化和模塊模塊元件例化;元件例化;v 注注3 3:每個實例元件的名字必須每個實例元件的名字必須唯
20、一唯一!以避免與其!以避免與其它調(diào)用元件的實例相混淆。它調(diào)用元件的實例相混淆。v 注注4 4:例化元件名也可以省略!例化元件名也可以省略!163.2 Verilog HDL3.2 Verilog HDL基本結構基本結構(3 3)用用 “alwaysalways” 塊語句塊語句 always (posedge clk) / 每當時鐘上升沿到來時執(zhí)行一遍塊內(nèi)語句每當時鐘上升沿到來時執(zhí)行一遍塊內(nèi)語句 begin if(load) out = data; / 同步預置數(shù)據(jù)同步預置數(shù)據(jù) else out = data + 1 + cin; / 加加1計數(shù)計數(shù) end結構說明語句結構說明語句v注注1 1:
21、“alwaysalways” 塊語句塊語句常用于描述常用于描述時序時序邏輯,也邏輯,也可描述可描述組合組合邏輯。邏輯。v注注2 2:“alwaysalways” 塊塊可用多種手段來表達邏輯關系可用多種手段來表達邏輯關系,如用,如用if-elseif-else語句或語句或casecase語句。語句。v注注3 3: “alwaysalways” 塊語句與塊語句與assignassign語句是并發(fā)執(zhí)行語句是并發(fā)執(zhí)行的,的, assignassign語句一定要放在語句一定要放在“alwaysalways” 塊語句之外塊語句之外!173.2 Verilog HDL3.2 Verilog HDL基本結構基
22、本結構v Verilog Verilog HDLHDL模塊的模板(僅考慮用于邏輯綜合的部分)模塊的模板(僅考慮用于邏輯綜合的部分)module () ; output 輸出端口列表;輸出端口列表; input 輸入端口列表輸入端口列表; /(1)使用)使用assign語句定義邏輯功能語句定義邏輯功能 wire 結果信號名;結果信號名; assign = 表達式表達式 ; /(2)使用)使用always塊定義邏輯功能塊定義邏輯功能 always () begin /過程賦值語句過程賦值語句 /if語句語句 / case語句語句 / while,repeat,for循環(huán)語句循環(huán)語句 / task,
23、function調(diào)用調(diào)用 end183.2 Verilog HDL3.2 Verilog HDL基本結構基本結構/ (3)元件例化)元件例化 (); / 模塊元件例化模塊元件例化 (); / 門元件例化門元件例化endmodule例化元件名例化元件名也可以省略!也可以省略!193.2 Verilog HDL3.2 Verilog HDL基本結構基本結構四、關鍵字四、關鍵字 關鍵字關鍵字事先定義好的確認符,用來組織語言結構;事先定義好的確認符,用來組織語言結構;或者用于定義或者用于定義Verilog HDLVerilog HDL提供的門元件(如提供的門元件(如andand,notnot,oror
24、,bufbuf)。)。 用用小寫小寫字母定義!字母定義! 如如always,assign,begin,case,casex,else,end,for,function,if,input,output,repeat,table,time,while,wire 見見數(shù)字系統(tǒng)設計與數(shù)字系統(tǒng)設計與Verilog HDL P285附錄附錄A。用戶程序中的用戶程序中的變變量、節(jié)點等量、節(jié)點等名稱名稱不能與不能與關鍵字關鍵字同同名!名!203.2 Verilog HDL3.2 Verilog HDL基本結構基本結構Verilog HDL關鍵字關鍵字edgeelseendendcaseendfunctione
25、ndprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunction highz0highz1 ififnoneinitialinoutinputintegerjoinlargemacromodulemediummodulenandnegedgenor notnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldownpulluppull0pull1andalwaysassignbeginbufbufif0bufif1casecasexcasezc
26、mosdeassigndefaultdefparamdisable213.2 Verilog HDL3.2 Verilog HDL基本結構基本結構Verilog HDL關鍵字關鍵字(續(xù))(續(xù))tri0tri1 vectoredwaitwandweak0weak1whilewireworxnorxorrcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamstrengthstrong0 strong1supply0supply1tabletasktrantranif0
27、tranif1timetritriandtriortrireg223.2 Verilog HDL3.2 Verilog HDL基本結構基本結構五、標識符五、標識符 任何用任何用Verilog Verilog HDLHDL語言描述的語言描述的“東西東西”都通過其名字來識別,都通過其名字來識別,這個名字被稱為這個名字被稱為標識符標識符。 如源文件名、模塊名、端口名、變量名、常量名、實例名等。如源文件名、模塊名、端口名、變量名、常量名、實例名等。 標識符可由字母、數(shù)字、下劃線和標識符可由字母、數(shù)字、下劃線和$ $符號構成;符號構成;但第一個字符但第一個字符必須是字母或下劃線,不能是數(shù)字或必須是字母或
28、下劃線,不能是數(shù)字或$ $符號符號! 在在Verilog Verilog HDLHDL中變量名是區(qū)分大小寫的!中變量名是區(qū)分大小寫的! 合法合法的名字:的名字:A_99_ZReset_54MHz_Clock$Module 不合法不合法的名字:的名字:123a$datamodule7seg.v標識符標識符不能與不能與關鍵字關鍵字同名!同名!233.2 Verilog HDL3.2 Verilog HDL基本結構基本結構六、編寫六、編寫Verilog HDLVerilog HDL源代碼的標準源代碼的標準 編寫編寫Verilog HDLVerilog HDL源代碼的標準源代碼的標準分為兩類:分為兩類
29、:(1 1)語匯語匯代碼的編寫標準代碼的編寫標準 規(guī)定了文本布局、命名和注釋的約定,以提高源代碼的規(guī)定了文本布局、命名和注釋的約定,以提高源代碼的可讀性可讀性和和可維護性可維護性。(2 2)綜合綜合代碼的編寫標準代碼的編寫標準 規(guī)定了規(guī)定了VerilogVerilog風格,盡量保證能夠風格,盡量保證能夠綜合綜合,以避免常見的不能綜合,以避免常見的不能綜合及綜合結果存在缺陷的問題,并在設計流程中及時發(fā)現(xiàn)綜合中存在的及綜合結果存在缺陷的問題,并在設計流程中及時發(fā)現(xiàn)綜合中存在的錯誤。錯誤。v綜合綜合:將用:將用HDLHDL語言或圖形方式描述的電路設計轉(zhuǎn)換為語言或圖形方式描述的電路設計轉(zhuǎn)換為實際門級電
30、路(如觸發(fā)器、邏輯門等),得到一個網(wǎng)表實際門級電路(如觸發(fā)器、邏輯門等),得到一個網(wǎng)表文件,用于進行適配(在實際器件中進行布局和布線)文件,用于進行適配(在實際器件中進行布局和布線)。243.2 Verilog HDL3.2 Verilog HDL基本結構基本結構(1 1)每個每個Verilog HDLVerilog HDL源文件中只準編寫一個頂層模塊,源文件中只準編寫一個頂層模塊,也不能把一個頂層模塊分成幾部分寫在幾個源文件中也不能把一個頂層模塊分成幾部分寫在幾個源文件中。(2 2)源文件名字應與文件內(nèi)容有關,源文件名字應與文件內(nèi)容有關,最好與頂層模塊同名最好與頂層模塊同名!源文件名字的第一
31、個字符必須是字母或下劃線,!源文件名字的第一個字符必須是字母或下劃線,不能不能是數(shù)字或是數(shù)字或$ $符號符號?。? 3)每行只寫一個聲明語句或說明。每行只寫一個聲明語句或說明。(4 4)源代碼用源代碼用層層縮進層層縮進的格式來寫。的格式來寫。1 1 語匯代碼的編寫標準語匯代碼的編寫標準253.2 Verilog HDL3.2 Verilog HDL基本結構基本結構(5 5)定義變量名的大小寫應自始至終保持一致(如變量名第一定義變量名的大小寫應自始至終保持一致(如變量名第一個字母均大寫)。個字母均大寫)。(6 6)變量名應該有意義,而且含有一定的有關信息。局部變量變量名應該有意義,而且含有一定的
32、有關信息。局部變量名(如循環(huán)變量)應簡單扼要。名(如循環(huán)變量)應簡單扼要。(7 7)通過注釋對源代碼做必要的說明,尤其對通過注釋對源代碼做必要的說明,尤其對接口接口(如模塊參(如模塊參數(shù)、端口、任務、函數(shù)變量)做必要的數(shù)、端口、任務、函數(shù)變量)做必要的注釋注釋很重要。很重要。(8 8)常量盡可能多地使用常量盡可能多地使用參數(shù)定義參數(shù)定義和和宏定義宏定義,而不要在語句中,而不要在語句中直接使用字母、數(shù)字和字符串。直接使用字母、數(shù)字和字符串。參數(shù)定義(用一個標識符來代表一個常量)的格式:參數(shù)定義(用一個標識符來代表一個常量)的格式: parameterparameter 參數(shù)名參數(shù)名1=1=表達式
33、,參數(shù)名表達式,參數(shù)名2=2=表達式,表達式,;宏定義(用一個簡單的宏名來代替一個復雜的表達式)的格式:宏定義(用一個簡單的宏名來代替一個復雜的表達式)的格式: definedefine 標志符(即宏名)字符串(即宏內(nèi)容)標志符(即宏名)字符串(即宏內(nèi)容)1 1 語匯代碼的編寫標準(續(xù))語匯代碼的編寫標準(續(xù))263.2 Verilog HDL3.2 Verilog HDL基本結構基本結構(1 1)把設計分割成較小的功能塊,每塊用行為風格設計。除設計中對速把設計分割成較小的功能塊,每塊用行為風格設計。除設計中對速度響應要求比較臨界的部分外,都應度響應要求比較臨界的部分外,都應避免門級描述避免門
34、級描述。(2 2)建立一個好的建立一個好的時鐘策略時鐘策略(如單時鐘、多相位時鐘,經(jīng)過門產(chǎn)生的時(如單時鐘、多相位時鐘,經(jīng)過門產(chǎn)生的時鐘、多時鐘域等)。保證源代碼中時鐘和復位信號是干凈的(即不是鐘、多時鐘域等)。保證源代碼中時鐘和復位信號是干凈的(即不是由組合邏輯或沒有考慮到的門產(chǎn)生的)。由組合邏輯或沒有考慮到的門產(chǎn)生的)。(3 3)建立一個好的建立一個好的測試策略測試策略,使所有觸發(fā)器都是可復位的,使測試能通,使所有觸發(fā)器都是可復位的,使測試能通過外部管腳進行,又沒有冗余的功能。過外部管腳進行,又沒有冗余的功能。(4 4)所有源代碼都必須遵守并符合在所有源代碼都必須遵守并符合在alwaysa
35、lways塊語句的塊語句的4 4種可綜合標準模板種可綜合標準模板之一之一。(5 5)描述組合和鎖存邏輯的描述組合和鎖存邏輯的alwaysalways塊,必須在塊,必須在alwaysalways塊開頭的控制事件塊開頭的控制事件列表中列出列表中列出所有所有的的輸入輸入信號。信號。2 2 綜合代碼的編寫標準綜合代碼的編寫標準273.2 Verilog HDL3.2 Verilog HDL基本結構基本結構(6 6)描述組合邏輯的描述組合邏輯的alwaysalways塊,一定塊,一定不能有不完全賦值不能有不完全賦值,即所有輸出變,即所有輸出變量必須被各輸入值的組合值賦值,不能有例外。量必須被各輸入值的組
36、合值賦值,不能有例外。(7 7)描述組合和鎖存邏輯的描述組合和鎖存邏輯的always塊塊一定不能包含反饋一定不能包含反饋,即在,即在always塊塊中已被定義為輸出的寄存器變量絕對不能再在該中已被定義為輸出的寄存器變量絕對不能再在該always塊中讀進來作塊中讀進來作為輸入信號。為輸入信號。(8 8)時鐘沿觸發(fā)的時鐘沿觸發(fā)的always塊必須是塊必須是單時鐘單時鐘的,且任何異步控制輸入(通的,且任何異步控制輸入(通常是復位或置位信號)必須在控制事件列表中列出。常是復位或置位信號)必須在控制事件列表中列出。 例例:always (posedge clk or negedge set or neg
37、edge reset)(9 9)避免生成不想要的鎖存器避免生成不想要的鎖存器。在無時鐘的。在無時鐘的always塊中,若有的輸出變塊中,若有的輸出變量被賦了某個信號變量值,而該信號變量并未在該量被賦了某個信號變量值,而該信號變量并未在該always塊的電平敏塊的電平敏感控制事件中列出,則會在綜合中生成不想要的鎖存器。感控制事件中列出,則會在綜合中生成不想要的鎖存器。2 2 綜合代碼的編寫標準(續(xù)綜合代碼的編寫標準(續(xù)1 1)283.2 Verilog HDL3.2 Verilog HDL基本結構基本結構(1010)避免生成不想要的觸發(fā)器避免生成不想要的觸發(fā)器。在時鐘沿觸發(fā)的在時鐘沿觸發(fā)的alw
38、aysalways塊中,如果用非阻塞賦值語句對塊中,如果用非阻塞賦值語句對regreg型變量賦值;或者當型變量賦值;或者當regreg型變量經(jīng)過多次循環(huán)其值仍保持不型變量經(jīng)過多次循環(huán)其值仍保持不變,則會在綜合中生成觸發(fā)器。變,則會在綜合中生成觸發(fā)器。用用regreg型變量生成型變量生成觸發(fā)器觸發(fā)器舉舉例例: module rw2( clk, d, out1); input clk, d; output out1; reg out1; always (posedge clk) /沿沿觸發(fā)觸發(fā) out1 = d ; endmodule2 2 綜合代碼的編寫標準(續(xù)綜合代碼的編寫標準(續(xù)2 2)非阻
39、塞賦值語句dclkout1D QDFF293.2 Verilog HDL3.2 Verilog HDL基本結構基本結構若不想生成觸發(fā)器,而是希望用若不想生成觸發(fā)器,而是希望用regreg型變量生成組合邏型變量生成組合邏輯,則應使用輯,則應使用電平電平觸發(fā)觸發(fā): module rw2( clk, d, out1); input clk, d; output out1; reg out1; always (d) /電平電平觸發(fā)觸發(fā) out1 = d ; endmodule2 2 綜合代碼的編寫標準(續(xù)綜合代碼的編寫標準(續(xù)3 3)dout1BUFF303.2 Verilog HDL3.2 Veri
40、log HDL基本結構基本結構(1111)所有內(nèi)部狀態(tài)寄存器必須是可復位的,這是為了使所有內(nèi)部狀態(tài)寄存器必須是可復位的,這是為了使RTLRTL級和門級描述級和門級描述能夠被復位成同一個已知的狀態(tài),以便進行門級邏輯驗證。能夠被復位成同一個已知的狀態(tài),以便進行門級邏輯驗證。(1212)對存在無效狀態(tài)的有限狀態(tài)機和其他時序電路(如對存在無效狀態(tài)的有限狀態(tài)機和其他時序電路(如4 4位十進制計數(shù)器位十進制計數(shù)器有有6 6個無效狀態(tài)),必須明確描述所有的個無效狀態(tài)),必須明確描述所有的2 2的的N N次冪種狀態(tài)下的行為(包次冪種狀態(tài)下的行為(包括無效狀態(tài)),才能綜合出安全可靠的狀態(tài)機。括無效狀態(tài)),才能綜
41、合出安全可靠的狀態(tài)機。(1313)一般地,一般地,在賦值語句中不能使用延遲在賦值語句中不能使用延遲,否則是不可綜合的。,否則是不可綜合的。(1414)不要使用不要使用integerinteger型和型和timetime型寄存器型寄存器,否則將分別綜合成,否則將分別綜合成3232位和位和6464位位的總線。的總線。(1515)仔細檢查代碼中使用動態(tài)指針(如用指針或地址變量檢索的位選擇仔細檢查代碼中使用動態(tài)指針(如用指針或地址變量檢索的位選擇或存儲單元)、循環(huán)聲明或算術運算部分,因為這類代碼在綜合后會生或存儲單元)、循環(huán)聲明或算術運算部分,因為這類代碼在綜合后會生成大量的門,且難以優(yōu)化。成大量的門
42、,且難以優(yōu)化。2 2 綜合代碼的編寫標準(續(xù)綜合代碼的編寫標準(續(xù)4 4)313.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量一、數(shù)據(jù)類型一、數(shù)據(jù)類型二、常量二、常量三、變量三、變量 323.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量一、數(shù)據(jù)類型一、數(shù)據(jù)類型 數(shù)據(jù)類型是用來表示數(shù)字電路中的數(shù)據(jù)存儲和傳送單元。數(shù)據(jù)類型是用來表示數(shù)字電路中的數(shù)據(jù)存儲和傳送單元。 Verilog Verilog HDLHDL中共有中共有19種數(shù)據(jù)類型;種數(shù)據(jù)類型; 其中其中4個最基本的數(shù)據(jù)類型為:個最基本的數(shù)據(jù)類型為:integer型parameter型reg型wire型 其 它 數(shù) 據(jù) 類 型
43、:其 它 數(shù) 據(jù) 類 型 :large型、medium型、 scalared型、 small型、time型、tri型、tri0型、tri1型、triand型、trior型、trireg型、vectored型、wand型、wor型等二、常量二、常量 在程序運行過程中,其值不能被改變的量,稱為在程序運行過程中,其值不能被改變的量,稱為常量常量。數(shù)字數(shù)字(包括整數(shù),x和z值,負數(shù))parameterparameter常量常量(或稱符號常量)333.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量整常數(shù)的整常數(shù)的3種表達方式:種表達方式:表表 達達 方方 式式說說 明明 舉舉 例例 完整的表達方式
44、8b11000101或8 hc5 缺省位寬,則位寬由機器系統(tǒng)決定,至少32位hc5 缺省進制為十進制,位寬默認為32位197(1 1)整數(shù)型常量整數(shù)型常量(即(即整常數(shù)整常數(shù))的)的4 4種進制表示形式:種進制表示形式:二進制整數(shù)(b或B);十進制整數(shù)(d或D);十六進制整數(shù)(h或H);八進制整數(shù)(o或O)。v注:注:這里位寬指對應二進制數(shù)的寬度。這里位寬指對應二進制數(shù)的寬度。343.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量(2 2)x x和和z z值值x x表示不定值,表示不定值,z z表示高阻值;表示高阻值;8b1001xxxx或8 h9x8b1010zzzz或8 haz每個字
45、符代表的二進制數(shù)的寬度取決于所用的進制;每個字符代表的二進制數(shù)的寬度取決于所用的進制;當用二進制表示時,已標明位寬的數(shù)若用當用二進制表示時,已標明位寬的數(shù)若用x x或或z z表示某些位,則只有在表示某些位,則只有在最左邊最左邊的的x x或或z z具有具有擴展性擴展性!為清晰可見,最好直接寫出每一位的值!為清晰可見,最好直接寫出每一位的值! 例8bzx = 8bzzzz_zzzx 例8b1x = 8b0000_001x“?”是是z z的另一種表示符號,建議在的另一種表示符號,建議在casecase語句中使用語句中使用?表示高阻態(tài)表示高阻態(tài)z 例 casez (select) 4b?1: out
46、= a; 4b?1?: out = b; 4b?1?: out = c; 4b1?: out = d; endcase353.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量(3 3)負數(shù)負數(shù)在位寬前加一個減號,即表示負數(shù)在位寬前加一個減號,即表示負數(shù)如:如:-8-8d5 /5的補數(shù),的補數(shù),= 8b11111011減號不能放在位寬與進制之間,也不能放在進制減號不能放在位寬與進制之間,也不能放在進制與數(shù)字之間!與數(shù)字之間!8 d-5 /非法格式非法格式v 為提高可讀性,在較長的數(shù)字之間可用下劃線為提高可讀性,在較長的數(shù)字之間可用下劃線_ _隔開!但隔開!但不可以用在不可以用在和和之間。之間
47、。 如:如:1616b1010_1011_1100_1111 /b1010_1011_1100_1111 /合法合法 8 8b b_ _0011_1010 /0011_1010 /非法非法v當常量未指明位寬時,默認為當常量未指明位寬時,默認為3232位。位。10 = 3210 = 32d10 = 32d10 = 32b1010b1010-1 = -32-1 = -32d1 = 32d1 = 32b1111b11111111 = 321111 = 32hFFFFFFFFhFFFFFFFF363.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量(4 4)parameterparameter常量
48、(符號常量)常量(符號常量)用用parameterparameter來定義一個標識符,代表一個常量來定義一個標識符,代表一個常量稱為稱為符號符號常量。常量。參數(shù)型數(shù)據(jù)的確認符parameterparameter 參數(shù)名參數(shù)名1 = 1 = 表達式表達式, ,參數(shù)名參數(shù)名2 = 2 = 表達式表達式, , ;每個賦值語句的右邊必須為常數(shù)表達式,即只能包含數(shù)字或先前定義過的符號常量! parameter addrwidth = 16; /合法格式 parameter addrwidth = datawidth*2; /非法格式常用參數(shù)來定義延遲時間和變量寬度??捎米址硎镜娜魏蔚胤?都可以用定義
49、的參數(shù)來代替。參數(shù)是本地的,其定義只在本模塊內(nèi)有效。在模塊或?qū)嵗脮r,可通過參數(shù)傳遞改變在被引用模塊或?qū)嵗幸讯x的參數(shù)!賦值語句表373.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量模塊實例引用時參數(shù)的傳遞模塊實例引用時參數(shù)的傳遞方法之一方法之一:利用利用defparamdefparam定義參數(shù)聲明語句!定義參數(shù)聲明語句!defparam 例化模塊名例化模塊名.參數(shù)名參數(shù)名1 = 常數(shù)常數(shù)表達式表達式, 例化模塊名例化模塊名.參數(shù)名參數(shù)名2 = 常數(shù)常數(shù)表達式表達式, ; defparamdefparam語句在編譯時可重新定義參數(shù)值。語句在編譯時可重新定義參數(shù)值。 可綜合性問題:一
50、般情況下是不可綜合的??删C合性問題:一般情況下是不可綜合的。 提示:不要使用提示:不要使用defparamdefparam語句!在模塊的實例引用語句!在模塊的實例引用時可用時可用“# #”號后跟參數(shù)的語法來重新定義參數(shù)。號后跟參數(shù)的語法來重新定義參數(shù)。38 例例 module mod ( out, ina, inb); parameter cycle = 8, real_constant = 2.039, file = “/user1/jmdong/design/mem_file.dat”; endmodulemodule test; mod mk(out,ina,inb); / 對模塊對模塊
51、modmod的實例引用的實例引用 defparam mk.cycle = 6, mk.file = “./my_mem.dat”; / 參數(shù)的傳遞參數(shù)的傳遞 endmodule3.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量被引用模塊參數(shù)名參數(shù)名例化模塊名例化模塊名39 例例 module mod ( out, ina, inb); parameter cycle = 8, real_constant = 2.039, file = “/user1/jmdong/design/mem_file.dat”; endmodulemodule test; mod # (5, 3.20, “.
52、/my_mem.dat”) mk(out,ina,inb); / 對模塊對模塊modmod的實例引用的實例引用 endmodule3.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量模塊實例引用時參數(shù)的傳遞模塊實例引用時參數(shù)的傳遞方法之二方法之二:利用特殊符號:利用特殊符號“#” 被引用模塊參數(shù)的傳遞參數(shù)的傳遞必須與被引用模塊中的參數(shù)一一對應!必須與被引用模塊中的參數(shù)一一對應!建議用此建議用此方法!方法!被引用模塊名被引用模塊名 # # (參數(shù)參數(shù)1,參數(shù)參數(shù)2,)例化模塊名(端口列表)例化模塊名(端口列表);403.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量三、變量三、變量 在
53、程序運行過程中,其值可以改變的量,稱為在程序運行過程中,其值可以改變的量,稱為變量變量。 其數(shù)據(jù)類型有其數(shù)據(jù)類型有1919種,常用的有種,常用的有3 3種:種:網(wǎng)絡型(nets type)寄存器型(register type )數(shù)組(memory type)1. nets1. nets型變量型變量 定義定義輸出始終隨輸入的變化而變化的變量輸出始終隨輸入的變化而變化的變量。 表示結構實體(如門)之間的表示結構實體(如門)之間的物理物理連接。連接。常用常用netsnets型變量:型變量:wire,tri:連線類型(兩者功能一致)wor,trior:具有線或特性的連線(兩者功能一致)wand,tri
54、and:具有線與特性的連線(兩者功能一致)tri1,tri0:上拉電阻和下拉電阻supply1,supply0:電源(邏輯1)和地(邏輯0)netsnets型變量型變量不能儲存值!不能儲存值!413.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量 wire型變量型變量最常用的nets型變量,常用來表示以assign語句賦值的組合邏輯信號。模塊中的輸入/輸出信號類型缺省為wire型??捎米鋈魏畏匠淌降妮斎?,或“assign”語句和實例元件的輸出。wirewire 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, 2, , ,數(shù)據(jù)名數(shù)據(jù)名n;n;wiren-1:0wiren-1:0 數(shù)據(jù)名數(shù)據(jù)名1,1,
55、數(shù)據(jù)名數(shù)據(jù)名2, 2, , ,數(shù)據(jù)名數(shù)據(jù)名m;m;或或 wiren:1wiren:1 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, 2, , ,數(shù)據(jù)名數(shù)據(jù)名m;m;每條總線位寬為n共有m條總線wirewire型向量(總線)型向量(總線)423.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量 定義定義對應對應具有狀態(tài)保持作用具有狀態(tài)保持作用的電路元件(如觸發(fā)器、的電路元件(如觸發(fā)器、寄存器等)寄存器等), ,常用來表示常用來表示過程塊過程塊語句(如語句(如initialinitial,alwaysalways,tasktask,functionfunction)內(nèi)的指定信號)內(nèi)的指定信號 。 常用
56、常用registerregister型變量:型變量:reg:常代表觸發(fā)器integer:32位帶符號整數(shù)型變量real:64位帶符號實數(shù)型變量time:無符號時間變量純數(shù)學的純數(shù)學的抽象描述抽象描述2. register2. register型變量型變量433.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量vregisterregister型變量與型變量與netsnets型變量的根本區(qū)別是:型變量的根本區(qū)別是: registerregister型型變量需要被明確地賦值,并且在被重新賦值前一直保持變量需要被明確地賦值,并且在被重新賦值前一直保持原值。原值。vregisterregister
57、型變量必須通過型變量必須通過過程過程賦值語句賦值!不能通過賦值語句賦值!不能通過assignassign語句賦值!語句賦值!v在過程塊內(nèi)被賦值的每個信號必須定義成在過程塊內(nèi)被賦值的每個信號必須定義成registerregister型!型!443.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量 reg型變量型變量定義定義在過程塊中被賦值的信號在過程塊中被賦值的信號,往往往往代表觸發(fā)器,代表觸發(fā)器,但但不一定不一定就是觸發(fā)器(也可以是組合邏輯信號)!就是觸發(fā)器(也可以是組合邏輯信號)!regreg 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, 2, , ,數(shù)據(jù)名數(shù)據(jù)名n;n;regn-1:0regn
58、-1:0 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, 2, , ,數(shù)據(jù)名數(shù)據(jù)名m;m;或或 regn:1regn:1 數(shù)據(jù)名數(shù)據(jù)名1,1,數(shù)據(jù)名數(shù)據(jù)名2, 2, , ,數(shù)據(jù)名數(shù)據(jù)名m;m;每個向量位寬為n共有m個reg型向量 例例 reg4:1 regc,regd; / reg4:1 regc,regd; / /regc,regdregc,regd為為4 4位寬的位寬的regreg型向量型向量regreg型向量(總線)型向量(總線)453.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量用用regreg型變量生成型變量生成組合邏輯組合邏輯舉舉例例:module rw1( a, b, out1,
59、out2 ) ; input a, b; output out1, out2; reg out1; wire out2; assign out2 = a ; always (b) out1 = b;endmoduleaout2BUFFbINVout1過程賦值語句連續(xù)賦值語句電平電平觸發(fā)Verilog中中reg與與wire的區(qū)別的區(qū)別regreg型變量既可生成觸發(fā)器,型變量既可生成觸發(fā)器,也可生成組合邏輯;也可生成組合邏輯; wirewire型變量只能生成組合邏輯。型變量只能生成組合邏輯。463.3 3.3 數(shù)據(jù)類型及常量、變量數(shù)據(jù)類型及常量、變量用用regreg型變量生成型變量生成觸發(fā)器觸發(fā)器
60、舉舉例例:module rw2( clk, d, out1, out2 ); input clk, d; output out1, out2; reg out1; wire out2; assign out2 = d & out1 ; always (posedge clk) begin out1 b)&(bc) 可簡寫為: ab & bc (a= =b)|(x= = y)可簡寫為: a= =b|x= = y (!a)|(ab)可簡寫為: !a|ab為提高程序的可讀性,明確表達各運算符之間為提高程序的可讀性,明確表達各運算符之間的優(yōu)先關系,建議使用的優(yōu)先關系,建議使用括號括號!563.4 3.4 運算符及表達式運算符及表達式三、位運算符三、位運算符位運算符位運算符說明說明 &|,按位取反按位與按位
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中考語文一輪復習:小說中的環(huán)境描寫知識點及訓練
- 2025年中考語文一輪復習:古詩詞閱讀重點考點解讀 講義
- 廣東省廣州市藝術中學2024-2025學年高一上學期期末考試數(shù)學試卷(解析版)
- 屏蔽機房施工方案模板
- 基礎分部工程施工方案
- 室外大棚導線施工方案
- 2025年葡語語音考試題及答案
- 6個月寶寶早教兒歌
- 低分子量聚丙烯酸對卡波姆樹脂的影響
- 4年級下冊人教版要寫的字第三課
- 大班健康《愛是什么》課件
- 特種作業(yè)(鍋爐工)安全培訓
- 鋼梁現(xiàn)場安裝檢驗批質(zhì)量檢驗記錄
- 學歷(學位)更改呈報審批表
- 生產(chǎn)建設項目土壤流失量測算導則計算程序
- GB/T 28621-2023安裝于現(xiàn)有建筑物中的新電梯制造與安裝安全規(guī)范
- 煤矸石填溝造地項目實施方案
- 大課間跑操評分表
- 營養(yǎng)健康餐廳(食堂)申請表
- 《義務教育數(shù)學課程標準(2022年版)》解讀
- 國防科技大學宣講ppt
評論
0/150
提交評論