第7章 Verilog設(shè)計的層次與風(fēng)格_第1頁
第7章 Verilog設(shè)計的層次與風(fēng)格_第2頁
第7章 Verilog設(shè)計的層次與風(fēng)格_第3頁
第7章 Verilog設(shè)計的層次與風(fēng)格_第4頁
第7章 Verilog設(shè)計的層次與風(fēng)格_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Verilog設(shè)計的描述風(fēng)格設(shè)計的描述風(fēng)格o 結(jié)構(gòu)(結(jié)構(gòu)(Structural)描述描述(4/5)(4/5)o 行為(行為(Behavioural)描述描述o 數(shù)據(jù)流(數(shù)據(jù)流(Data Flow)描述描述7.1 Verilog設(shè)計的層次設(shè)計的層次Verilog HDL是一種能夠在多個層級對數(shù)字系統(tǒng)進行描述的語言,是一種能夠在多個層級對數(shù)字系統(tǒng)進行描述的語言,Verilog HDL模型可以是實際電路不同級別的抽象。這些抽象級別模型可以是實際電路不同級別的抽象。這些抽象級別可分為可分為5級。級。 (1)系統(tǒng)級(系統(tǒng)級(System Level)(2)算法級()算法級(Algorithm Level

2、 )(3)寄存器傳輸級)寄存器傳輸級(RTL,Register Transfer Level)(4)門級)門級(Gate Level)(5)開關(guān)級)開關(guān)級(Switch Level)-基于晶體管的設(shè)計層次基于晶體管的設(shè)計層次高級別結(jié)構(gòu)描述是調(diào)用電路元件來構(gòu)建電路:在在Verilog程序中可通過如下方式描述電路的結(jié)構(gòu)程序中可通過如下方式描述電路的結(jié)構(gòu) 調(diào)用調(diào)用Verilog內(nèi)置門元件(門級結(jié)構(gòu)描述)內(nèi)置門元件(門級結(jié)構(gòu)描述) 調(diào)用開關(guān)級元件(晶體管級結(jié)構(gòu)描述)調(diào)用開關(guān)級元件(晶體管級結(jié)構(gòu)描述) 用戶自定義元件用戶自定義元件UDP(也在門級)(也在門級)- Chapter 11多層次結(jié)構(gòu)電路的設(shè)計

3、中,不同模塊間的調(diào)用也多層次結(jié)構(gòu)電路的設(shè)計中,不同模塊間的調(diào)用也屬結(jié)構(gòu)描述屬結(jié)構(gòu)描述-7.67.2 結(jié)構(gòu)(結(jié)構(gòu)(Structural)描述描述Verilog的的內(nèi)置門元件內(nèi)置門元件其真值表見其真值表見P168 門元件的調(diào)用門元件的調(diào)用調(diào)用門元件的格式為:調(diào)用門元件的格式為:門元件名字門元件名字 ()其中普通門的端口列表按下面的順序列出:其中普通門的端口列表按下面的順序列出:(輸出,輸入(輸出,輸入1,輸入,輸入2,輸入,輸入3););比如:比如:and a1(out,in1,in2,in3);/三輸入三輸入與門與門對于三態(tài)門,則按如下順序列出輸入輸出端口:對于三態(tài)門,則按如下順序列出輸入輸出端

4、口:(輸出,輸入,使能控制端);(輸出,輸入,使能控制端);比如:比如:bufif1 mytri1(out,in,enable);/高電平高電平使能的三態(tài)門使能的三態(tài)門門元件的調(diào)用門元件的調(diào)用對于對于buf和和not兩種元件的調(diào)用,需注意兩種元件的調(diào)用,需注意的是:它們允許有多個輸出,但只能的是:它們允許有多個輸出,但只能有一個輸入。比如:有一個輸入。比如: not N1(out1,out2,in); /1個輸入個輸入in,2個輸出個輸出out1,out2 buf B1(out1,out2,out3,in); /1個輸入個輸入in,3個輸出個輸出out1,out2,out3【例【例7.1】 調(diào)

5、用門元件實現(xiàn)的調(diào)用門元件實現(xiàn)的4選選1 MUXmodule mux4_1a(out,in1,in2,in3,in4,s0,s1);input in1,in2,in3,in4,s0,s1; output out;wire s0_n,s1_n,w,x,y,z;not (s0_n,s0),(s1_n,s1);and (w,in1,s0_n,s1_n),(x,in2,s0_n,s1), (y,in3,s0,s1_n),(z,in4,s0,s1);or (out,w,x,y,z);endmodule用基本門實現(xiàn)的用基本門實現(xiàn)的4選選1 MUX原理圖原理圖 7.3 行為描述行為描述就是對設(shè)計實體的數(shù)學(xué)模型

6、的描述,其抽象就是對設(shè)計實體的數(shù)學(xué)模型的描述,其抽象程度遠(yuǎn)高于結(jié)構(gòu)描述方式。行為描述類程度遠(yuǎn)高于結(jié)構(gòu)描述方式。行為描述類似于高級編程語言,當(dāng)描述一個設(shè)計實似于高級編程語言,當(dāng)描述一個設(shè)計實體的行為時,無需知道具體電路的結(jié)構(gòu),體的行為時,無需知道具體電路的結(jié)構(gòu),只需要描述清楚輸入與輸出信號的行為,只需要描述清楚輸入與輸出信號的行為,而不需要花費更多的精力關(guān)注設(shè)計功能而不需要花費更多的精力關(guān)注設(shè)計功能的門級實現(xiàn)。的門級實現(xiàn)。 【例例7.2】 用用case語句描述的語句描述的4選選1 MUXmodule mux4_1b(out,in1,in2,in3,in4,s0,s1);input in1,in2

7、,in3,in4,s0,s1; output reg out;always(*) /使用通配符使用通配符case(s0,s1)2b00:out=in1;2b01:out=in2;2b10:out=in3;2b11:out=in4;default:out=2bx;endcaseendmodule【例例7.37.3】 4 4位二進制加法計數(shù)器位二進制加法計數(shù)器module count4(out,clr,clk);input clr,clk; output reg3:0 out;always (posedge clk or posedge clr)beginif(clr) out=0; /異步清零異

8、步清零else out=out+1;/計數(shù)計數(shù)endendmodule采用行為描述方式時需注意采用行為描述方式時需注意 用行為描述模式設(shè)計電路,可以降低設(shè)計難用行為描述模式設(shè)計電路,可以降低設(shè)計難度。行為描述只需表示輸入與輸出之間的關(guān)度。行為描述只需表示輸入與輸出之間的關(guān)系,不需要包含任何結(jié)構(gòu)方面的信息。系,不需要包含任何結(jié)構(gòu)方面的信息。 設(shè)計者只需寫出源程序,而挑選電路方案的設(shè)計者只需寫出源程序,而挑選電路方案的工作由工作由EDA軟件自動完成。軟件自動完成。在電路的規(guī)模較大或者需要描述復(fù)雜的邏輯關(guān)在電路的規(guī)模較大或者需要描述復(fù)雜的邏輯關(guān)系時,應(yīng)首先考慮用行為描述方式設(shè)計電路,系時,應(yīng)首先考慮

9、用行為描述方式設(shè)計電路,如果設(shè)計的結(jié)果不能滿足資源占有率的要求,如果設(shè)計的結(jié)果不能滿足資源占有率的要求,則應(yīng)改變描述方式。則應(yīng)改變描述方式。7.4 數(shù)據(jù)流描述數(shù)據(jù)流描述數(shù)據(jù)流描述方式主要使用持續(xù)賦值語句,數(shù)據(jù)流描述方式主要使用持續(xù)賦值語句,多用于描述組合邏輯電路,其格式為:多用于描述組合邏輯電路,其格式為: assign LHS_net=RHS_expression;右邊表達式中的操作數(shù)無論何時發(fā)生變右邊表達式中的操作數(shù)無論何時發(fā)生變化,都會引起表達式值的重新計算化,都會引起表達式值的重新計算, 并將重新計算后的值賦予左邊表達式并將重新計算后的值賦予左邊表達式的的net型變量。型變量。 【例例

10、7.4】 數(shù)據(jù)流描述的數(shù)據(jù)流描述的4選選1 MUXmodule mux4_1c(out,in1,in2,in3,in4,s0,s1);input in1,in2,in3,in4,s0,s1; output out;assign out=(in1 & s0 & s1)|(in2 & s0 & s1)|(in3& s0 & s1)|(in4 & s0 & s1);endmodule數(shù)據(jù)流描述數(shù)據(jù)流描述用數(shù)據(jù)流描述方式設(shè)計電路與用傳統(tǒng)的邏輯方程用數(shù)據(jù)流描述方式設(shè)計電路與用傳統(tǒng)的邏輯方程設(shè)計電路很相似。設(shè)計中只要有了布爾代數(shù)表達設(shè)計電路很

11、相似。設(shè)計中只要有了布爾代數(shù)表達式就很容易將它用數(shù)據(jù)流方式表達出來。表達方式就很容易將它用數(shù)據(jù)流方式表達出來。表達方法是用法是用Verilog中的邏輯運算符置換布爾邏輯運中的邏輯運算符置換布爾邏輯運算符即可。算符即可。比如,如果邏輯表達式為:比如,如果邏輯表達式為: ,則用數(shù)據(jù)流,則用數(shù)據(jù)流方式描述為:方式描述為: assign F=(a&b)|(c&d)。cdabf7.5 不同描述風(fēng)格的設(shè)計不同描述風(fēng)格的設(shè)計對設(shè)計者而言,采用的描述級別越高,設(shè)計對設(shè)計者而言,采用的描述級別越高,設(shè)計越容易;對綜合器而言,行為級的描述越容易;對綜合器而言,行為級的描述為綜合器的優(yōu)化提供了更大的

12、空間,較為綜合器的優(yōu)化提供了更大的空間,較之門級結(jié)構(gòu)描述更能發(fā)揮綜合器的性能,之門級結(jié)構(gòu)描述更能發(fā)揮綜合器的性能,所以在電路設(shè)計中,除非一些關(guān)鍵路徑所以在電路設(shè)計中,除非一些關(guān)鍵路徑的設(shè)計采用門級結(jié)構(gòu)描述外,一般更多的設(shè)計采用門級結(jié)構(gòu)描述外,一般更多地采用行為建模方式。地采用行為建模方式。 【例例7.12】 調(diào)用門元件實現(xiàn)的調(diào)用門元件實現(xiàn)的1位全加器位全加器module full_add1(a, b, module full_add1(a, b, cincin, sum, , sum, coutcout); );input a, b, input a, b, cincin; ;output s

13、um, output sum, coutcout; ;wire s1,m1, m2, m3;wire s1,m1, m2, m3;and (m1, a, b),and (m1, a, b), (m2, b, (m2, b, cincin), ), (m3, a, (m3, a, cincin); );xorxor (s1, a, b), (s1, a, b), (sum, s1, (sum, s1, cincin); );or (or (coutcout, m1, m2, m3);, m1, m2, m3);endmoduleendmodule【例例7.13】數(shù)據(jù)流描述的數(shù)據(jù)流描述的1位全加器

14、位全加器module full_add2(a,b,cin,sum,cout);input a, b, cin;output sum, cout;assign sum = a b cin;assign cout = (a & b ) | (b & cin ) | (cin & a );endmodule3、行為描述的行為描述的1位全加器位全加器【例例7.14】 行為描述的行為描述的1位全加器位全加器module full_add3(a,b,cin,sum,cout);input a,b,cin; output reg sum,cout;always * /或?qū)憺榛驅(qū)憺閍l

15、ways (a or b or cin)begin cout,sum=a+b+cin; endendmodule兩個半加器構(gòu)成一個全加器:兩個半加器構(gòu)成一個全加器: 半加器為底層模塊,全加器為頂層模塊,在頂層模塊中調(diào)用底層模塊半加器為底層模塊,全加器為頂層模塊,在頂層模塊中調(diào)用底層模塊(模塊例化)來構(gòu)成整個系統(tǒng),類似在原理圖設(shè)計中調(diào)用元器件。(模塊例化)來構(gòu)成整個系統(tǒng),類似在原理圖設(shè)計中調(diào)用元器件?!纠?.15】 用模塊例化方式設(shè)計的用模塊例化方式設(shè)計的1位全加器位全加器頂頂層設(shè)計層設(shè)計module full_add(ain,bin,cin,sum,cout);input ain,bin,c

16、in; output sum,cout;wire d,e,f; /用于內(nèi)部連接的節(jié)點信號用于內(nèi)部連接的節(jié)點信號half_add u1(ain,bin,e,d); /半加器模塊調(diào)用,采用位置關(guān)聯(lián)方式半加器模塊調(diào)用,采用位置關(guān)聯(lián)方式half_add u2(e,cin,sum,f); or u3(cout,d,f); /或門調(diào)用或門調(diào)用endmodule【例例7.16】 半加器定義半加器定義module half_add(a,b,so,co);input a,b; output so,co;assign co=a&b; assign so=ab;endmodule4 4位加法器設(shè)計位加法器設(shè)

17、計module add4_1(sum,cout,a,b,cin);output 3:0 sum;output cout;input 3:0 a,b;input cin; /*級連描述,級連描述, full_add1源代碼見例源代碼見例7.12*/full_add1 f0(a0,b0,cin,sum0,cin1);full_add1 f1(a1,b1,cin1,sum1,cin2);full_add1 f2(a2,b2,cin2,sum2,cin3);full_add1 f3(a3,b3,cin3,sum3,cout);endmodule結(jié)構(gòu)描述的結(jié)構(gòu)描述的4位級連全加器位級連全加器【例例7.1

18、8】 數(shù)據(jù)流描述的數(shù)據(jù)流描述的4位加法器位加法器module add4_2(cout,sum,a,b,cin);input cin; input3:0 a,b; output3:0 sum; output cout;assign cout,sum=a+b+cin;endmoduleu如果數(shù)字系統(tǒng)比較復(fù)雜,可采用如果數(shù)字系統(tǒng)比較復(fù)雜,可采用“Top-down”的方的方法進行設(shè)計。首先把系統(tǒng)分為幾個模塊,每個模塊再法進行設(shè)計。首先把系統(tǒng)分為幾個模塊,每個模塊再分為幾個子模塊,以此類推,直到易于實現(xiàn)為止。這分為幾個子模塊,以此類推,直到易于實現(xiàn)為止。這種種“Top-down”的方法能夠把復(fù)雜的設(shè)計分

19、解為許多的方法能夠把復(fù)雜的設(shè)計分解為許多簡單的邏輯來實現(xiàn),同時也適合于多人進行分工合作簡單的邏輯來實現(xiàn),同時也適合于多人進行分工合作,如同用,如同用C語言編寫大型軟件一樣。語言編寫大型軟件一樣。Verilog語言能夠語言能夠很好地支持這種很好地支持這種“Top-down”的設(shè)計方法。的設(shè)計方法。1.2.1 Top-down設(shè)計舉例:設(shè)計舉例:計數(shù)模塊鎖存器顯示控制模塊標(biāo)準(zhǔn)時鐘系統(tǒng)復(fù)位待測信號Count_enCount_clrLoadu多層次結(jié)構(gòu)電路的描述既可以采用文本多層次結(jié)構(gòu)電路的描述既可以采用文本方式,也可以用圖形和文本混合設(shè)計的方式,也可以用圖形和文本混合設(shè)計的方式。用一個方式。用一個8

20、位累加器的設(shè)計為例來說位累加器的設(shè)計為例來說明這兩種設(shè)計方式。明這兩種設(shè)計方式。8位全加器位全加器module add8(sum,cout,b,a,cin);output7:0 sum;output cout;input7:0 a,b;input cin;assign cout,sum=a+b+cin;endmodule8位寄存器位寄存器module reg8(qout,in,clk,clear);output7:0 qout;input7:0 in;input clk,clear;reg7:0 qout;always (posedge clk or posedge clear)beginif

21、(clear) qout=0; /異步清異步清0else qout=in;endendmodule將設(shè)計項目設(shè)置成可調(diào)用的元件將設(shè)計項目設(shè)置成可調(diào)用的元件 將所需元件全部調(diào)入原理圖編輯窗并連接好將所需元件全部調(diào)入原理圖編輯窗并連接好 頂層頂層acc.bdf add8.bsf reg8.bsf 底層底層 add8.v reg8.v module acc(accout,cout,accin,cin,clk,clear);output7:0 accout;output cout;input7:0 accin;input cin,clk,clear;wire7:0 sum;add8 accadd8(s

22、um,cout,accout,accin,cin); /調(diào)用調(diào)用add8子模塊子模塊reg8 accreg8(accout,sum,clk,clear); /調(diào)用調(diào)用reg8子模塊子模塊endmodule累加器頂層文本描述累加器頂層文本描述 對于上面的模塊調(diào)用,可采用位置對應(yīng)的方式,即調(diào)用時對于上面的模塊調(diào)用,可采用位置對應(yīng)的方式,即調(diào)用時模塊端口列表中信號的排列順序與模塊定義時端口列表中的信模塊端口列表中信號的排列順序與模塊定義時端口列表中的信號排列順序相同;也可以采用信號名對應(yīng)方式,此時不必按順號排列順序相同;也可以采用信號名對應(yīng)方式,此時不必按順序,例如上面對序,例如上面對reg8的調(diào)用

23、:的調(diào)用:module reg8(qout,in,clk,c lear);/reg8的模塊聲明的模塊聲明底層底層reg8 accreg8(accout,sum,clk,clear); /調(diào)用方式調(diào)用方式1,位置對應(yīng),位置對應(yīng)頂層頂層reg8 accreg8(.qout(accout),.clear(clear), .in(sum),.clk(clk);/調(diào)用方式調(diào)用方式2,信號名對應(yīng),信號名對應(yīng)頂層頂層(1)文件復(fù)制方式:)文件復(fù)制方式:將將add8和和 reg8的代碼復(fù)制到的代碼復(fù)制到acc.v中,在綜合時指明中,在綜合時指明頂層模塊。頂層模塊。 module acc(accout,cout

24、,accin,cin,clk,clear);output7:0 accout; output cout;input7:0 accin; input cin,clk,clear;wire7:0 sum;add8 accadd8(sum,cout,accout,accin,cin); /調(diào)用調(diào)用add8子模塊子模塊reg8 accreg8(accout,sum,clk,clear); /調(diào)用調(diào)用reg8子模塊子模塊endmodule module add8(sum,cout,b,a,cin); output7:0 sum; output cout; input7:0 a,b; input cin;

25、 assign cout,sum=a+b+cin; endmodule(2)庫)庫管理管理方式方式7.7 基本組合電路基本組合電路(Combinational Logic Circuit)設(shè)計設(shè)計 門級結(jié)構(gòu)描述門級結(jié)構(gòu)描述 module gate1(F,A,B,C,D);input A,B,C,D;output F;nand(F1,A,B); /調(diào)用門元件調(diào)用門元件and(F2,B,C,D);or(F,F1,F2);endmodule 數(shù)據(jù)流描述數(shù)據(jù)流描述module gate2(F,A,B,C,D);input A,B,C,D;output F;assign F=(A&B)|(B&a

26、mp;C&D);endmodule【例例7.24】 74138的的Verilog描述描述module ttl74138(a,y,g1,g2a,g2b);input2:0 a; input g1,g2a,g2b; output reg7:0 y;always (*) begin if(g1 & g2a & g2b) /只有當(dāng)只有當(dāng)g1、g2a、g2b為為100時,譯碼器使能時,譯碼器使能begin case(a)3b000:y=8b11111110; /譯碼輸出譯碼輸出3b001:y=8b11111101;3b010:y=8b11111011;3b011:y=8b1111

