FPGA前瞻篇-计数器设计与实现实例

这是本篇文章的设计目标如下所示:

这个 Counter 模块是一个LED 闪烁计数器 ,设计目标是:
当输入时钟 clk 为 50 MHz 时,每 0.5 秒翻转一次 LED 灯状态。

随后我们开始补充理论知识。
计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路。下面我们以一个 3 位计数器来学习下计数器的基本组成和相关知识,首先我们画出 3 位计数器的电路结构图。


我们以 F1 、 F2 、 F3 代表 3 个 D 触发器,两个异或门 G1 、 G2 和 1 个与门 G3 来进行说明计数器是如何工作的。一般触发器是有复位信号(图中没有画出),在上电复位之后,电路上电的 Q0 Q1 Q2 初始状态是 000,下面我们来看下这三个D 触发器此时的输入信号是什么。
我们先看 F1 , F1 的输入信号 D ,是由 Q0 反馈回来的,我们已知此时的 Q 是 0 ,那么 ` Q 就是 1 ,这个 1 反馈给 F1 输入信号 D ,此时 F1 的输入信号就是 1 。
下面我们再来看 F2 , F2 的输入信号是 Q0 和 Q1 的值经过一个异或门之后得到的,我们已知此时的 Q0 是 0 , Q1 也是 0 ,那么这两个 0 经过异或门逻辑处理(异或门两个输入信号值相同输出 0 ,不同输出 1 )后就是 0 了,因此 F2 的输入信号也是 0 。
再看 F3,F3 的输入信号是由 Q0 和 Q1 经过一个与门之后的输出值,与 Q2 的值相异或得到的,我们来看,Q0 和 Q1 都是 0,两个 0 相与,输出肯定还是 0,这个输出的 0,再与 Q2 的值相异或,根据异或门的规律,两个输入现在都是 0,那么异或门的输出也是 0,F3 的输入此时就是 0。
到这里,我们已经分析出了 F1 、 F2 和 F3 这三个触发器此时的输入值了,下面我们就可以根据 D 触发器的逻辑规律知道下一刻电路的输出值了,现在我们给 CLK 端口一个上升沿,也就是 CLK 由 0 变为 1 了,那么 3 个边沿 D 触发器将会同时触发,当 CLK 这个时钟信号的上升沿到来时, D 触发器的输入值将会被锁存,根据逻辑规律,下一刻 3 个 D 触发器的输出值就分别为 1 , 0 , 0 。这里如果我们把 Q2 的值当
做二进制数的最高位,把 Q0 的值当做二进制数的最低位,那么现在计数器所输出的值,就是二进制数 001,也就是十进制的 1 。计数器接收到第一个时钟信号的上升沿后,计数器就输出二进制数 001 ,依次类推,如果第二个时钟信号的上升沿到来时,这个时候计数器将会输出二进制数 010 ,也就是十进制数 2 , 每当电路多到来一个时钟上升沿,计数器就会作加 1 运算。当电路计到第 8 个脉冲时,电路状态将由 111 又变为 000 ,完成一个循环周期,所以该电路也称为模 8 同步加法计数器。所谓同步就是指该电路中的四个边沿型 D 触发器共用一个时钟脉冲 CLK ,当时钟上升沿到来时,它们能够同时触发。

时钟沿数 Q2 Q1 Q0 二进制值 F3_D输入 F2_D输入 F1_D输入
初始 0 0 0 000 0 0 1
↑1 0 0 1 001 0 1 0
↑2 0 1 0 010 0 1 1
↑3 0 1 1 011 1 0 0
↑4 1 0 0 100 0 1 1
↑5 1 0 1 101 1 1 0
↑6 1 1 0 110 1 0 1
↑7 1 1 1 111 0 0 0
↑8 0 0 0 000 0 0 1
... ... ... ... ... ... ... ...

Q0, Q1, Q2 分别是 F1, F2, F3 的输出;

F1_D输入 = ~Q0,即直接来自 Q0 的反向;

F2_D输入 = Q0 ^ Q1

F3_D输入 = (Q0 & Q1) ^ Q2

接下来就是程序设计了,如下所示:

信号名 类型 说明
clk input 时钟信号(假设为50 MHz)
rst_n input 异步低电平复位信号
led output reg 控制LED状态,高亮或熄灭

这个 Testbench 的目标是:

Counter 模块提供时钟和复位信号;

观察 LED 信号是否按照设计(每经过一定计数周期翻转)工作;

进行一次完整的仿真,并在仿真 1ms 后结束。

接着我们回到Vivado,如下所示仿真效果可见。

相关推荐
欢乐熊嵌入式编程3 分钟前
智能手表项目的《项目背景与目标说明书》样本文档
嵌入式硬件·目标跟踪·规格说明书·智能手表
上海合宙LuatOS2 小时前
全栈工程师实战手册:LuatOS日志系统开发指南!
java·开发语言·单片机·嵌入式硬件·物联网·php·硬件工程
昊昊昊昊昊明2 小时前
十天学会嵌入式技术之51单片机—day-9
单片机·嵌入式硬件·51单片机
9527华安3 小时前
紫光同创FPGA实现AD7606数据采集转UDP网络传输,提供PDS工程源码和技术支持和QT上位机
网络·qt·fpga开发·udp·紫光同创·ad7606
__Benco3 小时前
OpenHarmony平台驱动开发(十五),SDIO
驱动开发
欢乐熊嵌入式编程3 小时前
智能手表蓝牙 GATT 通讯协议文档
嵌入式硬件·目标跟踪·规格说明书·智能手表
szxinmai主板定制专家3 小时前
基于TI AM6442+FPGA解决方案,支持6网口,4路CAN,8个串口
arm开发·人工智能·fpga开发
whaosoft-1433 小时前
51c嵌入式~电路~合集27
嵌入式硬件
Camellia03113 小时前
嵌入式学习--江协51单片机day5
嵌入式硬件·学习·51单片机
搬砖的小码农_Sky4 小时前
芯片:金线的作用
硬件架构·硬件工程