




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第7章
Verilog設計的層次與風格主要內容◆結構(Structural)描述◆行為(Behavioural)描述◆數據流(DataFlow)描述◆基本組合電路設計◆基本時序電路設計Verilog設計的描述風格
結構(Structural)描述(4/5)行為(Behavioural)描述
數據流(DataFlow)描述7.1Verilog設計的層次VerilogHDL是一種能夠在多個層級對數字系統進行描述的語言,VerilogHDL模型可以是實際電路不同級別的抽象。這些抽象級別可分為5級。(1)系統級(SystemLevel)(2)算法級(AlgorithmLevel)(3)寄存器傳輸級(RTL,RegisterTransferLevel)(4)門級(GateLevel)(5)開關級(SwitchLevel)-基于晶體管的設計層次高級別結構描述是調用電路元件來構建電路:在Verilog程序中可通過如下方式描述電路的結構◆調用Verilog內置門元件(門級結構描述)◆調用開關級元件(晶體管級結構描述)◆用戶自定義元件UDP(也在門級)-Chapter11◆多層次結構電路的設計中,不同模塊間的調用也屬結構描述-7.67.2結構(Structural)描述
Verilog的內置門元件其真值表見P168
門元件的調用調用門元件的格式為:門元件名字<例化的門名字>(<端口列表>)其中普通門的端口列表按下面的順序列出:(輸出,輸入1,輸入2,輸入3……);比如:anda1(out,in1,in2,in3); //三輸入與門對于三態門,則按如下順序列出輸入輸出端口:(輸出,輸入,使能控制端);比如:bufif1mytri1(out,in,enable); //高電平使能的三態門門元件的調用對于buf和not兩種元件的調用,需注意的是:它們允許有多個輸出,但只能有一個輸入。比如:
notN1(out1,out2,in); //1個輸入in,2個輸出out1,out2bufB1(out1,out2,out3,in); //1個輸入in,3個輸出out1,out2,out3【例7.1】調用門元件實現的4選1MUXmodulemux4_1a(out,in1,in2,in3,in4,s0,s1);inputin1,in2,in3,in4,s0,s1;outputout;wires0_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用基本門實現的4選1MUX原理圖7.3行為描述
就是對設計實體的數學模型的描述,其抽象程度遠高于結構描述方式。行為描述類似于高級編程語言,當描述一個設計實體的行為時,無需知道具體電路的結構,只需要描述清楚輸入與輸出信號的行為,而不需要花費更多的精力關注設計功能的門級實現。【例7.2】用case語句描述的4選1MUXmodulemux4_1b(out,in1,in2,in3,in4,s0,s1);inputin1,in2,in3,in4,s0,s1;outputregout;always@(*) //使用通配符case({s0,s1})2'b00:out=in1;2'b01:out=in2;2'b10:out=in3;2'b11:out=in4;default:out=2'bx;endcaseendmoduleP111例4.12【例7.3】4位二進制加法計數器modulecount4(out,clr,clk);inputclr,clk;outputreg[3:0]out;always@(posedgeclkorposedgeclr)beginif(clr) out<=0;//異步清零else out<=out+1; //計數endendmodule采用行為描述方式時需注意用行為描述模式設計電路,可以降低設計難度。行為描述只需表示輸入與輸出之間的關系,不需要包含任何結構方面的信息。設計者只需寫出源程序,而挑選電路方案的工作由EDA軟件自動完成。在電路的規模較大或者需要描述復雜的邏輯關系時,應首先考慮用行為描述方式設計電路,如果設計的結果不能滿足資源占有率的要求,則應改變描述方式。7.4數據流描述
數據流描述方式主要使用持續賦值語句,多用于描述組合邏輯電路,其格式為:
assignLHS_net=RHS_expression;右邊表達式中的操作數無論何時發生變化,都會引起表達式值的重新計算,并將重新計算后的值賦予左邊表達式的net型變量?!纠?.4】數據流描述的4選1MUXmodulemux4_1c(out,in1,in2,in3,in4,s0,s1);inputin1,in2,in3,in4,s0,s1;outputout;assignout=(in1&~s0&~s1)|(in2&~s0&s1)|(in3&s0&~s1)|(in4&s0&s1);endmodule
數據流描述
用數據流描述方式設計電路與用傳統的邏輯方程設計電路很相似。設計中只要有了布爾代數表達式就很容易將它用數據流方式表達出來。表達方法是用Verilog中的邏輯運算符置換布爾邏輯運算符即可。比如,如果邏輯表達式為:,則用數據流方式描述為:assignF=(a&b)|(~(c&d))。7.5不同描述風格的設計
對設計者而言,采用的描述級別越高,設計越容易;對綜合器而言,行為級的描述為綜合器的優化提供了更大的空間,較之門級結構描述更能發揮綜合器的性能,所以在電路設計中,除非一些關鍵路徑的設計采用門級結構描述外,一般更多地采用行為建模方式。
【例7.12】調用門元件實現的1位全加器
modulefull_add1(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;wires1,m1,m2,m3;and(m1,a,b),(m2,b,cin),(m3,a,cin);xor(s1,a,b),(sum,s1,cin);or(cout,m1,m2,m3);endmodule【例7.13】數據流描述的1位全加器modulefull_add2(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;assignsum=a^b^cin;assigncout=(a&b)|(b&cin)|(cin&a);endmodule3、行為描述的1位全加器【例7.14】行為描述的1位全加器modulefull_add3(a,b,cin,sum,cout);inputa,b,cin;outputregsum,cout;always@*
//或寫為always@(aorborcin)begin{cout,sum}=a+b+cin;endendmodule4、采用層次化方式設計1位全加器兩個半加器構成一個全加器:半加器為底層模塊,全加器為頂層模塊,在頂層模塊中調用底層模塊(模塊例化)來構成整個系統,類似在原理圖設計中調用元器件。【例7.15】用模塊例化方式設計的1位全加器頂層設計modulefull_add(ain,bin,cin,sum,cout);inputain,bin,cin;outputsum,cout;wired,e,f; //用于內部連接的節點信號half_addu1(ain,bin,e,d); //半加器模塊調用,采用位置關聯方式half_addu2(e,cin,sum,f);oru3(cout,d,f); //或門調用endmodule【例7.16】半加器定義modulehalf_add(a,b,so,co);inputa,b;outputso,co;assignco=a&b;assignso=a^b;endmodule4位加法器設計moduleadd4_1(sum,cout,a,b,cin);output[3:0]sum;outputcout;input[3:0]a,b;inputcin;
/*級連描述,full_add1源代碼見例7.12*/full_add1f0(a[0],b[0],cin,sum[0],cin1);full_add1f1(a[1],b[1],cin1,sum[1],cin2);full_add1f2(a[2],b[2],cin2,sum[2],cin3);full_add1f3(a[3],b[3],cin3,sum[3],cout);endmodule結構描述的4位級連全加器【例7.18】數據流描述的4位加法器moduleadd4_2(cout,sum,a,b,cin);inputcin;input[3:0]a,b;output[3:0]sum;outputcout;assign{cout,sum}=a+b+cin;endmodule7.6多層次結構電路的設計如果數字系統比較復雜,可采用“Top-down”的方法進行設計。首先把系統分為幾個模塊,每個模塊再分為幾個子模塊,以此類推,直到易于實現為止。這種“Top-down”的方法能夠把復雜的設計分解為許多簡單的邏輯來實現,同時也適合于多人進行分工合作,如同用C語言編寫大型軟件一樣。Verilog語言能夠很好地支持這種“Top-down”的設計方法。
1.2.1Top-down設計舉例:
數字頻率計組成原理框圖Moduleplj(clk,rst,signal,out);7.6多層次結構電路的設計多層次結構電路的描述既可以采用文本方式,也可以用圖形和文本混合設計的方式。用一個8位累加器的設計為例來說明這兩種設計方式。1.圖形與文本混合設計
8位全加器moduleadd8(sum,cout,b,a,cin);output[7:0]sum;outputcout;input[7:0]a,b;inputcin;assign{cout,sum}=a+b+cin;endmodule8位寄存器modulereg8(qout,in,clk,clear);output[7:0]qout;input[7:0]in;inputclk,clear;reg[7:0]qout;always@(posedgeclkorposedgeclear)beginif(clear)qout<=0; //異步清0elseqout<=in;endendmodule將設計項目設置成可調用的元件將所需元件全部調入原理圖編輯窗并連接好
頂層acc.bdfadd8.bsfreg8.bsf底層
add8.vreg8.v
2.文本設計moduleacc(accout,cout,accin,cin,clk,clear);output[7:0]accout;outputcout;input[7:0]accin;inputcin,clk,clear;wire[7:0]sum;add8accadd8(sum,cout,accout,accin,cin); //調用add8子模塊reg8accreg8(accout,sum,clk,clear); //調用reg8子模塊endmodule累加器頂層文本描述對于上面的模塊調用,可采用位置對應的方式,即調用時模塊端口列表中信號的排列順序與模塊定義時端口列表中的信號排列順序相同;也可以采用信號名對應方式,此時不必按順序,例如上面對reg8的調用:modulereg8(qout,in,clk,clear); //reg8的模塊聲明—底層reg8accreg8(accout,sum,clk,clear); //調用方式1,位置對應—頂層reg8accreg8(.qout(accout),.clear(clear),.in(sum),.clk(clk)); //調用方式2,信號名對應—頂層模塊調用-和所用的綜合器有關2.文本設計-模塊調用的指定方式(1)文件復制方式:將add8和reg8的代碼復制到acc.v中,在綜合時指明頂層模塊。
moduleacc(accout,cout,accin,cin,clk,clear);output[7:0]accout;outputcout;input[7:0]accin;inputcin,clk,clear;wire[7:0]sum;add8accadd8(sum,cout,accout,accin,cin); //調用add8子模塊reg8accreg8(accout,sum,clk,clear); //調用reg8子模塊endmodule
moduleadd8(sum,cout,b,a,cin);output[7:0]sum;outputcout;input[7:0]a,b;inputcin;assign{cout,sum}=a+b+cin;endmodule………………2.文本設計-模塊調用的指定方式(2)庫管理方式7.7基本組合電路(CombinationalLogicCircuit)設計門級結構描述
modulegate1(F,A,B,C,D);inputA,B,C,D;outputF;nand(F1,A,B);//調用門元件and(F2,B,C,D);or(F,F1,F2);endmodule數據流描述modulegate2(F,A,B,C,D);inputA,B,C,D;outputF;assignF=(~(A&B))|(B&C&D);endmodule1、3-8譯碼器(Decoder)【例7.24】74138的Verilog描述modulettl74138(a,y,g1,g2a,g2b);input[2:0]a;inputg1,g2a,g2b;outputreg[7:0]y;always@(*)beginif(g1&~g2a&~g2b) //只有當g1、g2a、g2b為100時,譯碼器使能begincase(a)3'b000:y=8'b11111110; //譯碼輸出3'b001:y=8'b11111101;3'b010:y=8'b11111011;3'b011:y=8'b11110111;3'b100:y=8'b11101111;3'b101:y=8'b11011111;3'b110:y=8'b10111111;3'b111:y=8'b01111111;default:y=8'b11111111;endcaseendelsey=8'b11111111;endendmodule3-8譯碼器(Decoder)Maxplus2庫—74138Primitives(原語)庫
緩沖器buffer
邏輯門logic--nand
其他功能other—gnd,vcc
引腳pin—input,output
存儲單元storage2、8-3(PriorityEncoder)【例7.25】8線—3線優先編碼器74148的Verilog描述modulettl74148(din,ei,gs,eo,dout);input[7:0]din;inputei;outputreggs,eo;outputreg[2:0]dout;always@(ei,din)beginif(ei)begindout<=3'b111;gs<=1'b1;eo<=1'b1;endelseif(din==8'b111111111)begindout<=3'b111;gs<=1'b1;eo<=1'b0;endelseif(!din[7])begindout<=3'b000;gs<=1'b0;eo<=1'b1;endelseif(!din[6])begindout<=3'b001;gs<=1'b0;eo<=1'b1;endelseif(!din[5])begindout<=3'b010;gs<=1'b0;eo<=1'b1;endelseif(!din[4])begindout<=3'b011;gs<=1'b0;eo<=1'b1;endelseif(!din[3])begindout<=3'b100;gs<=1'b0;eo<=1'b1;endelseif(!din[2])begindout<=3'b101;gs<=1'b0;eo<=1'b1;endelseif(!din[1])begindout<=3'b110;gs<=1'b0;eo<=1'b1;endelsebegindout<=3'b111;gs<=1'b0;eo<=1'b1;endendendmodule2、8-3(PriorityEncoder)【例7.26】用函數定義的8線—3線優先編碼器74148的Verilog描述modulecoder83(din,dout);input[7:0]din;output[2:0]dout;function[2:0]code;//函數定義input[7:0]din;//函數只有輸入端口,輸出為函數名本身if(din[7])code=3'd7;elseif(din[6])code=3'd6;elseif(din[5])code=3'd5;elseif(din[4])code=3'd4;elseif(din[3])code=3'd3;elseif(din[2])code=3'd2;elseif(din[1])code=3'd1;elsecode=3'd0;endfunctionassigndout=code(din);//函數調用endmodule在使用函數時,需注意1、函數的定義與調用須在一個module模塊內。
2、函數只允許有輸入變量且必須至少有一個輸入變量,輸出變量由函數名本身擔任,在定義函數時,需對函數名說明其類型和位寬。
3、定義函數時,沒有端口名列表,但調用函數時,需列出端口名列表,端口名的排序和類型必須與定義時的相一致。這一點與任務相同
4、函數可以出現在持續賦值assign的右端表達式中。
5、函數不能調用任務,而任務可以調用別的任務和函數,且調用任務和函數個數不受限制。3、奇偶校驗(ParityCheck)位產生器【例7.27】奇偶校驗位產生器moduleparity(even_bit,odd_bit,a);input[7:0]a;outputeven_bit,odd_bit;assigneven_bit=^a; //生成偶校驗位assignodd_bit=~even_bit; //生成奇校驗位endmodule7.8
基本時序電路設計【例7.29】帶異步清0/異步置1的JK觸發器modulejkff_rs(clk,j,k,q,rs,set);inputclk,j,k,set,rs;outputregq;always@(posedgeclk,negedgers,negedgeset)beginif(!rs)q<=1'b0;elseif(!set)q<=1'b1;elsecase({j,k})2'b00:q<=q;2'b01:q<=1'b0;2'b10:q<=1'b1;2'b11:q<=~q;default:q<=1'bx;endcaseendendmodule鎖存器(latch)【例7.30】電平敏感的1位數據鎖存器modulelatch1(q,d,le);inputd,le;outputq;assignq=le?d:q; //le為高電平時,將輸入端數據鎖存endmodule鎖存器(latch)【例7.31】帶置位/復位端的1位數據鎖存器modulelatch2(q,d,le,set,reset);inputd,le,set,reset;outputq;assignq=reset?0:(set?1:(le?d:q));endmodule鎖存器(latch)【例7.32】8位數據鎖存器(74LS373)modulettl373(le,oe,q,d);inputle,oe;input[7:0]d;outputreg[7:0]q;always@* //或寫為always@(le,oe,d)beginif(~oe&le)q<=d; //或寫為if((!oe)&&(le))elseq<=8'bz;endendmodule3.4.6
存儲器模塊(storage)P89參數化鎖存器lpm_latch數據寄存器(register)【例7.33】數據寄存器modulereg_w(dout,din,clk,clr);parameterWIDTH=7;inputclk,clr;input[WIDTH:0]din;outputreg[WIDTH:0]dout;always@(posedgeclk,posedgeclr)beginif(clr)dout<=0;elsedout<=din;endendmodule數據鎖存器與數據寄存器-P183數據鎖存器(latch)與數據寄存器(register)的區別:(1)Latch:一般由電平信號控制,屬于電平敏感型;Register:一般由時鐘信號控制,屬于邊沿敏感型。(2)有不同的使用場合,主要取決于控制方式及控制信號和數據信號之間的時序關系:若數據有效滯后于控制信號有效,則只能用鎖存器;若數據提前于控制信號,并要求同步操作,則可以選擇寄存器來存放數據。8位移位寄存器-P183【例7.34】8位移位寄存器moduleshift8(dout,din,clk,clr);inputclk,clr,din;outputreg[7:0]dout;always@(posedgeclk)beginif(clr)dout<=8‘b0;//同步清0,高電平有效elsebegindout<=dout<<1;//輸出信號左移一位
dout[0]<=din;//輸入信號補充到輸出信號的最低位
endendendmodule計數器【例7.35】可變模加法/減法計數器moduleupdown_count(d,clk,clear,load,up_down,qd);inputclk,clear,load,up_down;input[7:0]d;output[7:0]qd;reg[7:0]cnt;assignqd=cnt;always@(posedgeclk)beginif(!clear) cnt<=8'h00; //同步清0,低電平有效elseif(load) cnt<=d; //同步預置elseif(up_down) cnt<=cnt+1; //加法計數else cnt<=cnt-1; //減法計數endendmodule7.9三態邏輯設計
【例7.39】行為描述的三態門moduletristate1(in,en,out);inputin,en;outputregout;always@(inoren)beginif(en)out<=in;elseout<=1'bz;endendmodule【例7.40】調用門元件bufif1描述的三態門moduletristate2(in,en,out);inputin,en;outputout;triout;bufif1b1(out,in,en); //注意三態門端口的排列順序endmodule【例7.41】數據流描述的三態門moduletristate3(out,in,en);inputin,en;outputout;assignout=en?in:1‘bz; //若en=1,out=in; //若en=0,out為高阻態endmodule【例7.42】三態雙向驅動器modulebidir(y,a,en,b);inputa,en;outputb;inouty;assigny=en?a:'bz;assignb=y;endmodule【例7.44】三態雙向總線緩沖器modulettl245(a,b,oe,dir);inputoe,dir; //使能信號和方向控制inout[7:0]a,b; //雙向數據線assigna=({oe,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土木工程師考試學習動力維持試題及答案
- 2025年英語角度的試題及答案
- 固體物理基本概念試題及答案
- 中國窄帶鋼行業市場發展現狀及前景趨勢與投資分析研究報告2025-2028版
- 2025年土木工程師考試全方位試題及答案
- 2025年大學化學考試化學生物技術試題及答案
- 中國電磁爐控制器行業市場發展前景及發展趨勢與投資戰略研究報告2025-2028版
- 商務英語戰略規劃試題及答案
- 2025年樂理考試復習計劃制定試題及答案
- 2024年金華市義烏市衛生健康系統畢業生招聘筆試真題
- 水果店運營與管理培訓課件
- 2025至2031年中國電機芯片行業投資前景及策略咨詢研究報告
- 2025年學校五一跨學科主題實踐活動方案
- 2024年華中科技大學招聘職員筆試真題
- 機電自動化試題及答案
- 2025年一級建造師之一建礦業工程實務題庫附答案(典型題)
- 甘肅省2025年甘肅高三月考試卷(四4月)(甘肅二診)(數學試題+答案)
- 2025年中小學教師資格考試的重要試題及答案
- 微訓練 一文多考 備考高效之詩歌《蘇幕遮?燎沉香》教師版
- 2025屆山東省濟南市一模生物試題(原卷版+解析版)
- 海南地理會考試卷及答案2024
評論
0/150
提交評論