Verilog 數(shù)字系統(tǒng)設(shè)計(jì)完整全套教學(xué)課件_第1頁
Verilog 數(shù)字系統(tǒng)設(shè)計(jì)完整全套教學(xué)課件_第2頁
Verilog 數(shù)字系統(tǒng)設(shè)計(jì)完整全套教學(xué)課件_第3頁
Verilog 數(shù)字系統(tǒng)設(shè)計(jì)完整全套教學(xué)課件_第4頁
Verilog 數(shù)字系統(tǒng)設(shè)計(jì)完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩464頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 Verilog 數(shù)字系統(tǒng)設(shè)計(jì)12第一部分 Verilog HDL入門 1.1 數(shù)字電子系統(tǒng)CAD技術(shù)的發(fā)展三個階段:(1)20世紀(jì)60年代80年代初期 CAD (Computer Aided Design)階段 (2)20世紀(jì)80年代初期90年代初期 CAE(Computer Aided Engineering)階段(3)20世紀(jì)90年代以來 EDA(Electronic Design Automation )階段 3第1章Verilog復(fù)雜數(shù)字設(shè)計(jì)綜述數(shù)字系統(tǒng)EDA技術(shù)就是以計(jì)算機(jī)為工具,設(shè)計(jì)者在EDA軟件平臺上,用硬件描述語言(Hardware Description Language

2、)完成設(shè)計(jì)文件,然后由計(jì)算機(jī)自動地完成邏輯編譯、化簡、分割、綜合、優(yōu)化、布局、布線和仿真,直至對于特定目標(biāo)芯片的適配編譯、邏輯映射和編程下載等工作。EDA技術(shù)的出現(xiàn),提高了電路設(shè)計(jì)效率和可行性,減輕了設(shè)計(jì)者勞動強(qiáng)度。20世紀(jì)90年代以來,在設(shè)計(jì)方法、工具等方面進(jìn)行了徹底的變革,取得了巨大成功。可編程邏輯器件(如CPLD、FPGA)的應(yīng)用已得到普及。這些器件可以通過軟件編程而對其硬件結(jié)構(gòu)和工作方式進(jìn)行重構(gòu),從而使得硬件的設(shè)計(jì)可以如同軟件設(shè)計(jì)那樣方便快捷。41.2 硬件描述語言Verilog HDL 1.2.1 什么是Verilog HDL Verilog HDL 是硬件描述語言的一種,它是目前應(yīng)

3、用最廣泛的硬件描述語言之一,用于數(shù)字系統(tǒng)的設(shè)計(jì)。設(shè)計(jì)者用它進(jìn)行數(shù)字邏輯系統(tǒng)的仿真模擬、時序分析、邏輯綜合。 51.2.2 Verilog HDL的發(fā)展歷史61989Cadence 公司購買 Verilog HDL的版權(quán)1990Verilog HDL 公開發(fā)表1980s Verilog-XL 誕生1990有關(guān)Verilog HDL的全部權(quán)利都移交給OVI(Open Verilog International)組織1995Verilog IEEE1364標(biāo)準(zhǔn)公開發(fā)表1999模擬和數(shù)字都適用的 Verilog 標(biāo)準(zhǔn)公開發(fā)表2001Verilog IEEE1364-2001標(biāo)準(zhǔn)公開發(fā)表Verilog

4、IEEE1364-20051.2.3 Verilog HDL的優(yōu)點(diǎn) Verilog HDL是一種通用的硬件描述語言,易學(xué)易用。具有C語言編程經(jīng)驗(yàn)的設(shè)計(jì)者很容易學(xué)習(xí)和掌握。 Verilog HDL允許在同一個電路模型內(nèi)進(jìn)行不同抽象層次的描述。設(shè)計(jì)者可以從開關(guān)、門級、RTL和行為等各個層次對電路模型進(jìn)行定義。 Verilog HDL是在全球最大的EDA供應(yīng)商Cadence公司的扶持下針對EDA工具開發(fā)的HDL語言。絕大多數(shù)流行的綜合工具都支持Verilog HDL,這是Verilog HDL成為設(shè)計(jì)者的首選語言的重要原因之一。 Verilog HDL的編程風(fēng)格簡潔明了,高效便捷。 所有的制造廠商提

5、供用于Verilog HDL綜合之后的邏輯仿真的元件庫,使用Verilog HDL進(jìn)行設(shè)計(jì),即可在更廣泛的范圍內(nèi)選擇委托制造的廠商。在ASIC設(shè)計(jì)領(lǐng)域,Verilog HDL占有明顯的優(yōu)勢 781.3復(fù)雜數(shù)字系統(tǒng)的設(shè)計(jì)方法1.3.1 復(fù)雜數(shù)字邏輯系統(tǒng)嵌入式微處理機(jī)系統(tǒng)數(shù)字信號處理系統(tǒng)高速并行計(jì)算邏輯 高速通信協(xié)議電路高速編碼/解碼、加密/解密電路復(fù)雜的多功能智能接口門邏輯總數(shù)超過幾萬門達(dá)到幾百甚至達(dá)幾千萬門的數(shù)字系統(tǒng)1.3.2 傳統(tǒng)的設(shè)計(jì)方法查用器件手冊;選用合適的微處理器和電路芯片;設(shè)計(jì)面包板和線路板;調(diào)試;定型;9設(shè)計(jì)復(fù)雜的數(shù)字系統(tǒng)(幾十萬門以上)極其困難!1.3.3 Verilog HD

