常用电路的Verilog描述_第1页
常用电路的Verilog描述_第2页
常用电路的Verilog描述_第3页
常用电路的Verilog描述_第4页
常用电路的Verilog描述_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1常用电路的Verilog描述21.常用组合电路的设计方法组合电路特点:任意时刻的输出仅仅决定于该时刻的输入,与电路原来的状态无关。电路中无存储器、无反馈结构;无记忆功能。常用的组合电路:编码器译码器数据选择器加法器数值比较器奇偶校验器1.常用组合电路的设计方法3简单的组合关系可用门原语或assign语句或always语句实现;复杂的最好用always语句实现。用verilog语句设计组合电路比较简单,常用语句:门原语调用、assign语句、always语句1.常用组合电路的设计方法常见的四种已知情况:已知逻辑图;已知逻辑式;已知真值表;已知逻辑功能。1.常用组合电路的设计方法例1:已知逻辑式写出.v代码用assign语句或always语句全加器关键语句assignS=A^B^CI;assignCO=(A&B)|(A&CI)|(B&CI);always@(A,B,CI)beginS=A^B^CI;CO=(A&B)|(A&CI)|(B&CI);end或者1.常用组合电路的设计方法例2:已知逻辑图,写出.v代码适合用门原语或assign语句全加器and(m1,A,B,C);or(m2,A,B,C);and(m3,A,B);and(m4,A,C);and(m5,B,C);or(Y2,m3,m4,m5);not(m6,Y2);and(m7,m2,m6);or(Y1,m1,m7);关键语句1.常用组合电路的设计方法例3:已知真值表,写出.V代码。用always语句(配合case语句)全减器always@(A,B,C)begincase({A,B,C})3'b000:{D,V}=2’b00;3'b001:{D,V}=2’b11;3'b010:{D,V}=2’b11;3'b011:{D,V}=2’b01;3'b100:{D,V}=2’b10;3'b101:{D,V}=2’b10;3'b110:{D,V}=2’b00;3'b110:{D,V}=2’b11;default:y=1'b0;endcase关键语句81.常用组合电路的设计方法例4:裁判电路,主裁判和两个副裁判之一同意则通过,否则不通过。用always语句(配合if语句)always@(A,B,C)if(A&&(B||C))y=1’b1;elseY=1’b0;关键语句2.常用组合电路的设计方法用always语句设计组合电路时要注意:敏感条件为电平变化若用if语句或case语句,条件要完整,否则会综合出寄存器。1.常用组合电路的设计方法例:用if语句实现3选1数据选择器。moduleMUX31(a,b,c,s1,s0,y);inputa,b,c,s1,s0;outputregy;always@(a,b,c,s1,s0)if({s1,s0}==2'b00)y=a;elseif({s1,s0}==2'b01)y=b;elseif({s1,s0}==2'b10)y=c;elsey=1'b0;endmodule111.常用组合电路的设计方法加elsealways@(a,b)if(sel)Q=a;elseQ=b;always@(a,b)Q=b;if(sel)Q=a;使if语句条件完整的两种方法:2.在if之前设初值1.常用组合电路的设计方法用case语句实现3选1数据选择器:moduleMUX31(a,b,c,s1,s0,y);inputa,b,c,s1,s0;outputregy;always@(a,b,c,s1,s0)begincase({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;default:y=1'b0;endcaseendendmodule131.常用组合电路的设计方法3.case所有情况case语句使条件完整的三种方法:1.加defaultcase({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;default:y=1'b0;endcasecase({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;2’b11:y=0;endcase2.在case前设初值y=1'b0;case({s1,s0})2'b00:y=a;2'b01:y=b;2'b10:y=c;endcase1.常用组合电路的设计方法编码器设计always@(I7,I6,I5,I4,I3,I2,I1,I0)case({I7,I6,I5,I4,I3,I2,I1}) 7’b1000000:{Y2,Y1,Y0}=3’b111; 7’b0100000:{Y2,Y1,Y0}=3’b110; 7’b0010000:{Y2,Y1,Y0}=3’b101; …… 7’b0000001:{Y2,Y1,Y0}=3’b001; default:{Y2,Y1,Y0}=3’b000;endcaseencoderI7I6I5I4I3I2I1I0Y2Y1Y0普通编码器:任意时刻有且只有一个输入有效关键语句用case语句例8/3线编码器151.常用组合电路的设计方法always@(*)if(I7){Y2,Y1,Y0}=3’b111;elseif(I6){Y2,Y1,Y0}=3’b110;elseif(I5)……..优先编码器:可以多个输入有效,输出优先级高的信号编码if语句能体现优先级功能,故可使用if语句设计优先编码器关键语句用case语句161.常用组合电路的设计方法casex语句也能体现优先级功能。case({A,B,C})7'b1xx:Y=3’d1;7'b01x

:Y=3’d2;7'b001:Y=3’d3;default:Y=3’d4;case语句有三种:case、casez、czsex;case语句0、1、x、z都要比较,最严格;casez只比较0、1和x,不比较z;casex只比较0、1,不比较z和x。casex({A,B,C})7'b1xx:Y=3’d1;7'b01x

:Y=3’d2;7'b001:Y=3’d3;default:Y=3’d4;若{A,B,C}=010Y=4Y=2171.常用组合电路的设计方法casex({I7,I6,I5,I4,I3,I2,I1}) 7'b1xxxxxx:{Y2,Y1,Y0}=3'b111; 7'b01xxxxx:{Y2,Y1,Y0}=3'b110; 7'b001xxxx:{Y2,Y1,Y0}=3'b101; 7'b0001xxx:{Y2,Y1,Y0}=3'b100; 7'b00001xx:{Y2,Y1,Y0}=3'b011; 7'b000001x:{Y2,Y1,Y0}=3'b010; 7'b0000001:{Y2,Y1,Y0}=3'b001; default:{Y2,Y1,Y0}=3'b000;用casex语句设计优先编码器181.常用组合电路的设计方法译码器设计decoderY7Y6Y5Y4Y3Y2Y1Y0A2A1A0always@(*)case({A2,A1,A0}) 3’b000:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000001; 3’b001:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000010; 3’b010:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000100; …… 3’b111:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b10000000; default:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b11111111;endcase用case语句关键语句例3/8线译码器191.常用组合电路的设计方法带片选端的译码器怎样设计?always@(*)if({S1,S2,S3==3’b100})

case({A2,A1,A0}) 3’b000:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000001; 3’b001:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000010; 3’b010:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b00000100; …… 3’b111:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b10000000; default:{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b11111111;endcaseelse{Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0}=8’b11111111;用if语句设计片选功能。1.常用组合电路的设计方法数据选择器设计MUXYalways@(*)case({S1,S0}) 2’b00:Y=D0; 2’b01:Y=D1; 2’b10:Y=D2; 2’b11:Y=D3; default:Y=1’b0;endcaseD3D2D1D0S1S0关键语句4选1数据选择器思考:带片选端的数据选择器怎样设计?211.常用组合电路的设计方法加法器设计always@(*){Co,S3S2S1S0}=A3A2A1A0+B3B2B1B0+Ci;ADDERCoA3A2A1A0B3B2B1B0S3S2S1S0Ci关键语句4位二进制加法器1.常用组合电路的设计方法奇偶校验器设计outputreg[7:0]D;always@(*)beginodd=D[0]^D[1]^D[2]^D[3]^D[4]^D[5]^D[6]^D[7];endassigneven=~odd;parityDevenodd用异或运算关键语句8位奇偶校验器always@(*)beginodd=~D;even=~odd;end或者:231.常用组合电路的设计方法outputreg[7:0]D;always@(*)beginodd=0;

for(i=0;i<7;i=i+1)begin

odd=D[i]^odd;endendassigneven=~odd;parityDevenodd用for循环语句关键语句241.常用组合电路的设计方法for语句用法

循环语句,只能在过程块中使用格式例:for(i=0;i<=3;i=i+1)begin R=R+1;endfor(循环初始值设置表达式;循环控制条件表达式;循环控制变量增值表达式)begin循环体语句结构end初值、条件、调整251.常用组合电路的设计方法三态门及其应用电路设计

三态门可以用门原语、条件赋值语句、if语句实现always@(ENAorDIN)if(ENA)DOUT=DIN;elseDOUT=1’bz;assignDOUT=ENA?DIN:1’bz;DOUTENADINbufif1(DOUT,DIN,ENA);261.常用组合电路的设计方法三态门构成的双向端口设计用两条门原语调用语句用两条assign语句用两条if语句inoutseldata_indata_outassigndata_in=!sel?inout:1’bz;assigninout=sel?dataout:1’bz;always@(*)if(!sel)data_in=inout;elsedata_in=1’bz;always@(*)

if(sel)inout=data_out;elseinout=1’bz;技巧:先画出图,用连续赋值语句直接描述比较方便。bufif0(data_in,inout,sel);bufif1(inout,data_out,sel);271.常用组合电路的设计方法三态门构成的总线控制电路设计

两个(或多个)输出接在一起,若ENA=1,则DOUT=IN1;否则,DOUT=IN0。注意不是数据选择器结构。1用门原语设计2用assign语句描述3用if语句描述bufif0(DOUT,IN0,ENA);bufif1(DOUT,IN1,ENA);281.常用组合电路的设计方法用assign语句描述moduletriBUS4(IN1,IN0,ENA,DOUT);inputIN1,IN0;outputDOUT;inputENA;assignDOUT=(ENA==1'b0)?IN0:1'bz;assignDOUT=(ENA==1'b1)?IN1:1'bz;endmodule这种情况下允许对同一个信号赋值。但是如果不是三态门输出的话是不允许的。291.常用组合电路的设计方法用if语句描述moduletriBUS4(IN1,IN0,ENA,DOUT);inputIN1,IN0;outputregDOUT;inputENA;always@(ENA,IN0)begin if(ENA==1'b0)DOUT=IN0; elseDOUT=1'hz;end

always@(ENA,IN1)begin if(ENA==1'b1)DOUT=IN1; elseDOUT=1'hz;endendmodule这种情况下允许在两个always块中对同一个信号赋值,但是如果不是三态门输出的话是不允许的。302.常用时序电路的设计方法时序电路的描述特点:任意时刻的输出不仅决定于该时刻的输入,而且与电路原来的状态有关。电路中有存储器或无反馈结构;有记忆功能。时序电路多为边沿触发,也有电平触发。常用的时序电路基本SR锁存器电平触发D触发器边沿触发D触发器计数器移位寄存器顺序脉冲发生器序列信号检测器312.常用时序电路的设计方法时序电路的描述特点:时序电路一般用always语句描述一般采用case语句、if语句经常利用case、if语句的条件不完整性实现寄存器(即不加else)一般采用非阻塞赋值边沿触发器敏感信号表中的时钟条件用边沿变化电平触发器敏感信号表中的时钟条件用电平变化边沿触发器型时序模块中异步控制信号的设计:在敏感信号表中给出边沿敏感描述,在过程结构中给出逻辑描述。边沿触发器型时序模块中同步控制信号的设计:不在敏感信号表中列出该信号,在过程结构中给出逻辑描述。电平触发型时序模块中异步控制信号的设计:在敏感信号表中给出电平敏感描述,利用优先条件实现异步控制。322.常用时序电路的设计方法基本SR锁存器设计QnQSR关键语句

nand(Q,S,nQ);nand(nQ,R,Q);assignQ=

~(S&nQ);assignnQ=~(R&Q);always@(*)beginQ=

~(S&nQ);

nQ=~(R&Q);end2.常用时序电路的设计方法电平触发D触发器电平触发D触发器功能:当CLK=1时,Q=D否则,Q保持原值不变。assignQ=CLK?D:Q;always@(D,CLK)

if(CLK)Q<=D;关键语句

2.常用时序电路的设计方法边沿D触发器功能:边沿D触发器always@(posedgeclk)

Q<=D;关键语句

边沿触发器只能用always语句配合边沿敏感信号描述352.常用时序电路的设计方法含有复位控制端的边沿触发器异步复位:当复位信号有效时,触发器立即复位;(即复位控制不受时钟控制)同步复位:当复位信号有效时,触发器不会立即复位,而是要等到时钟信号到来时才复位。(即复位控制与时钟同步)362.常用时序电路的设计方法异步复位控制描述:方法:用if语句描述复位条件,且复位信号作为边沿敏感条件;always@(posedgeCLKornegedgeRST)

if(!RST)Q<=1’b0;

elseQ<=D;endmodule同步复位控制描述:always@(posedgeCLK)

if(!RST)Q<=1’b0;

elseQ<=D;方法:用if语句描述复位条件,但复位信号不作为敏感条件;当复位信号下降沿到来时,启动always块,立即复位。不受时钟控制;当时钟上升沿到来时,启动always块,如果复位条件成立则复位。复位受时钟控制;372.常用时序电路的设计方法异步时序电路特点:不是同一个时钟,例图always@(posedgeCLK)Q1<=A|Q;always@(posedgeQ1)Q<=D;Q1方法:分别用不同的always块描述不同的时钟异步时序电路设计382.常用时序电路的设计方法计数器设计二进制计数器功能:392.常用时序电路的设计方法

方法:用always语句块实现。计数时钟用边沿触发描述。加法计数用加法实现,减法计数用减法实现;计数容量控制用if…else…语句实现(配合比较条件);如果除计数容量控制以外还有清零、置数、使能等控制,可使用if…elseif…else…语句实现,利用条件优先级实现优先控制。进位输出用组合逻辑描述即可。40moduleCounter_4B(CLK,Q);inputCLK;output[3:0]Q;regQ;always@(posedgeCLK)Q<=Q+1;endmodule无计数容量等控制,简单的加1计算即可。412.常用时序电路的设计方法功能更全面的计数器设计

功能:1十进制计数,计数范围0~9 2异步复位,低电平有效

3同步计数使能,高电平有效,当使能有效时,才能计数或置数

4同步预置数,低电平有效

5进位输出,高电平有效,计至9,输出高电平控制优先级顺序:复位、使能、置数、计数42always @(posedgeCLKornegedgenRST) begin if(!nRST)Q=0;/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论