FPGA-计数器

前言

之前一直说整理点FPGA控制器应用的内容,今天就从计数器这个在时序逻辑中比较重要的内容开始总结一下,主要通过还是通过让一个LED闪烁这个简单例子来理解。

寄存器

了解计数器之前先来认识一下寄存器。寄存器是时序逻辑设计的基础。时序逻辑能够避免组合逻辑存在的竞争和冒险问题,使电路系统更加稳定。而寄存器的基础是D触发器。

  • D触发器:
    在一个脉冲信号的变化沿(上升或下降沿),将信号从输入端送到输出端。且若脉冲的边沿一直没有出现,即使输入信号变化,输出信号也一直不变。同时寄存器拥有复位与清零功能。
  • 下面以使用FPGA通过寄存器“点亮一个LED灯”的信号变化为例说明:首先理解一下几个概念同步复位,异步复位,延一拍
    同步复位
    所谓同步,就是和工作时钟同步进行,如下图的蓝色框里面,当复位信号(rst_n)拉低后,输出信号(led_out)只有在工作时钟信号(clk)的上升沿时来回拉低复位。
    在这里插入图片描述
    异步复位
    和同步复位略有不同,异步复位不关注工作时钟是否到达变化沿(上升或者下降)。如下图蓝色框框中,当复位信号(rst_n)被拉低,输出信号(led_out)立刻被拉低,而不同于上面的还要等待工作时钟的上升沿到来后再变化。
    在这里插入图片描述
    延一拍
    如下图蓝色框框里面,输入信号(key_in)在复位后第一个时钟的上升沿到来时拉高,但是此时输出信号(led_out)并没有跟着变化。在组合逻辑中,这种变化时是同步的。这就涉及到一个叫“延一拍”的术语。
    首先理解下两个“时间”:
    建立时间(Tsu):触发器的时钟信号上升沿到来之前,数据稳定不变的最小时间。
    保持时间(Th):触发器的时钟信号上升沿到来之后,数据稳定不变的最小时间。
    在进行时序逻辑仿真时,如果时钟和数据是对齐的,默认当前时钟采集到的数据为在该时钟上升沿前一时刻的值。也可以理解为仿真寄存器按照建立时间最大(一个时钟周期),保持时间最小(0)来进行。(在进行组合逻辑仿真时,数据变化大部分时候都是和时钟直接对齐的)。
    在这里插入图片描述
  • FPGA通过D触发器实现“点亮LED灯”:
    软件平台:Quartus II开发软件
    硬件平台:EP4CE10F17C8征途Mini FPGA开发板
    编写同步触发器代码和仿真代码后得到以下仿真结果。可以观察到:复位信号变为高电平和时钟上升沿是对齐的。由于“延一拍”,此时采集到的复位信号时上升沿前一时刻的低电平值(0),寄存器处于复位状态,输出led_out保持低电平。
    在下一个时钟上升沿到来之前,复位信号变为了高电平(1),输入为高电平,输出为高电平。通过打印文件也可以看出:输出信号(led_out)和输入信号(key_in)存在着“延一拍”的关系。输入数据在前一个时钟的上升沿变化,输出数据不变,而在下一刻时钟的上升沿变化。
    在这里插入图片描述
    在这里插入图片描述

计数器

  • 作用
    对脉冲的个数进行计数,通过计数器的计数值精确计算各种信号之间的时间关系,通过计数器精确控制各个信号的变化和持续时间等。
  • 实例
    使用计数器让LED每隔1s闪烁一次(亮0.5s,熄灭0.5s):
    设计思路:
    核心:什么时候开始计数,什么时候清零。(开始计数可以默认没有什么条件,只要复位撤销,时钟沿来到即可。清零:以50Mhz时钟为例,一个周期为20ns,也就是1s时间内计50000000个数,从0开始计数,也就是0-49999999。)
    提炼出来也就是1s内让电平翻转一次,也就是计数到一半的时候(24999999)电平翻转一次。可以据此来绘制波形变化图:
    其中N=24999999,复位信号(rst_n)一直有效时,计数器(cnt)计到N就清零,同时输出信号(led_out)取反。实现LED闪烁的效果。
    在这里插入图片描述
    仿真波形:
    在这里插入图片描述
    不知道为啥计数没显示出来。
    上面是不带标志信号的计数器,还有一个带有标志信号的计数器,波形图如下图所示:
    相较于上面那个波形,这里多了一个标志信号(cnt_flag),这个脉冲信号指示计数器计数到N-1,当计数到N-1的时候,输出信号先不翻转,一个时钟周期,输出信号再取反。这里这个标志信号计数到N或者N-1时候都行,但计数到N-1更精准,在参考书中说这里给出的脉冲标志信号的作用是节约逻辑资源,同时也能够让代码更加清晰简洁。
    在这里插入图片描述
    编写RTL代码,仿真,全编译后上板测试
    LED闪烁效果:
    在这里插入图片描述
    在这里插入图片描述

