4 FPGA中verilog 时序逻辑电路设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 时序逻辑电路设计
1.时序电路的基本概念



数字电路按照结构特点不同分为两大类:组合逻辑电 路(简称组合电路)和时序逻辑电路(简称时序电 路)。 组合电路是指由各种门电路组合而成的逻辑电路,输 出只取决于当前输入信号的变化,与以前各时刻的输 入或输出无关;组合电路没有记忆功能。例如:编/译 码器、加法器等常用数字电路都属于组合电路。 时序逻辑电路是具有记忆功能的逻辑电路,记忆元件 一般采用触发器。因此,时序逻辑电路由组合电路和 触发器组成,其等效模型如图4.5所示。
二、说明
计数器是数字电路系统中最基本的功能模 块之一。设计十进制、六进制和 100 进制计数 器,要求计数器有计数允许和复位输入及进 位输出功能。计数时钟可以用 1Hz 信号,用 LED显示计数值。 本设计要求用仿真和测试两种手段来验证 计数器的功能。实验时,可以通过修改十进 制计数器的设计得到六进制、 100 进制计数器。
Fra Baidu bibliotek
串行输入串行输出移位寄存器
module shift_1(din,clk,dout); input din,clk; output dout; reg dout; reg tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7; always@(posedge clk) begin tmp1<=din; tmp2<=tmp1; tmp3<=tmp2; tmp4<=tmp3; tmp5<=tmp4; tmp6<=tmp5; tmp7<=tmp6; dout<=tmp7; end endmodule
带异步复位和置位、上升沿触发的触发器
module dff_asynrst(data,rst,set,clk,q); input data,rst,set,clk; output q; reg q; always@(posedge clk or posedge rst or posedge set) begin if(rst==1’b1) q<=1’b0; else if(set==1’b1) q<=1’b1; else q<=data; end endmodule
并入串出shift register
并入串出移位寄存器可以将一组二进制数并 行送入一组寄存器,然后把这些数据串行从寄 存器内输出。 一个同步并入串出移位寄存器的基本管脚: 并行输出输入端:data 时钟脉冲输入端:clk 加载数据端:load 串行数据输出端:dout
并行输入串行输出移位寄存器
带异步复位和时钟使然、上升沿触发的触发器
module dff_asynrst(data,rst,en,clk,q); input data,rst,en,clk; output q; reg q; always@(posedge clk or posedge rst) begin if(rst==1’b1) q<=1’b0; else if(en==1’b1) q<=data; end endmodule
上升沿触发的触发器
module dff(data,clk,q); input data,clk; output q; reg q; always@(posedge clk) begin q<=data; end endmodule
带异步复位、上升沿触发的触发器
module dff_asynrst(data,rst,clk,q); input data,rst,clk; output q; reg q; always@(posedge clk or posedge rst) begin if(rst==1’b1) q<=1’b0; else q<=data; end endmodule
计数器设计代码
module cnt_en(en,rst,clk,cnt); parameter WIDTH = 8; input en,rst,clk; output [WIDTH -1:0] q; reg [WIDTH -1:0] q; always@(posedge clk or posedge rst) begin if(rst==1’b1) cnt<=8’b00000000; else cnt<=cnt + 1; end endmodule
1.同步电路设计规则




(1)在用Verilog HDL进行数字逻辑设计时,只使用 一个主时钟,同时只使用同一个时钟沿(上升沿或下 降沿)。 (2)在FPGA设计中,推荐所有输入、输出信号均应 通过寄存器寄存,寄存器接口当作异步接口考虑。 (3)当全部电路不能用同步电路思想设计时,即需 要多个时钟来实现,则可以将全部电路分成若干局部 电路(尽量以同一时钟为一个模块),局部电路之间 接口当异步接口考虑。 (4)电路中所有的寄存器、状态机在上电复位时必 须有一个确定的初始态。 (5)电路的实际最高频率不应大于理论最高频率, 应留有设计余地。
移位寄存器



移位寄存器是一种在时钟脉冲的作用下, 将寄存器中的数据按位移动的逻辑 电路主要功能:串并转换 串行输入串行输出 串行输入并行输出 并行输入串行输出
串入串出移位寄存器
基本串入串出移位寄存器原理图 8位移位寄存器由8个D触发器串联构成,在 时钟信号的作用下,前级的数据向后移动
标准同步电路
组合 逻辑
DFF
组合 逻辑
DFF
组合 逻辑
DFF
组合 逻辑
DFF
clock
2 D触发器