6、L設(shè)計(jì)法 選用合適的 EDA仿真工具; 選用合適電路圖輸入和HDL編輯工具; 逐個編寫可綜合HDL模塊; 逐個編寫HDL測試模塊; 逐個做 HDL 電路邏輯訪真; 編寫 HDL總測試模塊; 做系統(tǒng)電路邏輯總仿真; 選用合適的基本邏輯元件庫和宏庫 租用或購買必要的IP核; 選用合適的綜合器; 進(jìn)行綜合得到門級電路結(jié)構(gòu); 布局布線,得到時延文件; 后仿真; 定型, FPGA編碼或ASIC投片10 采用Verilog HDL輸入法時,由于Verilog HDL的標(biāo)準(zhǔn)化,可以很容易把完成的設(shè)計(jì)進(jìn)行移植到不同廠家的不同芯片。采用Verilog HDL輸入法最大的優(yōu)點(diǎn)是其與工藝無關(guān)性。 111.3.4 軟

7、核、固核和硬核軟核(Soft Core):經(jīng)過驗(yàn)證的、可綜合的、實(shí)現(xiàn)后門數(shù)在5000門以上的HDL模型固核(Firm Core):在某FPGA器件上實(shí)現(xiàn)的、經(jīng)過驗(yàn)證、5000門以上的電路結(jié)構(gòu)編碼文件硬核(Hard Core):以某種工藝實(shí)現(xiàn)的、經(jīng)過驗(yàn)證、5000門以上的電路結(jié)構(gòu)版圖掩膜121.4 典型設(shè)計(jì)流程 13系統(tǒng)級設(shè)計(jì)模塊A模塊B模塊C模塊A1模塊A2模塊A3模塊B1模塊B2模塊B3模塊C1模塊C2Top-Down自頂向下的設(shè)計(jì)概念 用EDA設(shè)計(jì)數(shù)字系統(tǒng)的典型流程14電路圖設(shè)計(jì)HDL設(shè)計(jì)電路功能仿真HDL功能仿真邏輯綜合、時序驗(yàn)證優(yōu)化、布局布線布線后門級仿真工藝文件電路制造版圖或FPGA

8、 碼流文件設(shè)計(jì)要求實(shí)現(xiàn)1.5 硬件描述語言的發(fā)展趨勢 當(dāng)前集成電路的設(shè)計(jì)面臨一些問題,如設(shè)計(jì)重用、知識產(chǎn)權(quán)和內(nèi)核插入;高層次綜合和混合模型的總和;驗(yàn)證包括仿真驗(yàn)證和形式驗(yàn)證等自動驗(yàn)證手段;深亞微米效應(yīng);等等。這些問題給EDA技術(shù)的發(fā)展提出了新的要求,因此硬件描述語言的改進(jìn)和發(fā)展非常必要。 15161.6 設(shè)計(jì)資源 設(shè)計(jì)工具CadenceSynopsysMentor Graphics ModelSimSynplicitySynplifyXILINXISEAlteraQuartus 華大ZeniFPGA芯片廠商XilinxAlteraLatticeEDA網(wǎng)站參考書:Verilog HDL數(shù)字設(shè)計(jì)與

9、綜合,電子工業(yè)出版社數(shù)字系統(tǒng)的Verilog HDL設(shè)計(jì),機(jī)械工業(yè)出版社(江國強(qiáng))CPU芯片邏輯設(shè)計(jì)技術(shù)M.北京:清華大學(xué)出版社(朱子玉,李亞民)數(shù)字信號處理的FPGA實(shí)現(xiàn) ,清華大學(xué)出版社夏宇聞 清華 Verilog HDL數(shù)字系統(tǒng)設(shè)計(jì)17第2章 Verilog的模塊182.1 概 述Verilog HDL既是一種行為描述語言,也是一種結(jié)構(gòu)描述語言。即:描述電路功能行為的模型或描述元器件或較大部件互連的模型均可以用Verilog HDL實(shí)現(xiàn)。1)系統(tǒng)級:用高級結(jié)構(gòu)實(shí)現(xiàn)外部性能的模型2)算法級:用高級結(jié)構(gòu)實(shí)現(xiàn)算法運(yùn)行的模型3)RTL級(Register Transfer Level ):描述數(shù)

