VerilogHDL第五讲Verilog实例.ppt

上传人:小飞机 文档编号:5576398 上传时间:2023-07-29 格式:PPT 页数:38 大小:295.49KB
返回 下载 相关 举报
VerilogHDL第五讲Verilog实例.ppt_第1页
第1页 / 共38页
VerilogHDL第五讲Verilog实例.ppt_第2页
第2页 / 共38页
VerilogHDL第五讲Verilog实例.ppt_第3页
第3页 / 共38页
VerilogHDL第五讲Verilog实例.ppt_第4页
第4页 / 共38页
VerilogHDL第五讲Verilog实例.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《VerilogHDL第五讲Verilog实例.ppt》由会员分享,可在线阅读,更多相关《VerilogHDL第五讲Verilog实例.ppt(38页珍藏版)》请在三一办公上搜索。

1、第五讲 门电路的描述和设计实例,5.1基本门电路的描述,一个逻辑电路是由许多逻辑门和开关所组成,因此用逻辑门的模型来描述逻辑电路结构是最直观的。VerilogHDL提供了一些描述门类型的关键字,可以用于门级结构建模。VerilogHDL内含的基本元件模型共有26种,其中14种为基本门级元件,12种为开关级元件,,门电路列表,门与开关的说明语法可以用标准的声明语句格式和一个简单的实例引用加以说明基本格式如下:,门的类型是门声明语句所必须的,它可以是VerilogHDL语法规定的26门类型中的任意一种。驱动能力和延时是可选的,可根据不同的情况选不同的值或不选。门实例1是在本模块中引用的第一个这种类

2、型的门的名称及端口定义,而门实例n是引用的第n个这种类型的门的名称及端口定义。例:nand#10nd1(a,data,clock,clear);这个例子说明在模块中使用了一个名为nd1的与非门,输入为clock,data,clear 输出为a,输出与输入得延时为10个单位时间,基本门的逻辑真值表,Nand和nor真值表,Xor和xnor真值表,门级延时的说明,门级延时反映的是信号的变化从门级元件的任意输入端口流动到任一输出端口所经历的传输延迟主要可以分为:上升延时 下降延时 截至延时 到不定态的延时,门级延时量的基本表示方式,当门级延时量只包含一个延时值时,也就是说当门级延时说明部分是#d形式

3、时,延时值d将同时代表元件实例的上升延时值,下降延时值,截至延时值,到不定态的延时值,当门级延时量包含两个延时值是,也就是当门级延时说明部分是#(d1,d2)形式时,元件实例的上升延时值,下降延时值将指定,同理,当有3个延时值,前三个将指定,5.2组合逻辑电路设计实例(1)加法器,module adder_8(cout,sum,a,b,cin);output cout;output 7:0 sum;input cin;input7:0 a,b;assign cout,sum=a+b+cin;endmodule,module compare(equal,a,b);parameter size=1

4、;output equal;input size-1:0 a,b;assign equal=(a=b)?1:0;endmodule,(2)比较器,(3)3-8译码器,module decoder(out,in);output 7:0 out;input 2:0 in;assign out=1b1in;/*把最低位的1左移 in(根据从in口输入的值)位,并赋予out*/endmodule,(4)BCD/七段译码器,module bin7seg(data_in,EN,data_out);input 3:0 data_in;input EN;output 6:0 data_out;reg 6:0

5、data_out;always(data_in or EN)begindata_out=7b1111111;if(EN=1)case(data_in)4b0000:data_out=7b1000000;/04b0001:data_out=7b1111001;/14b0010:data_out=7b0100100;/24b0011:data_out=7b0110000;/34b0100:data_out=7b0011001;/44b0101:data_out=7b0010010;/5,(续)BCD/七段译码器,4b0110:data_out=7b0000011;/64b0111:data_out

6、=7b1111000;/74b1000:data_out=7b0000000;/84b1001:data_out=7b0011000;/94b1010:data_out=7b0001000;/A4b1011:data_out=7b0000011;/b4b1100:data_out=7b0100111;/c4b1101:data_out=7b0100001;/d4b1110:data_out=7b0000110;/E4b1111:data_out=7b0001110;/Fdefault:data_out=7b1111111;endcaseendendmodule,(5)多路器,module mu

7、x2(out,a,b,sel);output out;input a,b,sel;reg out;/用电平触发的always块来设计多路器的组合逻辑always(a or b or sel)begin/*检查输入信号sel的值,如为1,输出out为a,如为0,输出out为b.*/case(sel)1b1:out=a;1b0:out=b;default:out=bx;endcaseendendmodule,(6)用门级结构描述D触发器,moduleflop(data,clock,clear,q,qb);inputdata,clock,clear;outputq,qb;nand#10nd1(a,d

8、ata,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand#9nd3(c,a,d),nd7(q,e,qb);not#10iv1(ndata,data),iv2(nclock,clock);endmodule,设计示例二,include“flop.v”modulehardreg(d,clk,clrb,q);inputclk,clrb;input3:0 d;output3:0q;flopf1(d0,clk,clrb,q0,),f2(d1,clk