FPGA编译与上板验证流程:

设计波形
新建工程
编写RTL代码
查看RTL视图
编写仿真文件
仿真设置
Modelsim仿真观察
添加引脚约束
全编译
JTAG下载网表到开发板(切忌带电插拔JTAG接口)
程序固化

小结

今天主要是参考野火的这块Mini FPGA开发板的一些资料对时序逻辑设计中的这个计数器进行了一些梳理与总结。计数器的核心思想自己总结其实就是将时间顺序量化后再发挥其作用。因为自己后面还需要用FPGA来实现好几个还比较复杂的大工程,所以这个系列慢慢也会写一些文章。文中用到的一些代码并没有贴出来。可以参考野火这块板子官方提供的一些资料。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/46947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

细说MCU用DMA控制ADC采样和串口传送的实现方法

目录 一、建立工程 1.相同的配置 2.配置ADC 3.配置DMA 二、代码修改 1.定义存储ADC采样结果的数组 2.启动ADC与定时器 3.编写主程序代码 4.重定义回调函数 5.查看结果 三、修改DMA模式 1. 修改DMA模式为Circular 2.查看结果 采用DMA(Direct Memory Access&#xf…

WebRTC QOS方法十三.1(TimestampExtrapolator接收时间预估)

一、背景介绍 虽然我们可通过时间戳的差值和采样率计算出发送端视频帧的发送节奏,但是由于网络延迟、抖动、丢包,仅知道视频发送端的发送节奏是明显不够的。我们还需要评估出视频接收端的视频帧的接收节奏,然后进行适当平滑,保证…

卷积神经网络【CNN】--池化层的原理详细解读

池化层(Pooling Layer)是卷积神经网络(CNN)中的一个关键组件,主要用于减少特征图(feature maps)的维度,同时保留重要的特征信息。 一、池化层的含义 池化层在卷积神经网络中扮演着降…

JavaScript与DOM的奇妙探险:从入门到精通的实战笔记

文章目录 JavaScript基本说明特点两种使用方式在script中写使用script标签引入JS文件 数据类型介绍特殊值 运算符算数运算符赋值运算符逻辑运算符:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bbf5c150699845af837d3c45c926e941.png)条件运算符 数组的…

Java_Docker

镜像和容器: 镜像仓库: 存储和管理镜像的平台,镜像仓库中有非常多常用软件的镜像,Docker官方维护了一个公共仓库​​​​​​:​Docker Hub 部署MySQL: docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shang…

Guns v7.3.0:基于 Vue3、Antdv 和 TypeScript 打造的开箱即用型前端框架

摘要 本文深入探讨了Guns v7.3.0前端项目,该项目是基于Vue3、Antdv和TypeScript的前端框架,以Vben Admin的脚手架为基础进行了改造。文章分析了Guns 7.3.0的技术特点,包括其使用Vue3、vite2和TypeScript等最新前端技术栈,以及提供…

如何防止热插拔烧坏单片机

大家都知道一般USB接口属于热插拔,实际任意带电进行连接的操作都可以属于热插拔。我们前面讲过芯片烧坏的原理,那么热插拔就是导致芯片烧坏的一个主要原因之一。 在电子产品的整个装配过程、以及产品使用过程经常会面临接口热插拔或者类似热插拔的过程。…

IDEA的工程与模块管理

《IDEA破解、配置、使用技巧与实战教程》系列文章目录 第一章 IDEA破解与HelloWorld的实战编写 第二章 IDEA的详细设置 第三章 IDEA的工程与模块管理 第四章 IDEA的常见代码模板的使用 第五章 IDEA中常用的快捷键 第六章 IDEA的断点调试(Debug) 第七章 …

Redis的AOF持久化策略(AOF的工作流程、AOF的重写流程,操作演示、注意事项等)