10、據(jù)在寄存器之間的流動和如何處理、控制這些數(shù)據(jù)流動的模型4)門級:描述邏輯門及其互相之間連接的模型5)開關(guān)級:描述器件中三極管和存儲節(jié)點(diǎn)以及互相之間連接的模型19Verilog HDL能夠描述電路的5種抽象級別:20Verilog HDL特別適合算法級和RTL級的模型設(shè)計(jì)提供了一套完整的組合邏輯基本元件、雙向通路和電阻器件的原語可建立MOS器件的電荷分享和衰減動態(tài)模型Verilog HDL與C語言的風(fēng)格很類似 一個完整系統(tǒng)的Verilog HDL模型由若干個Verilog HDL模塊構(gòu)成,每個模塊又由若干個子模塊構(gòu)成21 Verilog模型(模塊) Verilog的基本設(shè)計(jì)單元 層次化的模型2.

11、2 Verilog的模塊22例2-1a 多路選擇器 2選1module muxtwo(out,a,b,sl); input a,b,sl; output out; reg out; always (sl or a or b) if(!sl) out=a; else out=b;endmodulesloutab例2-1b 多路選擇器4選1module mux4_to_1 (out, i0, i1, i2, i3, s1, s0);output out; input i0, i1, i2, i3,s1, s0; reg out; always (s1 or s0 or i0 or i1 or i2

12、 or i3) begin case (s1, s0) 2b00: out = i0; 2b01: out = i1; 2b10: out = i2; 2b11: out = i3; default: out = 1bx;endcase end endmodule 23s1outi0i1i3i2s0例2-2a 2選1module muxtwo(out,a,b,sl); input a,b,sl; output out; not u1(nsl,sl); and #1 u2(sela, a, nsl); and #1 u3(selb, b, sl); or #2 u4(out, sela, sel

13、b);endmodule24例2-2b 4選1多路選擇器module mux4_to_1 (out, i0, i1, i2, i3, s1, s0); output out; input i0, i1, i2, i3; input s1, s0; wire s1n, s0n; wire y0, y1, y2, y3; not not0(s1n, s1); not not1(s0n, s0); and and0(y0, i0, s1n, s0n); and and1(y1, i1, s1n, s0); and and2(y2, i2, s1, s0n); and and3(y3, i3, s1,

14、 s0); or or0(out, y0, y1, y2, y3); endmodule2526分析:例2-1a和例2-1 b模塊屬于行為描述,例2-2 a例2-1 b模塊屬于門級描述。通過綜合,行為描述的模塊可轉(zhuǎn)化為門級描述的模塊。例2-3 加法器module adder(count, sum, a, b, cin); input 2:0 a, b; input cin; output count; output 2:0 sum; assign count,sum=a+b+cin;endmodule說明:求a 、 b、 cin 的和sum,count為進(jìn)位。27例2-4 比較器module

15、compare(equal, a, b); input 1:0 a, b; output equal; assign equal =(a= =b)? 1:0;endmodule28例2-5 三態(tài)驅(qū)動器module trist2(out,in,enable ); output out; input in,enable; bufif1 mybuf(out,in,enable);endmodule29Bufif1是Verilog提供的門類型關(guān)鍵字之一(門類型關(guān)鍵字共26種)例2-6 三態(tài)驅(qū)動器module trist1(sout,sin,ena ); output sout; input sin,e

16、na; mytri tri_inst(.out(sout),.in(sin),.enable(ena);endmodulemodule mytri (out,in,enable ); output out; input in,enable; assign out=enable?in:bz;endmodule30實(shí)例調(diào)用31例2-7 測試include “muxtwo.v”module t; reg ain,bin,select; reg clock; wire outw;initial begin ain=0;bin=0;select=0;clock=0;endalways #50 clock

17、=clock;always(posedge clock) begin ain= $random%2; #3 bin= $random%2; endalways #10000 select=select;muxtwo m(.out(outw),.a(ain),.b(bin),.sl(select);endmodule作業(yè)1. 試畫出下列模塊的仿真波形圖(仿真時間0-2000):include “muxtwo.v”module t; reg ain,bin,select; reg clock; wire outw;initial begin ain=0;bin=0;select=0;clock=0

18、;endalways #50 clock=clock;always(posedge clock) begin ain=$random%2; #3 bin= $random%2; endalways #500 select=select;muxtwo m(.out(outw),.a(ain),.b(bin),.sl(select);endmodulemodule muxtwo(out,a,b,sl); input a,b,sl; output out; reg out; always (sl or a or b) if(!sl) out=a; else out=b;endmodule32模塊(b

19、lock)由兩部分組成: 端口定義(接口描述) 模塊內(nèi)容(邏輯功能描述)332.3 模塊的結(jié)構(gòu)例如:module block(a,b,c,d); input a,b; output c,d; assign c=a|b; assign d=a&b; endmoduleabcd2.3.1模塊的端口定義格式: module 模塊名(口1,口2, ) ;例: module mytri (out,in,enable ); output out; input in,enable; assign out=enable?in:bz;endmodule調(diào)用:mytri tri_inst(sout,sin,ena

20、); mytri tri_inst(.out(sout),enable(ena ),.in(sin);342.3.2 模塊的內(nèi)容:1.I/O說明例如:input k1,k2,in0; input 7:0 data; output 3:0 out; inout 15:0 db;2.內(nèi)部信號的說明例如:reg2:0 a; wire b, c, d ;353.功能定義(有3種方法實(shí)現(xiàn)邏輯功能)1)用assign聲明語句例:assign a=b+c; assign f=(x)?y:z;2)用實(shí)例元件 and #2 u1(q,a,b);3)用always塊36( Verilog共有19種數(shù)據(jù)類型,僅介紹