1. 上升沿触发的触发器 2. 带异步复位、上升沿触发的触发器 3. 带异步复位和置位、上升沿触发的触 发器 4.带异步复位和时钟使然、上升沿触发 的触发器 5.带同步复位、上升沿触发的触发器
问题思考
1.上述描述的是一个模为多少的计数器? 2.请自行设计一个同步模12计数器 3.在2基础上进行修改,设计一个带异步 复位的模12计数器 4.同步复位的模12计数器如何设计?
项目设计1
一、目的 (1)实现带计数允许和复位端的十进制、 六进制和60进制计数器; (2)掌握计数器类型模块的描述方法; (3)掌握Veriog HDL模块的层次化设计 方法。
串入并出shift register
4位串行输入并行输出移位寄存器的逻辑电路 如图所示。该寄存器由4个同步D触发器组成 这种D触发器的R端是是非同步清零端。
串行输入并行输出移位寄存器
module shift_2(din,clk,clr,q); input din,clk,clr; output [3:0] q; reg [3:0] q; always@(posedge clk or negedge clr) begin if(clr==1’b0) q<=4’b0000; else begin q[0]<=din; q=q<<1; end end endmodule
Verilog HDL参考设计(1)
module count (clk,cnt); input clk; output [2:0] cnt; reg [2:0] cnt; always@(posedge clk ) begin if(cnt==7) cnt<=0; else cnt<=cnt+1; end endmodule
三、设计要求
(1) 完成各模块的Verilog HDL设计编码; (2) 进行功能仿真; (3) 下载并验证计数器功能; (4) 如果60 进制计数器要求用 6 进制和 10 进制 计数器搭建电路,请画出设计连接图,并 完成设计编码和验证。
分频器设计


在硬件电路设计中时钟信号是最重要的 信号之一。 在数字电路中,常需要对较高频率的时 钟进行分频操作,得到较低频率的时钟 信号。
module div1(clk,rst,clk2,clk4,clk8,clk16); input rst,clk; output clk2,clk4,clk8,clk16; wire clk2,clk4,clk8,clk16; reg [3:0]cnt; always@(posedge clk or posedge rst) begin if(rst==1’b1) cnt<=4’b0000; else cnt<=cnt+1; end assign clk2 = cnt[0]; assign clk4 = cnt[1]; assign clk8 = cnt[2]; assign clk16= cnt[3]; endmodule
带同步复位、上升沿触发的触发器
module dff_synrst(data,rst,clk,q); input data,rst,clk; output q; reg q; always@(posedge clk) begin if(rst==1’b1) q<=1’b0; else q<=data; end endmodule
module shift3(clk,din, load,q); input clk,load; input [3:0] din; output q; reg q; reg [3:0] tmp; always@(posedge clk ) begin if(load==1’b1) tmp<=din; else begin tmp<=tmp<<1; tmp[0]<=1’b0; q<=tmp[3]; end end endmodule
计数器设计
计数器是一种典型的时序器件,常用于对 时钟脉冲的个数进行计数,还用于定时,分 频,产生同步脉冲 按触发方式分:同步计数器和异步计数器 最容易的计数器设计就是cnt=cnt+1,但是 你可能得不到最好的结果
计数器





计数器对时钟脉冲进行计数 以递增计数器为例,介绍其Verilog HDL设计方法 递增计数器基本引脚: 时钟输入端:clk 复位端: rst 计数使然端:en 计数输出端:cnt
电路的功能仿真波形
6分频电路设计与实现
对于分频倍数不是 2 的整数次幂的 情况,我们只需要对源代码中的计数器 进行一下计数控制就可以了,如下面用 VHDL 设计一个对时钟信号进行 6 分频 的分频器
电路的仿真波形图
占空比1:15分频电路设计
在进行硬件设计的时候,往往要求得 到一个占空比不是 1:1 的分频信号, 这时仍采用计数器的方法来产生占空比 不是 1:1 的分频信号。下面源代码描 述的是这样一个分频器:将输入的时钟 信号进行 16 分频,分频信号的占空比 为 1:15 ,也就是说,其中高电位的脉 冲宽度为输入时钟信号的一个周期。
分频器设计
2的整数次幂的分频器设计; 偶分频电路设计;
占空比为1:15的分频电路设计。
2、4、8、16分频电路设计
用VerilogHDL语言完成对时钟信 号 CLK 的 2 分频, 4 分频, 8 分频, 16 分频。 这也是最简单的 分频电路,只需要一个计数器即可 。
2的整数次幂的分频器
1模型

时序电路按其状态的改变方式不同,可分为同 步时序逻辑电路和异步时序逻辑电路两种,在 图4.5中,当CLK1与CLK2为相同信号时,该 电路为同步电路;当CLK1与CLK2为不同信号 时,该电路为异步电路。
1建立和保持时间
DATA
Tsu
Thd
DATA
D
Q
CLK CLK CLK

触发器的建立时间(Tsu)是指时钟有效沿(这里指 上升沿)到来之前数据应保持稳定的时间。 触发器的保持时间(Thd)是指时钟有效沿(这里指 上升沿)到来之后数据应保持稳定的时间。
Verilog HDL参考设计(2)
module cnt (clk,cnt); input clk; output [2:0] cnt; reg [2:0] cnt; reg [2:0] next_cnt; always@(cnt ) begin case(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; endcase end always@(posedge clk ) cnt<=next_cnt; endmodule
相关文档
最新文档