您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > FPGA中verilog时序逻辑电路设计
第4章时序逻辑电路设计1.时序电路的基本概念数字电路按照结构特点不同分为两大类:组合逻辑电路(简称组合电路)和时序逻辑电路(简称时序电路)。组合电路是指由各种门电路组合而成的逻辑电路,输出只取决于当前输入信号的变化,与以前各时刻的输入或输出无关;组合电路没有记忆功能。例如:编/译码器、加法器等常用数字电路都属于组合电路。时序逻辑电路是具有记忆功能的逻辑电路,记忆元件一般采用触发器。因此,时序逻辑电路由组合电路和触发器组成,其等效模型如图4.5所示。1模型时序电路按其状态的改变方式不同,可分为同步时序逻辑电路和异步时序逻辑电路两种,在图4.5中,当CLK1与CLK2为相同信号时,该电路为同步电路;当CLK1与CLK2为不同信号时,该电路为异步电路。1建立和保持时间触发器的建立时间(Tsu)是指时钟有效沿(这里指上升沿)到来之前数据应保持稳定的时间。触发器的保持时间(Thd)是指时钟有效沿(这里指上升沿)到来之后数据应保持稳定的时间。CLKDATADQCLKCLKDATATsuThd1.同步电路设计规则(1)在用VerilogHDL进行数字逻辑设计时,只使用一个主时钟,同时只使用同一个时钟沿(上升沿或下降沿)。(2)在FPGA设计中,推荐所有输入、输出信号均应通过寄存器寄存,寄存器接口当作异步接口考虑。(3)当全部电路不能用同步电路思想设计时,即需要多个时钟来实现,则可以将全部电路分成若干局部电路(尽量以同一时钟为一个模块),局部电路之间接口当异步接口考虑。(4)电路中所有的寄存器、状态机在上电复位时必须有一个确定的初始态。(5)电路的实际最高频率不应大于理论最高频率,应留有设计余地。标准同步电路DFFDFFDFFDFF组合逻辑组合逻辑组合逻辑组合逻辑clock2D触发器1.上升沿触发的触发器2.带异步复位、上升沿触发的触发器3.带异步复位和置位、上升沿触发的触发器4.带异步复位和时钟使然、上升沿触发的触发器5.带同步复位、上升沿触发的触发器上升沿触发的触发器moduledff(data,clk,q);inputdata,clk;outputq;regq;always@(posedgeclk)beginq=data;endendmodule带异步复位、上升沿触发的触发器moduledff_asynrst(data,rst,clk,q);inputdata,rst,clk;outputq;regq;always@(posedgeclkorposedgerst)beginif(rst==1’b1)q=1’b0;elseq=data;endendmodule带异步复位和置位、上升沿触发的触发器moduledff_asynrst(data,rst,set,clk,q);inputdata,rst,set,clk;outputq;regq;always@(posedgeclkorposedgerstorposedgeset)beginif(rst==1’b1)q=1’b0;elseif(set==1’b1)q=1’b1;elseq=data;endendmodule带异步复位和时钟使然、上升沿触发的触发器moduledff_asynrst(data,rst,en,clk,q);inputdata,rst,en,clk;outputq;regq;always@(posedgeclkorposedgerst)beginif(rst==1’b1)q=1’b0;elseif(en==1’b1)q=data;endendmodule带同步复位、上升沿触发的触发器moduledff_synrst(data,rst,clk,q);inputdata,rst,clk;outputq;regq;always@(posedgeclk)beginif(rst==1’b1)q=1’b0;elseq=data;endendmodule移位寄存器移位寄存器是一种在时钟脉冲的作用下,将寄存器中的数据按位移动的逻辑电路主要功能:串并转换串行输入串行输出串行输入并行输出并行输入串行输出串入串出移位寄存器基本串入串出移位寄存器原理图8位移位寄存器由8个D触发器串联构成,在时钟信号的作用下,前级的数据向后移动串行输入串行输出移位寄存器moduleshift_1(din,clk,dout);inputdin,clk;outputdout;regdout;regtmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7;always@(posedgeclk)begintmp1=din;tmp2=tmp1;tmp3=tmp2;tmp4=tmp3;tmp5=tmp4;tmp6=tmp5;tmp7=tmp6;dout=tmp7;endendmodule串入并出shiftregister4位串行输入并行输出移位寄存器的逻辑电路如图所示。该寄存器由4个同步D触发器组成这种D触发器的R端是是非同步清零端。串行输入并行输出移位寄存器moduleshift_2(din,clk,clr,q);inputdin,clk,clr;output[3:0]q;reg[3:0]q;always@(posedgeclkornegedgeclr)beginif(clr==1’b0)q=4’b0000;elsebeginq[0]=din;q=q1;endendendmodule并入串出shiftregister并入串出移位寄存器可以将一组二进制数并行送入一组寄存器,然后把这些数据串行从寄存器内输出。一个同步并入串出移位寄存器的基本管脚:并行输出输入端:data时钟脉冲输入端:clk加载数据端:load串行数据输出端:dout并行输入串行输出移位寄存器moduleshift3(clk,din,load,q);inputclk,load;input[3:0]din;outputq;regq;reg[3:0]tmp;always@(posedgeclk)beginif(load==1’b1)tmp=din;elsebegintmp=tmp1;tmp[0]=1’b0;q=tmp[3];endendendmodule计数器设计计数器是一种典型的时序器件,常用于对时钟脉冲的个数进行计数,还用于定时,分频,产生同步脉冲按触发方式分:同步计数器和异步计数器最容易的计数器设计就是cnt=cnt+1,但是你可能得不到最好的结果计数器计数器对时钟脉冲进行计数以递增计数器为例,介绍其VerilogHDL设计方法递增计数器基本引脚:时钟输入端:clk复位端:rst计数使然端:en计数输出端:cnt计数器设计代码modulecnt_en(en,rst,clk,cnt);parameterWIDTH=8;inputen,rst,clk;output[WIDTH-1:0]q;reg[WIDTH-1:0]q;always@(posedgeclkorposedgerst)beginif(rst==1’b1)cnt=8’b00000000;elsecnt=cnt+1;endendmoduleVerilogHDL参考设计(1)modulecount(clk,cnt);inputclk;output[2:0]cnt;reg[2:0]cnt;always@(posedgeclk)beginif(cnt==7)cnt=0;elsecnt=cnt+1;endendmodulemodulecnt(clk,cnt);inputclk;output[2:0]cnt;reg[2:0]cnt;reg[2:0]next_cnt;always@(cnt)begincase(cnt)3’h0:next_cnt=3’h1;3’h1:next_cnt=3’h2;3’h2:next_cnt=3’h3;3’h3:next_cnt=3’h4;3’h4:next_cnt=3’h5;3’h5:next_cnt=3’h6;3’h6:next_cnt=3’h7;3’h7:next_cnt=3’h0;default:next_cnt=3’b000;endcaseendalways@(posedgeclk)cnt=next_cnt;endmoduleVerilogHDL参考设计(2)问题思考1.上述描述的是一个模为多少的计数器?2.请自行设计一个同步模12计数器3.在2基础上进行修改,设计一个带异步复位的模12计数器4.同步复位的模12计数器如何设计?项目设计1一、目的(1)实现带计数允许和复位端的十进制、六进制和60进制计数器;(2)掌握计数器类型模块的描述方法;(3)掌握VeriogHDL模块的层次化设计方法。二、说明计数器是数字电路系统中最基本的功能模块之一。设计十进制、六进制和100进制计数器,要求计数器有计数允许和复位输入及进位输出功能。计数时钟可以用1Hz信号,用LED显示计数值。本设计要求用仿真和测试两种手段来验证计数器的功能。实验时,可以通过修改十进制计数器的设计得到六进制、100进制计数器。三、设计要求(1)完成各模块的VerilogHDL设计编码;(2)进行功能仿真;(3)下载并验证计数器功能;(4)如果60进制计数器要求用6进制和10进制计数器搭建电路,请画出设计连接图,并完成设计编码和验证。分频器设计在硬件电路设计中时钟信号是最重要的信号之一。在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。分频器设计2的整数次幂的分频器设计;偶分频电路设计;占空比为1:15的分频电路设计。用VerilogHDL语言完成对时钟信号CLK的2分频,4分频,8分频,16分频。这也是最简单的分频电路,只需要一个计数器即可。2、4、8、16分频电路设计2的整数次幂的分频器modulediv1(clk,rst,clk2,clk4,clk8,clk16);inputrst,clk;outputclk2,clk4,clk8,clk16;wireclk2,clk4,clk8,clk16;reg[3:0]cnt;always@(posedgeclkorposedgerst)beginif(rst==1’b1)cnt=4’b0000;elsecnt=cnt+1;endassignclk2=cnt[0];assignclk4=cnt[1];assignclk8=cnt[2];assignclk16=cnt[3];endmodule电路的功能仿真波形6分频电路设计与实现对于分频倍数不是2的整数次幂的情况,我们只需要对源代码中的计数器进行一下计数控制就可以了,如下面用VHDL设计一个对时钟信号进行6分频的分频器电路的仿真波形图在进行硬件设计的时候,往往要求得到一个占空比不是1:1的分频信号,这时仍采用计数器的方法来产生占空比不是1:1的分频信号。下面源代码描述的是这样一个分频器:将输入的时钟信号进行16分频,分频信号的占空比为1:15,也就是说,其中高电位的脉冲宽度为输入时钟信号的一个周期。占空比1:15分频电路设计占空比为1:15的分频电路设计modulediv1_15(clk,rst,clk16);inputrst,clk;outputclk16;regclk16;reg[3:0]cnt;always@(posedgeclkorposedgerst)beginif(rst==1’b1)cnt=4’b0000;elsecnt=cnt+1;endalways@(posedgeclkorposedgerst)beginif(rst==1’b1)clk16=1’b0;elseif(clk16==15)clk16=1’b1;elseclk16=1’b0;endendmodule电路仿真波形图偶分频电路设计modulediv6(clk,rst,clk6);inputrst,clk;outputclk6;regclk6;
本文标题:FPGA中verilog时序逻辑电路设计
链接地址:https://www.777doc.com/doc-6060745 .html