21、4種;量:常量、變量)3.1 常量數(shù)字:二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制;例:8b001100118h3316d486o1737第3章 Verilog的基礎(chǔ)知識進(jìn)制位寬數(shù)字38參數(shù)型(parameter)定義常量例如: parameter data_width=8, addr_width=16; parameter counter=8*1024;3.2變量391、 wire型wire型變量可以是任何方程式的輸入信號,也可以是assign語句或?qū)嵗妮敵?。對wire型變量的說明: wire a,b,c; wire 4:0 db;下表說明了wire型變量在多驅(qū)動情況時的結(jié)果表:40wire/t

22、ri01xz00 xx01x1x1xxxxxz01xz2、reg型寄存器數(shù)據(jù)類型通過賦值語句可以改變reg型變量的值。 reg型信號將用在always塊中。reg型信號通常是寄存器或觸發(fā)器的輸出,但并不一定是。例如:對reg型變量的說明: reg 7:0 data; reg q0,q1,q2,q3; reg 15:0 addr;41423、reg型的擴(kuò)展:memory型存儲器通過擴(kuò)展reg型變量的地址實(shí)現(xiàn)。 例如:對memory型變量的說明: reg 7:0 memp 1023:0; reg 7:0 memd 255:0;memory型不可綜合3.3運(yùn)算符和表達(dá)式1 、 基本的算術(shù)運(yùn)算符+(加

23、法運(yùn)算符,正)-(減法運(yùn)算符,負(fù))*(乘法運(yùn)算符)/ (除法運(yùn)算符)% (模運(yùn)算符)432 、位運(yùn)算符(按位取反,單目運(yùn)算符)&(按位與,雙目運(yùn)算符)| (按位或,雙目運(yùn)算符) (按位異或,雙目運(yùn)算符) (按位同或,雙目運(yùn)算符) 例如:a=4b0110; b=4b1100; c= a; d= a | b;443.4 邏輯運(yùn)算3.4.1邏輯運(yùn)算符(結(jié)果為真/假)&(邏輯與,雙目運(yùn)算符)| | (邏輯或,雙目運(yùn)算符)?。ㄟ壿嫹牵瑔文窟\(yùn)算符)453.4.2關(guān)系運(yùn)算符(結(jié)果為真/假)=463.4.3等式運(yùn)算符(結(jié)果為真/假)=(等于)!= (不等于) 只在操作數(shù)為0或1的時候結(jié)果確定。當(dāng)輸入為x、z時

24、結(jié)果不確定。= (等于,)!= (不等于) 輸入為x、z時,結(jié)果也確定473.4.4移位運(yùn)算符左移 n位: a n48(均以0補(bǔ)空)3.4.5位拼接運(yùn)算符信號1的某幾位,信號2的某幾位,信號n的某幾位,例如:a=b7:0,c15:8;493.4.6縮減運(yùn)算符所謂縮減運(yùn)算就是對單個操作數(shù)進(jìn)行“與、或、非”遞推運(yùn)算,使結(jié)果變成1位。例如:reg 3:0 b; reg c; c=&b;設(shè)b=4b0110, 則c=0.503.5 優(yōu)先級別51523.6關(guān)鍵詞IEEE Std 1364-2001 IEEE standard Verilog hardware description language53作

25、業(yè)P.38:3;5;6;9;1054第4章 賦值語句、塊語句和程序控制語句 4.1 賦值語句1、非阻塞賦值非阻塞賦值符:=例如:f=a;說明:塊結(jié)束后才完成賦值(因此f不是立即被賦值),在always塊描述的時序電路中應(yīng)使用非阻塞賦值。55例4-1always (posedge clk) begin b=a; c=b) q0=0; else begin q0=0; q1=1; end63例如: if(x=5) a=b; else if(x=3) a=c; else if(x=7) a=d;64If語句的嵌套:注意:else總是與前面最近的if配對例如:c=a+b, 補(bǔ)碼表示,判是否有溢出。 i

26、f(sign_a=0 & sign_b=0) if(sign_c=0) over_f=0; else over_f=1; else if(sign_a=1 & sign_b=1) if(sign_c=1) over_f=0; else over_f=1; else over_f=0; 654.4 case語句多分支選擇語句一般形式:case(表達(dá)式)endcasecasez(表達(dá)式)endcasecasex(表達(dá)式)endcase case表達(dá)式:語句; 默認(rèn)項(xiàng):語句;66例如:reg2:0 in; reg7:0 out; case(in) 3b000:out=8b11111110; 3b00

