您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第六讲 常见组合与时序逻辑电路Verilog HDl描述
第九章VeirlogHDL数字电路设计实践主要内容一、常用组合电路模块的设计二、常用时序电路模块的设计三、多层次结构电路的设计(一)简单组合电路的描述1、基本门电路的描述常用组合电路模块的设计(2)用assign连续赋值语句描述modulegate1(F,A,B,C,D);inputA,B,C,D;outputF;assignF=(~(A&B))|(B&C&D);//连续赋值语句endmodule(3)用过程语句always块描述modulegate2(F,A,B,C,D);inputA,B,C,D;outputF;regF;always@(AorBorCorD)//always过程语句F=~(A&B)|(B&C&D);endmodule(1)调用内置门元件描述modulegate3(F,A,B,C,D);inputA,B,C,D;outputF;nand(F1,A,B);and(F2,B,C,D);or(F,F1,F2);//调用内置门endmodule2、三态门的描述regout;always@(enorin)out=en?in:’bz;end(2)用assign连续赋值语句描述(3)用过程语句always块描述(1)调用内置门元件描述bufif1b1(out,in,en);assignout=en?in:’bz;※在VerilogHDL中,描述简单的组合逻辑通常使用assign结构。注意:条件运算符是一种在组合逻辑实现分支判断时常使用的格式。(二)复杂组合电路的描述※一般用always块实现较复杂的组合逻辑电路1、3线-8线译码器moduledecoder_38(out,in);output[7:0]out;input[2:0]in;reg[7:0]out;always@(in)begincase(in)3’b000:out=8’b11111110;3’b001:out=8’b11111101;3’b010:out=8’b11111011;3’b011:out=8’b11110111;3’b100:out=8’b11101111;3’b101:out=8’b11011111;3’b110:out=8’b10111111;3’b111:out=8’b01111111;endcaseendendmoduleMAX+PLUSII编译后的生成的模块符号:moduledecode4_7(a,b,c,d,e,f,g,D3,D2,D1,D0);outputa,b,c,d,e,f,g;inputD3,D2,D1,D0;rega,b,c,d,e,f,g;always@(D3orD2orD1orD0)begincase({D3,D2,D1,D0})4’d0:{a,b,c,d,e,f,g}=7’b1111110;4’d1:{a,b,c,d,e,f,g}=7’b0110000;4’d2:{a,b,c,d,e,f,g}=7’b1101101;4’d3:{a,b,c,d,e,f,g}=7’b1111001;4’d4:{a,b,c,d,e,f,g}=7’b0110011;4’d5:{a,b,c,d,e,f,g}=7’b1011011;4’d6:{a,b,c,d,e,f,g}=7’b1011111;4’d7:{a,b,c,d,e,f,g}=7’b1110000;4’d8:{a,b,c,d,e,f,g}=7’b1111111;4’d9:{a,b,c,d,e,f,g}=7’b1111011;default:{a,b,c,d,e,f,g}=7’bx;endcaseendendmodule2、BCD码——七段数码显示译码器MAX+PLUSII编译后的生成的模块符号:3、8线-3优先编码器moduleencoder8_3(outcode,a,b,c,d,e,f,g,h);output[2:0]outcode;inputa,b,c,d,e,f,g,h;reg[2:0]outcode;always@(aorborcordoreorforgorh)beginif(h)outcode=3’b111;elseif(g)outcode=3’b110;elseif(f)outcode=3’b101;elseif(e)outcode=3’b100;elseif(d)outcode=3’b011;elseif(c)outcode=3’b010;elseif(b)outcode=3’b001;elseif(a)outcode=3’b000;endendmoduleMAX+PLUSII编译后的生成的模块符号:4、数据选择器(2选1、4选1)(略)(一)简单时序逻辑电路的描述※通常使用always块(@(posedgeclk)或@(negedgeclk)来描述时序逻辑。基本D触发器moduleDFF(Q,D,CLK);outputQ;inputD,CLK;regQ;always@(posedgeCLK)Q=D;endmodule常用时序电路模块设计(二)复杂时序逻辑电路的描述※通常在always过程语句里使用条件语句来实现较复杂的时序逻辑电路。1、带清零端、置1端的D触发器moduleDFF1(q,qn,d,clk,set,reset);outputq,qn;inputd,clk,set,reset;regq,qn;always@(posedgeclk)beginif(!reset)beginq=0;qn=1;endelseif(!set)beginq=1;qn=0;endelsebeginq=d;qn=~d;endendendmoduleornegedgesetornegedgereset)2、带清零端、置1端的JK触发器moduleJK_FF(CLK,J,K,Q,RS,SET);inputCLK,J,K,SET,RS;outputQ;regQ;always@(posedgeCLKornegedgeRSornegedgeSET)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;endcaseendendmodule3、数据寄存器modulereg8(out_data,in_data,clk,clr);output[7:0]out_data;input[7:0]in_data;inputclk,clr;reg[7:0]out_data;always@(posedgeclkorposedgeclr)beginif(clr)out_data=0;elseout_data=in_data;endendmodulemoduleshifter(din,clk,clr,dout);inputdin,clk,clr;output[7:0]dout;reg[7:0]dout;always@(posedgeclk)beginif(clr)dout=8’b0;elsebegindout=dout1;dout[0]=din;endendendmodule4、移位寄存器5、计数器moduleupdown_count(d,clk,clear,load,up_down,qd);input[3:0]d;inputclk,clear,load,up_down;output[3:0]qd;reg[3:0]qd;always@(posedgeclk)beginif(!clear)qd=4’h00;elseif(load)qd=d;elseif(up_dwon)qd=qd+1;elseqd=qd-1;endendmodule练习:用VerilogHDL语言描述一个十进制的计数器。要求:时钟上升沿触发,异步清零端低电平有效.本讲结束
本文标题:第六讲 常见组合与时序逻辑电路Verilog HDl描述
链接地址:https://www.777doc.com/doc-3360520 .html