资源描述:
《VerilogHDL(自学)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第七章用VerilogHDL设计数字电路主要内容:7.1常用组合电路的设计门电路的描述译码器、编码器数据选择器奇偶校验器BCD码-七段译码器运算电路(补充)7.2常用时序电路模块D触发器数据锁存器数据寄存器移位寄存器各种计数器7.1常用组合电路的设计(组合电路以自学为主)1.基本门电路的描述7.1.1简单门电路的描述方法1:调用门原语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……)调用格式:非门:原语名<例化名称>(输出,输入)&&≥1ABCDFF1F2G1G2G3结构描述方法2:用assign连续赋值语句描述&&≥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.三态门例7.2用bufifl关键字描述的三态门ENBufif1原语:moduletristate(in,oe,out);inputin,oe;outputout;triout;//注意三态门端口的排列顺序bufif1b1(out,in,oe);//(输入,输出,使能)endmodule例7.3用assign描述的三态门moduletri_1(out,in,en);outputout;inputin,en;assignout=en?in:1'bz;//若en=1,out=in;若en=0,out为高阻态endmoduleENouti
6、noeb1ENoutinen与wire一样例7.4用三态双向驱动器modulebidir(tri_inout,out,in,en,b);inouttri_inout;outputout;inputin,en,b;assigntri_inout=en?in:1'bz;//三态门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线高优先编码器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