文章目录 缓冲AOF 策略(append only file)AOF 的工作流程AOF 缓冲区策略AOF 的重写机制重写完的AOF文件为什么可以变小?AOF 重写流程 缓冲AOF 策略(append only file) AOF 的核心思路是 “实时备份“,只要我添加了新的数据或者更新了新的数据&#xff0…

问题:4、商业保险与政策性保险的主要不同之处是:经营主体不同、经营目标不同、承保机制不同。 #学习方法#其他#学习方法

问题:4、商业保险与政策性保险的主要不同之处是:经营主体不同、经营目标不同、承保机制不同。 参考答案如图所示

Linux云计算 |【第一阶段】ENGINEER-DAY3

主要内容: LVM逻辑卷管理、VDO、RAID磁盘阵列、进程管理 一、新建逻辑卷 1、什么是逻辑卷 逻辑卷(Logical Volume)是逻辑卷管理(Logical Volume Management,LVM)系统中的一个概念。LVM是一种用于磁盘管理…

【人工智能】机器学习 -- 贝叶斯分类器

目录 一、使用Python开发工具,运行对iris数据进行分类的例子程序NaiveBayes.py,熟悉sklearn机器实习开源库。 1. NaiveBayes.py 2. 运行结果 二、登录https://archive-beta.ics.uci.edu/ 三、使用sklearn机器学习开源库,使用贝叶斯分类器…

[React 进阶系列] useSyncExternalStore hook

[React 进阶系列] useSyncExternalStore hook 前情提要,包括 yup 的实现在这里:yup 基础使用以及 jest 测试 简单的提一下,需要实现的功能是: yup schema 需要访问外部的 storage外部的 storage 是可变的React 内部也需要访问同…

产品经理-工作中5大类技术名词解析(19)

在产品经理与开发的团队协作中,如果自己知道一些专业术语,对业务的开展是有帮助的,很多时候,在沟通过程当中,就是因为自己不懂,所以才不知道怎么去做,想要什么样的结果 在力所能及的情况下,平时,多了解一些专业术语,是有好处的 数据结构 数据结构是技术人员将数据进…

【iOS】static、extern、const、auto关键字以及联合使用

目录 前言extern关键字static关键字const关键字 联合使用static和externstatic和constextern和const auto关键字 先了解一下静态变量所在的全局/静态区的特点:【iOS】内存五大分区 前言 上面提到的全局/静态区中存放的是全局变量或静态变量: 全局变量…

人工智能大模型发展的新形势及其省思

作者简介 肖仰华,复旦大学计算机科学技术学院教授、博导,上海市数据科学重点实验室主任。研究方向为知识图谱、知识工程、大数据管理与挖掘。主要著作有《图对称性理论及其在数据管理中的应用》、《知识图谱:概念与技术》(合著&a…

C++基础语法:STL之容器(5)--序列容器中的list(二)

前言 "打牢基础,万事不愁" .C的基础语法的学习 引入 序列容器的学习.以<C Prime Plus> 6th Edition(以下称"本书")内容理解 本书中容器内容不多只有几页.最好是有数据结构方面的知识积累,如果没有在学的同时补上 接上一篇C基础语法:STL之容器…

excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出

一、介绍 在上篇文章中&#xff0c;我们介绍了 easypoi 工具实现 excel 文件的导入导出。 本篇我们继续深入介绍另一款更优秀的 excel 工具库&#xff1a;easyexcel 。 二、easyexcel easyexcel 是阿里巴巴开源的一款 excel 解析工具&#xff0c;底层逻辑也是基于 apache p…

HTTPS 的加密过程 详解

HTTP 由于是明文传输&#xff0c;所以安全上存在以下三个风险&#xff1a; 窃听风险&#xff0c;比如通信链路上可以获取通信内容。篡改风险&#xff0c;比如通信内容被篡改。冒充风险&#xff0c;比如冒充网站。 HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议&#xff0c…

Spring Cloud LoadBalanced

负载均衡(Load Balance&#xff0c;简称 LB) 是⾼并发, ⾼可⽤系统必不可少的关键组件. 当服务流量增⼤时, 通常会采⽤增加机器的⽅式进⾏扩容, 负载均衡就是⽤来在多个机器或者其他资源中, 按照⼀定的规则合理分配负载. 负载均衡的⼀些实现 就像是eureka中对请求进行轮询的…