27、1:out=8b11111101; 3b010:out=8b11111011; 3b011:out=8b11110111; 3b100:out=8b11101111; 3b101:out=8b11011111; 3b110:out=8b10111111; 3b111:out=8b01111111; default:out=8bxxxxxxxx; endcase67說明:1)控制表達(dá)式的值等于分支表達(dá)式的值時,執(zhí)行分支表達(dá)式后面的語句。case判表達(dá)式與分支項(xiàng)是否嚴(yán)格相等casez忽略高阻,判表達(dá)式與分支項(xiàng)是否相等casex忽略高阻和不確定,判表達(dá)式與分支項(xiàng)是否相等2)如果控制表達(dá)式的值與分支表

28、達(dá)式的值都不相等時,則執(zhí)行default后面的語句。3)所有表達(dá)式的位寬必須相等。684.5 循環(huán)語句4.5.1 forever語句格式: forever 語句(或語句組);用于產(chǎn)生周期性波形,必須用在initial塊中。694.5.2 repeat語句(重復(fù)執(zhí)行,次數(shù)由表達(dá)式?jīng)Q定)格式: repeat(表達(dá)式) 語句(或語句組); 常量704.5.3 while語句格式: while(表達(dá)式) 語句(或語句組);功能:若表達(dá)式為真(或非0)則執(zhí)行“語句”;若表達(dá)式為假(或?yàn)?)就結(jié)束。714.5.4 for語句格式: for(表達(dá)式1;表達(dá)式2;表達(dá)式3) 語句(或語句組);循環(huán)變量初值 循

29、環(huán)條件 循環(huán)變量修改其中循環(huán)條件(教材中稱結(jié)束條件) : 表達(dá)式為真(或非0)則循環(huán)72例如:begin:init_mem reg7:0 tempi; for(tempi=0;tempi1) if(tempreg0 =1) count=count+1;end74第5章 結(jié)構(gòu)說明、任務(wù)與函數(shù) 我們將學(xué)習(xí)2種結(jié)構(gòu)說明語句:initialalways755.1 initial語句 格式: initial begin 語句1; 語句2; 語句n; end說明:在仿真開始時執(zhí)行一次。765.2 always語句 格式: always 說明:1) always語句在仿真時不斷重復(fù)執(zhí)行,而后面的語句是否執(zhí)行

30、取決于“時序控制”條件是否滿足。2)時序控制條件即觸發(fā)條件,包括邊沿觸發(fā)(posedge/negedge)、電平觸發(fā),單個或多個。3)一個模塊中可以有多個always 塊。7778回顧例2-1a 2選1module muxtwo(out,a,b,sl); input a,b,sl; output out; reg out; always (sl or a or b) if(!sl) out=a; else out=b;endmodulesloutab79例:8位數(shù)據(jù)寄存器module hardreg(d,clk,q); input clk; input7:0 d; output7:0 q; r

31、eg7:0 q; always (posedge clk) q=d; endmodule80例:8位具有清0端的數(shù)據(jù)寄存器module hardreg(d,clk,clrb,q); input clk,clrb; input7:0 d; output7:0 q; reg7:0 q; always (posedge clk or posedge clrb) begin if(clrb) q=8b00000000;/清0 else q=d; /置數(shù) endendmodule5.3 task把大的程序分解成比較小的程序;不同地方多次使用的相同程序段設(shè)計(jì)成task或function,能夠簡化程序。81

32、任務(wù)和函數(shù)說明語句作用:821)任務(wù)的定義: task ; endtask2)任務(wù)的調(diào)用: (端口1,端口2,,端口n);83 例如:module compare1(a,b,c,d,e,f);reg a,b,c,d,e,f;always (a or b or c) my_task(a,b,c,d,e,f);task my_task;/ input a,b,c ; output d,e,f; begin d=0;e=0;f=0; if(a=b) d=1; if(a=c) e=1; if(b=c) f=1; endendtaskendmodule 84 例5-1:交通信號燈設(shè)計(jì)module tra

33、ffic_lights;reg clock,red,amber,green;parameter on=1,off=0,red_tics=350, amber_tics=30,green_tics=200;initial red=off; initial amber=off ;initial green=off;85always begin red=on; light(red,red_tics) ; amber=on; light(amber, amber _tics) ; green=on; light(green, green _tics) ; endtask light; output c

34、olor;input 31:0 tics;begin repeat(tics) (posedge clock) ;/等待上升沿 color=off;endendtaskalways begin #100 clock=0; #100 clock=1;endendmodule5.4 function調(diào)用函數(shù)能夠返回一個用于表達(dá)式的值。1、定義函數(shù)的語法function函數(shù)名; begin end end function86缺省時,返回值的類型為1位reg型872)函數(shù)的返回值函數(shù)定義語句隱含對函數(shù)名相同的、函數(shù)內(nèi)部寄存器的聲明函數(shù)中必須對與函數(shù)名相同的寄存器賦值范圍缺省時,返回值為1位reg型3

