FPGA微型板Verilog定时蜂鸣

您将基于通用的display_7_seg,decoder_7_seg和debouncer模块构建一个倒数计时器,其功能实际上类似于真实产品。 即使是表面上看似简单的设备(如计时器)也可能难以设计。 为了简化设计,通常使用称为状态机的表示。 该技术不是FPGA独有的,它是一种以图表形式进行系统行为建模的好方法。 使用发声模块来驱动蜂鸣器,一旦倒计时结束,蜂鸣器就会响起。

状态机

状态机扎根于数学,因此,就像数学中的许多事物一样,听起来确实很聪明,但是归结起来却很简单。 您还将找到状态机和状态机图,它们被称为有限状态机(FSM)和状态转换图(STD)。

基本概念是,系统会保持稳定状态,直到某个触发器导致其转换到另一状态为止。 此过渡可能会导致在过渡期间发生某些动作。 状态在图中以方框或气泡的形式绘制,并以带有箭头的线的过渡形式出现,箭头从一个方框到另一个方框或从一个方框回到自身。 在过渡线上绘制了两部分的标签。 标签的顶部是过渡发生的条件(例如,按下了一个按钮),然后有一条水平线,在该线下显示了过渡期间需要执行的任何操作(例如,转弯 LED亮)。

状态机设计

为了使该示例在所有三个示例板上都能使用,它将使用三个七段数字。 两位显示秒,一位显示分钟。 “向上/向下”按钮将设置分钟,“开始/停止”按钮将开始倒数计时,“取消”按钮会将计时器重置为上次使用的分钟数。 当倒数到零时,蜂鸣器将连接到板上以发出声音。 该项目的状态机如下图所示。

初始状态为SETTING,在此状态下,“ Up”和“ Down”按钮将从分钟数显示的数字中增加或减少1。 按下“开始/停止”按钮后,项目将进入“运行”状态。 按“开始/停止”将立即使您回到“设置”状态,如按“取消”一样。 但是,按“取消”也会重设时间。 在SETTING状态下,每秒显示的时间将减少1秒,直到倒数到000,此时进入BEEPING状态。

Beeping声响起,直到按下“取消”按钮,此时系统返回到设置状态,并且时间已重置,可以再次使用计时器。

硬件

连接

模块结构

使用了很多按键,需要使用很多消抖动模块。

用户约束文件

接下来列出Mojo和IO Shield的用户约束文件(UCF)。 主要区别仅涉及引脚分配以及开关输入的上拉/下拉差异。

即使项目仅使用三位数字,所有四位数字都在UCF中定义,因此未使用的数字可以被清空。

定义了一个新的网络蜂鸣器,为连接到GPIO引脚P97的压电蜂鸣器产生声音。

Verilog模块 - 定时器

计时器模块的声明将输入和输出与UCF中的网络链接起来:

首先,为每个按钮定义连线,然后将防抖器分配给与防抖器的trans_dn(向下转换)输出相连的每根导线:

寄存器(alarm_on)用于打开和关闭蜂鸣器。 这链接到警报实例的启用输入。 此实例还提供了CLK输入和GPIO引脚以打开蜂鸣器:

为了跟踪时间,分别为秒(secs),数十秒(ten_secs)和分钟(mins)定义了单独的4位寄存器。 另一个寄存器(mins_stored)用于记录计时器启动之前最初设置的分钟数的副本,以便在计时器返回其SETTING状态时记住上一次使用的时间。

这可以通过将该数字的值设置为10来完成。display_7_seg和coder_7_seg不会显示超过9的数字,因此将使该数字保持空白。

26位寄存器预分频器用于在需要时通过计数每个FPGA时钟周期直至达到某个值来计数CLK滴答信号,直到达到某个值为止:

display_7_seg模块在相应的数字位置链接到前面所述的寄存器。 一旦将它们链接起来,我们只需要更改寄存器值secs,ten_secs和mins,显示就会刷新:

状态机的Verilog代码非常紧密地遵循上述状态机图。 2位寄存器(状态)用于跟踪当前状态。 为了您不必使用数字来引用状态,localparam命令允许您定义三个值,例如传统编程语言中称为SETTING,RUNNING和BEEPING的常量,以对应于项目的三个状态:

在Verilog中编写好的,干净的状态机实现的关键是,通过使用任务将在过渡期间发生的动作移出always块的主体,从而使always块尽可能短。 否则,它将变得巨大。

测试

源码

详情参阅 - 亚图跨际

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值