27、0111;3b100:y=8b11101111;3b101:y=8b11011111;3b110:y=8b10111111;3b111:y=8b01111111;default:y=8b11111111;endcase endelse y=8b11111111; endendmodule3:8 DECODERABG1CG2ANG2BNY0NY1NY2NY3NY4NY5NY6NY7N74138instMaxplus2庫74138Primitives(原語)庫 緩沖器buffer 邏輯門logic-nand 其他功能othergnd,vcc 引腳pininput,output 存儲單元storag

28、e【例例7.25】 8線線3線優(yōu)先編碼器線優(yōu)先編碼器74148的的Verilog描述描述module ttl74148(din,ei,gs,eo,dout);input7:0 din; input ei; output reg gs,eo; output reg2:0 dout;always (ei,din) begin if(ei) begin dout=3b111;gs=1b1;eo=1b1; endelse if(din=8b111111111) begin dout=3b111;gs=1b1;eo=1b0;endelse if(!din7) begin dout=3b000;gs=1b

29、0;eo=1b1;endelse if(!din6) begin dout=3b001;gs=1b0;eo=1b1;endelse if(!din5) begin dout=3b010;gs=1b0;eo=1b1;endelse if(!din4) begin dout=3b011;gs=1b0;eo=1b1;endelse if(!din3) begin dout=3b100;gs=1b0;eo=1b1;endelse if(!din2) begin dout=3b101;gs=1b0;eo=1b1;endelse if(!din1) begin dout=3b110;gs=1b0;eo=1