35、)函數(shù)的調(diào)用函數(shù)名(,*)調(diào)用時,函數(shù)被當(dāng)作表達(dá)式中的操作數(shù) 88函數(shù)調(diào)用舉例:function f_and; input a,b,c,d; f_and=a & b & c & d ;endfunctionassign f = t ? ( s | | f_and(w,x,y,z):1;894)函數(shù)的使用規(guī)則函數(shù)中不能包含時間控制語句函數(shù)不能啟動任務(wù)函數(shù)至少有一個輸入?yún)⒘亢瘮?shù)中必須對與函數(shù)名相同的寄存器賦值90例5-2: 計(jì)算module func; function31:0 f; input3:0 n; reg3:0 i; begin f =1; for(i=2; i= n; i= i+1)

36、f = i * f ; end endfunction函數(shù)91 reg31:0 value; reg3:0 m; initial begin value =1; for (m=2;m=9;m=m+1) begin $display(“partial value m=%d result=%d”,m,value) value=m*m/( f (m) +1); end $display(“final value =%d”,value) endendmodule 函數(shù)調(diào)用92作業(yè)2:1、以結(jié)構(gòu)描述方式實(shí)現(xiàn)下列邏輯: F=AB+ACD2、以連續(xù)賦值語句設(shè)計(jì)8位總線驅(qū)動器。3、以always語句設(shè)計(jì)8位總

37、線驅(qū)動器。93第6章 系統(tǒng)任務(wù)和編譯預(yù)處理 946.1 系統(tǒng)任務(wù)$display和$write 例如:$display(“Partial result n=%d result=%d”,n,result);原樣顯示格式說明另有特殊字符輸出列表引號內(nèi)為格式控制956.2 編譯預(yù)處理1.宏定義define 標(biāo)識符(宏名) 字符串(宏內(nèi)容) 作用:當(dāng)進(jìn)行了宏定義后,就可以用標(biāo)識符代替字符串,使程序易寫、易讀。962.條件編譯ifdef 宏名 程序段1else 程序段2endif第7章 不同抽象級別的Verilog HDL模型977.1 門級結(jié)構(gòu)描述1、門類型(共26個)and nand or nor

38、xor xnor buf not引用聲明舉例:and #10 and0 ( f, a, b, c, d );98門類型延時實(shí)例名輸出輸入例7-1 用基本邏輯門構(gòu)成D觸發(fā)器module flop(data, clock, clear, q,qb);input data, clock, clear;output q,qb;nand #10 nd1(a,data,clock,clear), nd2(b, data,clock), nd4(d,c,b,clear), nd5(e,c,nclock), nd6(f,d,nclock), nd8(qb,q,f,clear);nand #9 nd3(c,a,

39、d), nd7(q,e,qb);not #10 iv1(ndata,data), iv2(nclock,clock);endmodule992、由已設(shè)計(jì)完成的模塊構(gòu)成更高層次的模塊例7-2:由觸發(fā)器構(gòu)成的4位寄存器include “flop.v” module hardreg(d,clk,clrb,q); input clk,clrb; input3:0 d; output3:0 q; flop f1(d0,clk,clrb,q0,),f2(d1,clk,clrb,q1,), f3(d2,clk,clrb,q2,),f4(d3,clk,clrb,q3,);endmodule1007.2 數(shù)據(jù)流

40、建模assign聲明語句延遲語句定義表達(dá)式、操作符和操作數(shù)101102連續(xù)賦值assign out = i1 & i2; assign addr15:0 = addr1_bits15:0 addr2_bits15:0; assign c_out, sum3:0 = a3:0 + b3:0 + c_in; 隱式連續(xù)賦值 wire out = in1 & in2; 等價于wire out; assign out = in1 & in2; 隱式線網(wǎng)聲明wire i1, i2; assign out = i1 & i2; assign聲明語句out隱式線網(wǎng)聲明103延遲語句普通賦值延遲assign #

41、10 out = in1 & in2; 隱式連續(xù)賦值延遲wire #10 out = in1 & in2; 等價于assign #10 out = in1 & in2; 線網(wǎng)聲明延遲wire # 10 out; assign out = in1 & in2; 等價于wire out; assign #10 out = in1 & in2; 7.3 VerilogHDL的行為級建模例7-3:行為描述的4位寄存器module hardreg(d,clk,clrb,q);parameter size=4; input clk,clrb; inputsize-1:0 d; outputsize-1:0

42、 q; regsize-1:0 q; always (posedge clk or posedge clrb) begin if(clrb) q=0;/清0 else q=d; /置數(shù) endendmodule104例7-4:行為描述的74LS74。module dff_7474(d,clk,clrn,prn,q,qn); input d,clk,clrn,prn; output q,qn; reg q; assign qn=!q; always (posedge clk or negedge clrn or negedge prn) begin if(clrn= =0) q=0;/清0 el

43、se if(prn= =0) q=1; /置1 else qy) begin xgy=1;xsy=0;end else if(xy) begin xgy=0;xsy=1;endendendmodule1114、 多路器選擇器功能:根據(jù)地址信號在多路輸入中選擇一路輸出。112輸入地址輸出module mux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,mout,ncs) ;parameter width = 8;input 2:0 addr ; input ncs;inputwidth-1:0 in1,in2,in3,in4,in5,in6,in7,in8 ;o

