VerilogHDL第五讲Verilog实例课件.ppt
38页第五讲第五讲 门电路的描述和门电路的描述和设计实例设计实例VerilogHDL第五讲Verilog实例5.1基本门电路的描述一个逻辑电路是由许多逻辑门和开关所组成,因此用逻辑门的模型来描述逻辑电路结构是最直观的VerilogHDL提供了一些描述门类型的关键字,可以用于门级结构建模VerilogHDL内含的基本元件模型共有26种,其中14种为基本门级元件,12种为开关级元件,VerilogHDL第五讲Verilog实例5.1.1门电路列表多输入门and(与门) nand(与非门)or (或门)nor (或非门)xor(异或门) xnor (异或非门)多输出门buf (缓冲器)not(非门)三态门bufif0 (高电平使能缓冲期) bufif1 (低电平使能缓冲期)notif0 (高电平使能非门) notif1(低电平使能非门)上拉,下拉电阻pullup(上拉电阻) pulldown(下拉电阻)VerilogHDL第五讲Verilog实例门与开关的说明语法可以用标准的声明语句格式和一个简单的实例引用加以说明基本格式如下:<门的类型> [<驱动能力><延时>]<门实例1>[,<门实例2>,<门实例3>……]门的类型是门声明语句所必须的,它可以是VerilogHDL语法规定的26门类型中的任意一种。
驱动能力和延时是可选的,可根据不同的情况选不同的值或不选门实例1是在本模块中引用的第一个这种类型的门的名称及端口定义,而门实例n是引用的第n个这种类型的门的名称及端口定义例:nand #10nd1(a,data,clock,clear);这个例子说明在模块中使用了一个名为nd1的与非门,输入为clock,data,clear 输出为a,输出与输入得延时为10个单位时间VerilogHDL第五讲Verilog实例5.1.2基本门的逻辑真值表nand01xznor01xz01111010xx110xx10000x1xxxxx0xxz1xxxzx0xxNand和nor真值表VerilogHDL第五讲Verilog实例xor 01 xzxnor01xz001 xx010xx110 xx101xxxxxxxxxxxxzxxxxzxxxxXor和xnor真值表VerilogHDL第五讲Verilog实例5.1.3门级延时的说明门级延时反映的是信号的变化从门级元件的任意输入端口流动到任一输出端口所经历的传输延迟主要可以分为:上升延时 下降延时 截至延时 到不定态的延时VerilogHDL第五讲Verilog实例5.1.4门级延时量的基本表示方式当门级延时量只包含一个延时值时,也就是说当门级延时说明部分是#d形式时,延时值d将同时代表元件实例的上升延时值,下降延时值,截至延时值,到不定态的延时值,当门级延时量包含两个延时值是,也就是当门级延时说明部分是#(d1,d2)形式时,元件实例的上升延时值,下降延时值将指定,同理,当有3个延时值,前三个将指定 VerilogHDL第五讲Verilog实例5.2组合逻辑电路设计实例(1)加法器module adder_8(cout,sum,a,b,cin); output cout; output [7:0] sum; input cin; input[7:0] a,b; assign {cout,sum}=a+b+cin;endmoduleVerilogHDL第五讲Verilog实例module compare(equal,a,b);parameter size=1;output equal;input [size-1:0] a, b;assign equal =(a==b)? 1 : 0;endmodule(2)比较器VerilogHDL第五讲Verilog实例(3)3-8译码器module decoder(out,in);output [7:0] out;input [2:0] in; assign out = 1'b1< 状态机有两类:(1)Moore型下一状态只与当前状态有关2)Mealy型下一状态与当前状态和输入有关 有限状态机本质上是由寄存器和组合逻辑电路构成的时序电路 有限状态机设计步骤:(1)逻辑抽象,设置状态并优化2)根据状态转移关系画出状态转移图3)确定状态输出方程4)按照状态转移图和状态输出方程,进行设计描述一般描述状态机主要使用Case语句VerilogHDL第五讲Verilog实例有限状态机的设计实例有限状态机的设计实例例:简单的交通灯 state0 :汽车通行状态,汽车绿灯亮state1 :接受行人请求后延时10秒state2 :汽车黄灯亮state3 :汽车红灯亮,行人绿灯亮state4 :行人黄灯亮state5 :行人红灯亮,汽车绿灯亮,但是不响应行人请求VerilogHDL第五讲Verilog实例//行人过街交通灯控制器module traffic3(rst,clk,press,lights,count);inputrst;//异步复位信号输入,高电平复位inputclk;//状态机时钟输入inputpress;//过街按键信号输入,高电平有效output[5:0]lights;//交通灯控制输出output[5:0]count;//内部信号reg[5:0]count;//秒计数,最大60秒reg[2:0]states;//状态值reg[5:0]lights;//交通灯控制输出parameterstate0=3'd0,state1=3'd1,state2=3'd2,state3=3'd3,state4=3'd4,state5=3'd5;parameterlights1=6'b001_100, lights2=6'b010_100,lights3=6'b100_001, lights4=6'b100_010;例:简单的交通灯VerilogHDL第五讲Verilog实例always@(posedge rst or posedge clk) begin if(rst) begin count<=6'd0; states<=state0; end else begincase(states)state0://汽车通行状态,等待按键beginif(press)beginstates<=state1;//如果请求键按下,转到状态1count<=6'd10;//同时将count初值给定为10,灯光控制不变endend(续1)简单的交通灯VerilogHDL第五讲Verilog实例state1://汽车通行状态,但是请求键已经按下,延时10秒后起作用begin if(count>6'd0) begin count<=count-1; end else begin states<=state2;//计数结束,转换状态,同时为下一个状态计数器赋初值3 count<=6'd3; endendstate2://汽车通道黄灯begin if(count>6'd0) begin count<=count-1; end else//计数结束,转移到下一个状态,同时为计数器赋初值 begin states<=state3; count<=6'd30; endend(续2)简单的交通灯VerilogHDL第五讲Verilog实例state3://汽车等待,行人通行,时间30秒beginif(count>6'd0) begin count<=count-1; endelse begin states<=state4; count<=6'd3; endendstate4://行人通行黄灯,时间3秒beginif(count>6'd0) begin count<=count-1; endelse begin states<=state5; count<=6'd60; end end(续3)简单的交通灯VerilogHDL第五讲Verilog实例 state5://汽车通行,不响应按键的状态beginif(count>6'd0) begin count<=count-1; endelse begin states<=state0;//等待结束,回到状态0 count<=6'd0; endend default:begincount<='hx;states<='hx;end endcase endend(续4)简单的交通灯VerilogHDL第五讲Verilog实例//根据当前状态输出灯光控制always@(negedge clk)begincase(states)state0: lights<=lights1;state1: lights<=lights1;state2: lights<=lights2;state3: lights<=lights3;state4: lights<=lights4;state5: lights<=lights1;default: lights<='hx;endcaseendendmodule(续5)简单的交通灯VerilogHDL第五讲Verilog实例 设计示例(续)设计示例(续)VerilogHDL第五讲Verilog实例 设计示例(续)设计示例(续)module fsm (Clock, Reset, A, F, G);input Clock, Reset, A;output F,G;reg F,G;reg [1:0] state ;parameter Idle = 2’b00, Start = 2’b01, Stop = 2’b10, Clear = 2’b11;always @(posedge Clock) if (!Reset) begin state <= Idle; F<=0; G<=0; end elseVerilogHDL第五讲Verilog实例 设计示例(续)设计示例(续) 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 endcaseendmodule VerilogHDL第五讲Verilog实例设计示例(续)设计示例(续)还可以用另一个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 = 4’b1000, Start = 4’b0100, Stop = 4’b0010, Clear = 4’b0001;VerilogHDL第五讲Verilog实例设计示例(续)设计示例(续) 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;VerilogHDL第五讲Verilog实例设计示例(续)设计示例(续) F <= 1; end Clear: begin if (!A) state <=Idle; F<=0; G<=1; end default: state <=Idle; endcaseendmodule VerilogHDL第五讲Verilog实例设计示例(续)设计示例(续)我们还可以用另一种风格的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 = 2’b00, Start = 2’b01, Stop = 2’b10, Clear = 2’b11;VerilogHDL第五讲Verilog实例设计示例(续)设计示例(续)always @(posedge Clock) if (!Reset) begin state <= Idle; 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; endcaseVerilogHDL第五讲Verilog实例设计示例(续)设计示例(续) 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 VerilogHDL第五讲Verilog实例。