30、b1;endelse begin dout=3b111;gs=1b0;eo=1b1;end endendmodule【例例7.26】 用用函數(shù)函數(shù)定義的定義的8線線3線優(yōu)先編碼器線優(yōu)先編碼器74148的的Verilog描述描述module coder83(din,dout);input7:0 din;output2:0 dout;function2:0 code; /函數(shù)定義函數(shù)定義input7:0 din; /函數(shù)只有輸入端口,輸出為函數(shù)名本身函數(shù)只有輸入端口,輸出為函數(shù)名本身if(din7) code=3d7;else if(din6) code=3d6;else if(din5) cod

31、e=3d5;else if(din4) code=3d4;else if(din3) code=3d3;else if(din2) code=3d2;else if(din1) code=3d1;else code=3d0;endfunctionassign dout=code(din); /函數(shù)調(diào)用函數(shù)調(diào)用endmodule 1 1、函數(shù)的定義與調(diào)用須在一個、函數(shù)的定義與調(diào)用須在一個module模塊內(nèi)。模塊內(nèi)。 2 2、函數(shù)只允許有輸入變量且必須至少有一個輸入變、函數(shù)只允許有輸入變量且必須至少有一個輸入變量,輸出變量由函數(shù)名本身擔(dān)任,在定義函數(shù)時,量,輸出變量由函數(shù)名本身擔(dān)任,在定義函數(shù)時,