44、utput width-1:0 mout;reg width-1:0 mout;always (addr or in1 or in2 or in3 or in4 or in5 or in6 or in7 or in8 or ncs) begin if(!ncs) /if (ncs= = 0) 113 case(addr) 3b000:mout=in1; 3b001:mout=in2; 3b010:mout=in3; 3b011:mout=in4; 3b100:mout=in5; 3b101:mout=in6; 3b110:mout=in7; 3b111:mout=in8; endcase el

45、se mout=0;endendmodule1145、3態(tài)門例1:module tir(a, t, out) ;output7:0 out;input a,t;wire 7:0 out;assign out = t ? a : 8hzz;endmodule115116例2: module tir(a, t, out) ;output11:0 out;input a,t;wire 11:0 out; bufif0 bf0(out , in 0, !t);bufif0 bf1(out , in 1, !t);bufif0 bf2(out , in 2, !t);bufif0 bf3(out , i

46、n 3, !t);bufif0 bf4(out , in 4, !t);bufif0 bf5(out , in 5, !t);bufif0 bf6(out , in 6, !t);bufif0 bf7(out , in 7, !t);endmodule線編碼器 設(shè)計(jì)一個8位線編碼器,輸入為D7 D0 , D7優(yōu)先級最高,D0最低。 當(dāng)Di為高電平輸入時,F(xiàn)1,OUT為其編碼,否則F0。117118module code(d,f,out);input 7:0d;output f; output 2:0out;reg 2:0out; reg f;always( d )casex(d)8b1?:be

47、gin f=1;out=3b111;end8b01?:begin f=1;out=3b110;end8b001?:begin f=1;out=3b101;end8b0001?:begin f=1;out=3b100;end8b00001?:begin f=1;out=3b011;end8b000001?:begin f=1;out=3b010;end8b0000001?:begin f=1;out=3b001;end8b00000001:begin f=1;out=3b000;enddefault:begin f=0;out=3b000;endendcaseendmodule119作業(yè)2講解2

48、、以連續(xù)賦值語句設(shè)計(jì)8位總線驅(qū)動器。3、以always語句設(shè)計(jì)8位總線驅(qū)動器。module t(out,in,oe);input 7:0in;input oe;output 7:0out;reg 7:0out;/assign out= oe?in:8bzzzzzzzz;always( in or oe) if(oe=1) out=in; else out=8bzzzzzzzz;endmodule7.5設(shè)計(jì)和驗(yàn)證時序邏輯例7-6:帶有異步清零端的4位二進(jìn)制加法計(jì)數(shù)器120module ncounter(rst, clk, q ); inputrst, clk; output3:0 q; reg3

