当前位置: 首页 > news >正文

【FPGA】时序逻辑计数器——Verilog实现

目标:学习Verilog实现时序逻辑的写法以及计数器的应用

实验现象:当实验程序下载到开发板后,开发板上的D0(即LED0)以1Hz的频率闪烁,即一秒钟之内亮灭各保持500ms或LED的状态每隔500ms翻转一次

1.设计定义

对于该模块,理论上只需要两个端口
一个Clk给D触发器提供时钟信号,一个Led驱动开发板上的Led灯亮灭
Reset_n低电平复位信号,reset代表复位,_n代表低电平有效

2.建立工程

工程名称为led_twinkle

创建与工程同源的Verilog源文件

3.程序编写

写基本框架

端口列表和端口定义

计数器的计数最大值称为CNT_MAX 
D触发器的工作时钟周期为Tclk
需要定时的时间长度为T

在FPGA系统中,时钟信号通常由电路板上的一个能够主动生成周期性的时钟信号的元件产生,也就是俗称的有源晶振

有源晶振在加电的情况下能够输出频率非常稳定的方波信号,将这个方波信号连接到FPGA的一个管脚,就可以在程序中使用这个信号了。

ACX720开发板上的有源晶振输出固定的50MHz的频率

该晶振输出的时钟信号的周期是20ns

通过计算器的二进制可以看到位宽至少是25位
只要定义的位宽能够表示需要表示的数即可

计数器的核心代码

第13行代码是过程赋值语句,是描述时序逻辑的标准格式,or negedge Reset_n 可以省略不写
posedge表示上升沿   negedge表示下降沿
Reset_n为低电平0,取非为1,if条件为真,满足则执行第15行代码,把counter的值设置为零
如果Reset_n为1,取非为0,不满足则不执行第15行代码
第14和15行代码是描述一个信号的复位逻辑的典型语句
复位:通过设置让D触发器的值作为一个确定的预设值
else if 后的内容是计数器正常工作、正常计数时的逻辑代码
25_000_000前面没有加格式限定符和位宽限定符,默认是十进制

这里的 <= 代表非阻塞赋值
三八译码器里的 代表阻塞赋值

Led翻转代码

 这里报错的原因是LED在过程语句中被赋值,但是Led又不是寄存器或reg类型的信号,这在语法中是不允许的,解决办法是在Led前面加上reg

4.图纸分析

打开设计的原理图图纸

图纸中有加法器、二选一多路器、D触发器、反相器

加法器的两个输入,一个来源于VCC,一个来源于counter的输出值
加法器的输出端到D触发器的输入端之间多了一个二选一多路器
二选一多路器会根据counter的值来决定输出给D触发器的值是加法器的结果还是
I0口的数据转换为十进制就是25_000_000,二十五位的多路选择器的选择位宽也是二十五位,当它的S端口为25_000_000时,多路器输出上面一路的值,否则输出下面一路的值

Led的输出也是通过D触发器输出,输出经过反相器绕回D触发器的输入端口
CE端口代表时钟使能,该端口的作用是,只有当CE信号为高电平的时候,CLK的信号才能进入D触发器的CK端口,才能驱动D触发器储存D端口上的数据,否则CLK的信号不会进入D触发器
这样只有能实现CE信号每25_000_000个时钟出现一次高电平,就能够让D触发器每25_000_000个时钟周期,只更新一次数据,从而实现每25_000_000个时钟Led翻转一次
CE信号由RTL_ROM产生,它根据counter的输出值进行判断,仅当counter的输出值​​​​​​​为25_000_000时,O输出高电平从而控制Led触发器更新数据的节奏

http://www.dtcms.com/a/536022.html

相关文章:

  • 示范专业网站建设wordpress 添加二级
  • 【LeetCode】88. 合并两个有序数组
  • Redis键过期策略深度剖析:惰性删除与定期删除的完美平衡
  • 【紧急救援】MySQL root密码忘记?一键重置脚本和全平台解决方案
  • Redis Commander:一款基于Web、免费开源的Redis管理工具
  • 云南省住房和城乡建设局网站做投标的在什么网站找信息
  • 操作系统5.3.4 磁盘的管理
  • Go 编程基础
  • 【Go】P13 Go 语言核心概念:指针 (Pointer) 详解
  • oss中的文件替换后chrome依旧下载到缓存文件概述
  • Go Web 编程快速入门 08 - JSON API:编码、解码与内容协商
  • Golang交叉编译到Android上运行
  • 学网站开发去哪学最好的公文写作网站
  • F035 vue+neo4j中医南药药膳知识图谱可视化系统 | vue+flask
  • 图形数据库Neo4J简介
  • QR算法:矩阵特征值计算的基石
  • 宁波网站建设公司代理珠海集团网站建设报价
  • 「用Python来学微积分」17. 导数与导函数
  • RAID技术:RAID 0/1/5/10 原理、配置与故障恢复
  • 7.1-性能与测试工具
  • linux磁盘使用流程
  • KVM虚拟化部署全流程指南
  • 【用homebrew配置nginx+配置前端项目与后端联调】Macbook M1(附一些homebrew操作)
  • 建立个人博客网站wordpress免费发布信息大全
  • 做设计转钱网站公司网站开发模板
  • 网站建设目标是什么意思win7用本地文件做网站模板
  • VR党建骑行|VR红色骑行漫游|虚拟骑行设备
  • 人脸识别1-Windows下基于MSVC编译opencv-4.5.5
  • 上海网站建设的公司站长之家查询
  • 游戏盾和高防IP的差异与选择