9、,clrb,q1,),f3(d2,clk,clrb,q2,),f4(d3,clk,clrb,q3,);endmodule,5.3时序电路设计实例(1)触发器,module dff(q,data,clk);output q;input data,clk;reg q;always(posedge clk)beginq=data;endendmodule,(2)带置位和复位端的电平敏感型锁存器,module latch2(q,data,clk,set,reset);output q;input data,clk,set,reset;assign q=reset?0:(set?1:(clk?data:

10、q);endmodule,(3)移位寄存器,module shifter(din,clk,clr,dout);input din,clk,clr;output 7:0 dout;reg 7:0 dout;always(posedge clk)begin if(clr)/清零 dout=8b0;else begin dout=dout1;/左移一位 dout0=din;/把输入信号放入寄存器的最低位 end endendmodule,(4)计数器,module counter1(out,cout,data,load,cin,clk);output 7:0 out;output cout;inpu

11、t 7:0 data;input load,cin,clk;reg 7:0 out;always(posedge clk)begin if(load)out=data;else out=out+cin;endassign cout=/只有当out7:0的所有各位都为1/并且进位cin也为1时才能产生进位coutendmodule,5.4有限状态机实例,有限状态机是时序电路的通用模型,任何时序电路都可以表示成为状态机。状态机有两类:(1)Moore型。下一状态只与当前状态有关。(2)Mealy型。下一状态与当前状态和输入有关。有限状态机本质上是由寄存器和组合逻辑电路构成的时序电路。有限状态机设计

12、步骤:(1)逻辑抽象,设置状态并优化。(2)根据状态转移关系画出状态转移图。(3)确定状态输出方程。(4)按照状态转移图和状态输出方程,进行设计描述。一般描述状态机主要使用Case语句。,有限状态机的设计实例,例:简单的交通灯 state0:汽车通行状态,汽车绿灯亮state1:接受行人请求后延时10秒state2:汽车黄灯亮state3:汽车红灯亮,行人绿灯亮state4:行人黄灯亮state5:行人红灯亮,汽车绿灯亮,但是不响应行人请求,/行人过街交通灯控制器module traffic3(rst,clk,press,lights,count);inputrst;/异步复位信号输入,高电平

13、复位inputclk;/状态机时钟输入inputpress;/过街按键信号输入,高电平有效output5:0lights;/交通灯控制输出output5:0count;/内部信号reg5:0count;/秒计数,最大60秒reg2:0states;/状态值reg5:0lights;/交通灯控制输出parameterstate0=3d0,state1=3d1,state2=3d2,state3=3d3,state4=3d4,state5=3d5;parameterlights1=6b001_100,lights2=6b010_100,lights3=6b100_001,lights4=6b100

14、_010;,例:简单的交通灯,always(posedge rst or posedge clk)begin if(rst)begin count=6d0;states=state0;end else begincase(states)state0:/汽车通行状态,等待按键beginif(press)beginstates=state1;/如果请求键按下,转到状态1count=6d10;/同时将count初值给定为10,灯光控制不变endend,(续1)简单的交通灯,state1:/汽车通行状态,但是请求键已经按下,延时10秒后起作用begin if(count6d0)begin count6

15、d0)begin count=count-1;end else/计数结束,转移到下一个状态,同时为计数器赋初值 begin states=state3;count=6d30;endend,(续2)简单的交通灯,state3:/汽车等待,行人通行,时间30秒beginif(count6d0)begin count6d0)begin count=count-1;endelse begin states=state5;count=6d60;end end,(续3)简单的交通灯,state5:/汽车通行,不响应按键的状态beginif(count6d0)begin count=count-1;ende

16、lse begin states=state0;/等待结束,回到状态0 count=6d0;endend default:begincount=hx;states=hx;end endcase endend,(续4)简单的交通灯,/根据当前状态输出灯光控制always(negedge clk)begincase(states)state0:lights=lights1;state1:lights=lights1;state2:lights=lights2;state3:lights=lights3;state4:lights=lights4;state5:lights=lights1;defa

17、ult:lights=hx;endcaseendendmodule,(续5)简单的交通灯,设计示例(续),设计示例(续),module fsm(Clock,Reset,A,F,G);input Clock,Reset,A;output F,G;reg F,G;reg 1:0 state;parameter Idle=2b00,Start=2b01,Stop=2b10,Clear=2b11;always(posedge Clock)if(!Reset)begin state=Idle;F=0;G=0;end else,设计示例(续),case(state)idle:begin if(A)stat

18、e=Start;G=0;end start:if(!A)state=Stop;Stop:begin if(A)state=Clear;F=1;end Clear:begin if(!A)state=Idle;F=0;G=1;end endcaseendmodule,设计示例(续),还可以用另一个Verilog HDL模型来表示同一个有限状态,见下例:module fsm(Clock,Reset,A,F,G);input Clock,Reset,A;output F,G;reg F,G;reg 3:0 state;parameter Idle=4b1000,Start=4b0100,Stop=4

19、b0010,Clear=4b0001;,设计示例(续),always(posedge clock)if(!Reset)begin state=Idle;F=0;G=0;end else case(state)Idle:begin if(A)state=Start;G=0;end Start:if(!A)state=Stop;Stop:begin if(A)state=Clear;,设计示例(续),F=1;end Clear:begin if(!A)state=Idle;F=0;G=1;end default:state=Idle;endcaseendmodule,设计示例(续),我们还可以用另

20、一种风格的Verilog HDL模型来表示同一个有限状态。在这个模型中,我们把用always语句在时钟沿触发条件下的状态变化放在一个独立的块中,而把在状态控制下的两个开关分两个独立的组合逻辑always块来描述。见下例:module fsm(Clock,Reset,A,F,G);input Clock,Reset,A;output F,G;reg 1:0 state;reg F,G;parameter Idle=2b00,Start=2b01,Stop=2b10,Clear=2b11;,设计示例(续),always(posedge Clock)if(!Reset)begin state=Idl

21、e;end else case(state)Idle:if(A)state=Start;Start:if(!A)state=Stop;Stop:if(A)state=Clear;Clear:if(!A)state=Idle;default:state=2 bxx;endcase,设计示例(续),always(state or Reset or A)begin if(!Reset)F=0;else if(state=Stop)F=1;end always(state or Reset or A)begin if(!Reset)G=0;else if(state=Clear)G=1;end endmodule,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号