49、:0 q; always( posedge clk or negedge rst) if (!rst) q=0; else if (q= =15) q=0; else q=q+1;endmodule例7-7:一個掛在總線上的8位寄存器。module register0(db,nce,nwe) ;inout7:0 db ;input nce,nwe;reg7:0 q;assign db= (nce |(!nwe)?8bzzzzzzzz :q;always (posedge nwe) begin if(nce=0) q=db;endendmodule121122仿真:例7-8:總線和總線操作(p.

50、105)module SampleOfBus(databus,link_bus,write) ;inout11:0 databus ;input link_bus,write;reg11:0 outsigs;assign databus = (link_bus)?outsigs:12hzzz;always (posedge write) begin outsigs=databus*5; /*5?endendmodule123124例7-9:11111010000序列檢測器(1)module shift(q,s,d,clk);output11:0 q;output s;input d;input

51、 clk;reg11:0 q;reg s;always (posedge clk) begin q=q1;q0=d; endalways ( q )if(q=12b 11111010000) s=1;else s=0;endmoduleS端有時會出現(xiàn)毛刺,為什么?怎么解決?125例7-9:11111010000序列檢測器(2)module shift(q,s,d,clk);output11:0 q;output s;input d;input clk;reg11:0 q; reg s;always (posedge clk) begin q=q1;q0=d; endalways (posedg

52、e clk )if(q=12b 11111010000) s=1;else s=0;endmodule126作業(yè)3:1、以always語句設(shè)計(jì)16位雙向總線驅(qū)動器。2、設(shè)計(jì)一個8位線編碼器,輸入為D7 D0 , D7優(yōu)先級最高,D0最低。 當(dāng)Di為高電平輸入時,F(xiàn)1,OUT為其編碼,否則F0。(分別以case語句、if-else語句設(shè)計(jì))3、設(shè)計(jì)一個4位二進(jìn)制數(shù)-ASCII碼轉(zhuǎn)換器。1271、以always語句設(shè)計(jì)8位雙向總線驅(qū)動module t(a,b,d,ce);inout 7:0a,b;input d,ce;reg 7:0a,b;always( a or b or d or ce)if(

53、ce=1 & d=1) a=b;else if(ce=1 & d=0) b=a;else begin a=8bzzzzzzzz; b=8bzzzzzzzz;endendmodule第8章 數(shù)字系統(tǒng)的建模組合邏輯:輸出是當(dāng)前輸入的函數(shù),與電路的原始狀態(tài)無關(guān)。(無記憶部件) 完成簡單的運(yùn)算(如多路器、邏輯運(yùn)算、算術(shù)運(yùn)算等)時序邏輯:輸出是輸入信號和目前狀態(tài)的函數(shù)。(含記憶部件) 在復(fù)雜數(shù)字系統(tǒng)中,時序邏輯可用來產(chǎn)生與運(yùn)算過程相關(guān)的控制信號,以控制運(yùn)算結(jié)果的存儲或讀取存儲器中的數(shù)據(jù)。128129例8-1:8位數(shù)據(jù)寄存器module register8(ena,clk,data,rst,out);in

54、put ena,clk,rst;input 7:0 data;output 7:0 out;reg7:0 out;always (posedge clk)if (!rst) out=0;else if(ena) out=data;endmodule例8-2:8位三態(tài)數(shù)據(jù)通路控制器module data_channel(linkbusswitch,outbuf,inbuf,bus,clk);input linkbusswitch,clk;input 7:0 outbuf;output 7:0 inbuf;wire linkbusswitch;wire7:0 outbuf;reg7:0 inbuf

55、;inout 7:0bus;assign bus=(linkbusswitch= =on)?outbuf:8hzz;always (posedge clk)begin if (!linkbusswitch) inbuf=bus;endendmodule130data_channel仿真結(jié)果:131例8-3:參數(shù)化的奇偶校驗(yàn)生成器132module parity_g(data_in,odd_par,even_par);parameter n=4;input n-1:0 data_in;output odd_par,even_par;assign odd_par=data_in;assign ev

56、en_par=odd_par;endmodule例8-4:分頻器的設(shè)計(jì)(異步清0)module nfrequency( rst, clk, q ,out);inputrst, clk;output3:0 q;reg3:0 q;wire out;assign out= q 3 ;always( posedge clk or negedge rst )if (!rst)q=0;else if (q=15) /實(shí)現(xiàn)16分頻q=0;elseq=q+1;endmodule133例8-4b:14分頻器的設(shè)計(jì)(異步清0)module nfrequency( rst, clk, q ,out);inputrs

57、t, clk;output3:0 q;reg3:0 q;reg out;always ( posedge clk or negedge rst )if (!rst) q=0; else if (q=6) begin out=1; q=q+1;end else if (q=13) begin out=0; q=0;end else q=q+1;endmodule134135例8-5:分頻器的設(shè)計(jì)(同步清0)module nfrequency( rst, clk, q );inputrst, clk;output3:0 q;reg3:0 q;wire out;assign out= q 3 ;al

58、ways( posedge clk)if (!rst)q=0;else if (q=15) /可以實(shí)現(xiàn)16分頻q=0;elseq=q+1;endmodule例8-6:4位二進(jìn)制加減計(jì)數(shù)器module counter(rst, clk, q , m);inputrst, clk,m;output3:0 q;reg3:0 q;always( posedge clk)if (!rst) q=0; else if(m=0) if (q=15) q=0; else q=q+1; else if(m=1) if (q=0) q=15; else q=q-1;endmodule136137例8-7:4位BC

59、D碼加減計(jì)數(shù)器module counter(rst, clk, q , m);inputrst, clk,m;output3:0 q;reg3:0 q;always( posedge clk) if (!rst) q=0; else if(m=0) if (q=9) q=0; else q=q+1; else if(m=1) if (q=0) q=9; else q=q-1;endmodule練習(xí)41、以結(jié)構(gòu)描述方式實(shí)現(xiàn)下列邏輯: Y=ABC+DE+ CFG2、試設(shè)計(jì)一個具有使能端ncs的2-4譯碼器。3、試設(shè)計(jì)一個4位加減運(yùn)算器,輸入為A、B、CIN、M,輸出為OUT和COUT。當(dāng)M=0時執(zhí)

60、行加法運(yùn)算, M=1時,執(zhí)行減法運(yùn)算。4、試設(shè)計(jì)一個14分頻器,要求占空比1:1。5、試設(shè)計(jì)一個具有三態(tài)輸出緩沖的8位數(shù)據(jù)寄存器。6、試設(shè)計(jì)一個具有清0和置數(shù)功能的8位二進(jìn)制加1計(jì)數(shù)器。7、設(shè)計(jì)一個16位移位寄存器。8、設(shè)計(jì)一個16位雙向移位寄存器,當(dāng)d=0時右移, d=1時左移。138課堂練習(xí)中斷請求有效電平為高電平,中斷請求輸入線INTR0INTR7中INTR0優(yōu)先權(quán)最高。試設(shè)計(jì)一個中斷優(yōu)先權(quán)編碼器。當(dāng)有中斷請求時,INT=1,同時輸出中斷請求輸入線的編碼V;否則INT=0,V的輸出任意。試設(shè)計(jì)一個“11010100”序列檢測器。試設(shè)計(jì)一個具有同步清0和同步置數(shù)功能的10位二進(jìn)制加法計(jì)數(shù)器

溫馨提示

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

評論

0/150

提交評論