資源描述:
《VerilogHDL(自學(xué))》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第七章用VerilogHDL設(shè)計數(shù)字電路主要內(nèi)容:7.1常用組合電路的設(shè)計門電路的描述譯碼器、編碼器數(shù)據(jù)選擇器奇偶校驗器BCD碼-七段譯碼器運算電路(補充)7.2常用時序電路模塊D觸發(fā)器數(shù)據(jù)鎖存器數(shù)據(jù)寄存器移位寄存器各種計數(shù)器7.1常用組合電路的設(shè)計(組合電路以自學(xué)為主)1.基本門電路的描述7.1.1簡單門電路的描述方法1:調(diào)用門原語modulegate1(F,A,B,C,D);inputA,B,C,D;outputF;wireF1,F2;nandG1(F1,A,B);andG2(F2,B,C,D);orG3(F,F1,F2);endmodule門的名稱:可省略。原語多輸入門:
2、原語名<例化名稱>(輸出,輸入1,輸入2……)調(diào)用格式:非門:原語名<例化名稱>(輸出,輸入)&&≥1ABCDFF1F2G1G2G3結(jié)構(gòu)描述方法2:用assign連續(xù)賦值語句描述&&≥1ABCDFF1F2modulegate2(F,A,B,C,D);inputA,B,C,D;outputF;assignF=~(A&B)
3、(B&C&D);endmodule方法3:用過程賦值語句描述modulegate3(F,A,B,C,D);inputA,B,C,D;outputF;regF;always@(AorBorCorD)beginF=~(A&B)
4、(B&C&D);endendmodul
5、e敏感信號表:與同步時序電路差別?邏輯表達式2.三態(tài)門例7.2用bufifl關(guān)鍵字描述的三態(tài)門ENBufif1原語:moduletristate(in,oe,out);inputin,oe;outputout;triout;//注意三態(tài)門端口的排列順序bufif1b1(out,in,oe);//(輸入,輸出,使能)endmodule例7.3用assign描述的三態(tài)門moduletri_1(out,in,en);outputout;inputin,en;assignout=en?in:1'bz;//若en=1,out=in;若en=0,out為高阻態(tài)endmoduleENouti
6、noeb1ENoutinen與wire一樣例7.4用三態(tài)雙向驅(qū)動器modulebidir(tri_inout,out,in,en,b);inouttri_inout;outputout;inputin,en,b;assigntri_inout=en?in:1'bz;//三態(tài)門assignout=tri_inout^b;endmodule雙向端口ENinen=1tri_inoutoutb7.1.2譯碼器、編碼器1.3線_8線譯碼器(輸出低電平有效)01234567out0out7BIN/OCT012in0in1in2moduleedcoder_38(out,in);output[
7、7:0]out;input[2:0]in;reg[7:0]out;always@(in)begincase(in)3'd0:out=8'b1111_1110;3'd1:out=8'b1111_1101;3'd2:out=8'b1111_1011;3'd3:out=8'b1111_0111;3'd4:out=8'b1110_1111;3'd5:out=8'b1101_1111;3'd6:out=8'b1011_1111;3'd7:out=8'b0111_1111;endcaseendendmodule分隔符,便于閱讀真值表2.8線_3線高優(yōu)先編碼器01234567BIN/OCTo
8、utcode1outcode2abcdefgh012outcode001234567BIN/OCToutcode1outcode2abcdefgh012outcode0none_on(輸入無效)方法1:用if_else語句描述編碼器moduleencoder8_3(none_on,outcode,a,b,c,d,e,f,g,h);output[2:0]outcode;outputnone_on;inputa,b,c,d,e,f,g,h;reg[3:0]outtemp;assign{none_on,outcode}=outtemp;always@(aorborcordoreorf
9、orgorh)beginif(h)outtemp=4'b0_111;elseif(g)outtemp=4'b0_110;elseif(f)outtemp=4'b0_101;elseif(e)outtemp=4'b0_100;elseif(d)outtemp=4'b0_011;elseif(c)outtemp=4'b0_010;elseif(b)outtemp=4'b0_001;elseif(a)outtemp=4'b0_000;elseouttemp=4'b1_000;endendmodul