32、需對函數(shù)名說明其類型和位寬。需對函數(shù)名說明其類型和位寬。 3 3、定義函數(shù)時,沒有端口名列表,但調(diào)用函數(shù)時,、定義函數(shù)時,沒有端口名列表,但調(diào)用函數(shù)時,需列出端口名列表,端口名的排序和類型必須與定需列出端口名列表,端口名的排序和類型必須與定義時的相一致。這一點與任務(wù)相同義時的相一致。這一點與任務(wù)相同 4 4、函數(shù)可以出現(xiàn)在持續(xù)賦值、函數(shù)可以出現(xiàn)在持續(xù)賦值assign的右端表達式中。的右端表達式中。 5 5、函數(shù)不能調(diào)用任務(wù),而任務(wù)可以調(diào)用別的任務(wù)和、函數(shù)不能調(diào)用任務(wù),而任務(wù)可以調(diào)用別的任務(wù)和函數(shù),且調(diào)用任務(wù)和函數(shù)個數(shù)不受限制。函數(shù),且調(diào)用任務(wù)和函數(shù)個數(shù)不受限制?!纠?.27】 奇偶校驗位產(chǎn)生

33、器奇偶校驗位產(chǎn)生器module parity(even_bit,odd_bit,a);input7:0 a; output even_bit,odd_bit;assign even_bit=a; /生成偶校驗位生成偶校驗位assign odd_bit=even_bit; /生成奇校驗位生成奇校驗位endmodule 7.8 基本時序電路設(shè)計基本時序電路設(shè)計【例例7.29】 帶帶異步清異步清0/異步置異步置1的的JK觸發(fā)器觸發(fā)器module jkff_rs(clk,j,k,q,rs,set);input clk,j,k,set,rs; output reg q;always (posedge c

34、lk, negedge rs, negedge set)begin if(!rs) q=1b0;else if(!set) q=1b1;else case(j,k)2b00:q=q;2b01:q=1b0;2b10:q=1b1;2b11:q=q;default:q=1bx;endcaseendendmodule【例例7.30】 電平敏感的電平敏感的1位數(shù)據(jù)鎖存器位數(shù)據(jù)鎖存器module latch1(q,d,le);input d,le; output q;assign q=le?d:q; /le為高電平時,將輸入端數(shù)據(jù)鎖存為高電平時,將輸入端數(shù)據(jù)鎖存endmodule【例例7.31】 帶置位帶

