资源描述:
《FPGA中verilog时序逻辑电路设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章时序逻辑电路设计1.时序电路的基本概念数字电路按照结构特点不同分为两大类:组合逻辑电路(简称组合电路)和时序逻辑电路(简称时序电路)。组合电路是指由各种门电路组合而成的逻辑电路,输出只取决于当前输入信号的变化,与以前各时刻的输入或输出无关;组合电路没有记忆功能。例如:编/译码器、加法器等常用数字电路都属于组合电路。时序逻辑电路是具有记忆功能的逻辑电路,记忆元件一般采用触发器。因此,时序逻辑电路由组合电路和触发器组成,其等效模型如图4.5所示。1模型时序电路按其状态的改变方式不同,可分为同步时序逻
2、辑电路和异步时序逻辑电路两种,在图4.5中,当CLK1与CLK2为相同信号时,该电路为同步电路;当CLK1与CLK2为不同信号时,该电路为异步电路。1建立和保持时间触发器的建立时间(Tsu)是指时钟有效沿(这里指上升沿)到来之前数据应保持稳定的时间。触发器的保持时间(Thd)是指时钟有效沿(这里指上升沿)到来之后数据应保持稳定的时间。CLKDATADQCLKCLKDATATsuThd1.同步电路设计规则(1)在用VerilogHDL进行数字逻辑设计时,只使用一个主时钟,同时只使用同一个时钟沿(上升沿或
3、下降沿)。(2)在FPGA设计中,推荐所有输入、输出信号均应通过寄存器寄存,寄存器接口当作异步接口考虑。(3)当全部电路不能用同步电路思想设计时,即需要多个时钟来实现,则可以将全部电路分成若干局部电路(尽量以同一时钟为一个模块),局部电路之间接口当异步接口考虑。(4)电路中所有的寄存器、状态机在上电复位时必须有一个确定的初始态。(5)电路的实际最高频率不应大于理论最高频率,应留有设计余地。标准同步电路DFFDFFDFFDFF组合逻辑组合逻辑组合逻辑组合逻辑clock2D触发器1.上升沿触发的触发器2.
4、带异步复位、上升沿触发的触发器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;re
5、gq;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(se
6、t==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_synr
7、st(data,rst,clk,q);inputdata,rst,clk;outputq;regq;always@(posedgeclk)beginif(rst==1’b1)q<=1’b0;elseq<=data;endendmodule移位寄存器移位寄存器是一种在时钟脉冲的作用下,将寄存器中的数据按位移动的逻辑电路主要功能:串并转换串行输入串行输出串行输入并行输出并行输入串行输出串入串出移位寄存器基本串入串出移位寄存器原理图8位移位寄存器由8个D触发器串联构成,在时钟信号的作用下,前级的数据向后移动
8、串行输入串行输出移位寄存器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;endendm