35、置位/復(fù)位端的復(fù)位端的1位數(shù)據(jù)鎖存器位數(shù)據(jù)鎖存器module latch2(q,d,le,set,reset);input d,le,set,reset; output q;assign q=reset?0:(set? 1:(le?d:q);endmodule【例例7.32】 8位數(shù)據(jù)鎖存器(位數(shù)據(jù)鎖存器(74LS373)module ttl373(le,oe,q,d);input le,oe; input7:0 d; output reg7:0 q;always * /或?qū)憺榛驅(qū)憺閍lways (le,oe,d)begin if(oe & le) q=d; /或?qū)憺榛驅(qū)憺閕f(!oe

36、) & (le)else q=8bz;endendmodule參數(shù)化鎖存器lpm_latchdata23.0gateq23.0lpm_latch0inst1D LATCHD1D3D6D7D2GD4D5D8OENQ3Q6Q7Q2Q8Q4Q5Q174373inst2【例例7.33】 數(shù)據(jù)寄存器數(shù)據(jù)寄存器module reg_w(dout,din,clk,clr);parameter WIDTH=7;input clk,clr; inputWIDTH:0 din;output regWIDTH:0 dout;always (posedge clk, posedge clr)begin if(

37、clr) dout=0;else dout=din; endendmodule 數(shù)據(jù)鎖存器數(shù)據(jù)鎖存器(latch)與數(shù)據(jù)寄存器(與數(shù)據(jù)寄存器(register)的區(qū)別:的區(qū)別:(1)Latch:一般由電平信號控制,屬于電平敏感型;一般由電平信號控制,屬于電平敏感型; Register:一般由時鐘信號控制,屬于邊沿敏感型。一般由時鐘信號控制,屬于邊沿敏感型。(2)有不同的使用場合,主要取決于控制方式及控制信號有不同的使用場合,主要取決于控制方式及控制信號和數(shù)據(jù)信號之間的時序關(guān)系:和數(shù)據(jù)信號之間的時序關(guān)系: 若數(shù)據(jù)有效滯后于控制信號有效,則只能用鎖存器;若數(shù)據(jù)有效滯后于控制信號有效,則只能用鎖存器

38、; 若數(shù)據(jù)提前于控制信號,并要求同步操作,則可以選擇若數(shù)據(jù)提前于控制信號,并要求同步操作,則可以選擇寄存器來存放數(shù)據(jù)。寄存器來存放數(shù)據(jù)?!纠?.34】 8位移位寄存器位移位寄存器module shift8(dout,din,clk,clr);input clk,clr,din;output reg7:0 dout;always (posedge clk)begin if(clr) dout=8b0; /同步清同步清0,高電平有效,高電平有效else begin dout=dout1; /輸出信號左移一位輸出信號左移一位 dout0=din; /輸入信號補充到輸出信號的最低位輸入信號補充到輸出

39、信號的最低位 endendendmodule【例例7.35】 可變模加法可變模加法/減法計數(shù)器減法計數(shù)器module updown_count(d,clk,clear,load,up_down,qd);input clk,clear,load,up_down;input7:0 d; output7:0 qd; reg7:0 cnt;assign qd=cnt;always (posedge clk)begin if(!clear) cnt=8h00; /同步清同步清0,低電平有效,低電平有效else if(load) cnt=d;/同步預(yù)置同步預(yù)置else if(up_down) cnt=cn

40、t+1; /加法計數(shù)加法計數(shù)else cnt=cnt-1; /減法計數(shù)減法計數(shù)endendmodule【例例7.39】 行為描述的三態(tài)門行為描述的三態(tài)門module tristate1(in,en,out);input in,en; output reg out;always (in or en)begin if(en) out=in; else out=1bz; endendmodule【例例7.40】 調(diào)用門元件調(diào)用門元件bufif1描述的三態(tài)門描述的三態(tài)門module tristate2(in,en,out);input in,en; output out; tri out;bufif1

41、 b1(out,in,en);/注意三態(tài)門端口的排列順序注意三態(tài)門端口的排列順序endmodule【例例7.41】 數(shù)據(jù)流描述的三態(tài)門數(shù)據(jù)流描述的三態(tài)門module tristate3(out,in,en);input in,en; output out;assign out=en?in:1bz; /若若en=1,out=in;/若若en=0,out為高阻態(tài)為高阻態(tài)endmodule【例例7.42】 三態(tài)雙向驅(qū)動器三態(tài)雙向驅(qū)動器module bidir(y,a,en,b);input a,en; output b; inout y;assign y=en?a:bz; assign b=y;endmodule【例例7.44】 三態(tài)雙向總線緩沖器三態(tài)雙向總線緩沖器module ttl245(a,b,oe,dir);input oe,dir; /使能信號和方向控制使能信號和方向控制inout7:0 a,b; /雙向數(shù)據(jù)線雙向數(shù)據(jù)線assign a=(oe,dir=2b00)?b:8bz;assign b=(oe,dir=2b01)?a:8bz;endmodule設(shè)計RAM存儲器可采用兩種方法:1、用FPGA設(shè)計軟件自帶的參數(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論