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.xdnf.cn/news/1484151.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

MVVM示例程序

目录 一 定义可通知属性 二 定义前端并绑定 三 运行效果 一 定义可通知属性 internal class MainViewModel : ObservableObject{/// <summary>/// 供前端的Command命令Binding调用/// </summary>public RelayCommand ShowCommand { get; set; }public MainViewM…

防火墙之内容安全过滤技术篇

深度行为检测技术&#xff1a;是一种基于应用层的流量检测和控制技术 DPI:针对完整的数据包&#xff0c;进行内容的识别和检测 基于应用网关的检测技术 --- 有些应用控制和数据是分离的&#xff0c;比如一些视频流。一开始会通过TCP协议链接之后&#xff0c;协商一些参数&#…

vue项目源码调试方法 ,chrome调试控制台工作区使用,利用chrome控制台调试vue项目源码的方法 图解

我们在开发vue项目的时候&#xff0c;项目开始后的第一件事情应该就是准备调试工作了&#xff0c;Chrome调试控制台就给我们提供了这样的一个方便的调试工作区。方法为&#xff0c;在Chrome浏览器里面打开你要调试的页面&#xff0c;然后打开调试控制台&#xff0c;如下&#x…

引领小模型潮流!OpenAI发布功能强大且成本低的GPT-4o mini

GPT-4o mini的成本比GPT-3.5 Turbo低了超过60%&#xff0c;其聊天表现优于Google的Gemini Flash和Anthropic的Claude Haiku。该模型从周四开始对ChatGPT的免费用户、ChatGPT Plus用户和团队订阅用户开放&#xff0c;并将在下周向企业用户开放。OpenAI计划未来将图像、视频和音频…

FairGuard游戏加固入选《嘶吼2024网络安全产业图谱》

2024年7月16日&#xff0c;国内网络安全专业媒体——嘶吼安全产业研究院正式发布《嘶吼2024网络安全产业图谱》(以下简称“产业图谱”)。 本次发布的产业图谱&#xff0c;共涉及七大类别&#xff0c;127个细分领域。全面展现了网络安全产业的构成和重要组成部分&#xff0c;探…

uniapp上传功能用uni-file-picker实现

文章目录 html代码功能实现css样式代码 html代码 <uni-file-pickerselect"onFileSelected"cancel"onFilePickerCancel"limit"1"class"weightPage-upload-but"file-mediatype"image"></uni-file-picker><imag…

Python+Flask+MySQL/Sqlite的个人博客系统(前台+后端管理)【附源码,运行简单】

PythonFlaskMySQL/Sqlite的个人博客系统&#xff08;前台后端管理&#xff09;【附源码&#xff0c;运行简单】 总览 1、《个人博客系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 管理员登录2.2 程序主页面2.3 笔记新增界面2.4 文章新增界面2.5 文章/笔记管理界面2…

jenkins+gitlab+harbor+maven自动化容器部署

一、gitlab安装配置 1.1、安装 由于比较懒啊&#xff01;这里就直接使用docker安装了啊&#xff01; 没事先更新一个yum源&#xff1a;yum update -y 整一个gitlab镜像&#xff1a;docker pull gitlab/gitlab-ce 运行一个gitlab容器&#xff1a;docker run -d -p 8443:443 -p…

《蔚蓝档案》电脑版PC端模拟器游玩教程

《蔚蓝档案》电脑版PC端模拟器游玩教程 《蔚蓝档案》是一款主打学园、青春、物语三大特色的二次元角色扮演类手游。作为一款重养成、剧情的手游&#xff0c;沉浸式体验尤为重要。不过很多小伙伴在用手机玩蔚蓝档案时可能经常遇到屏幕太小透明清新的色调不清晰、有时候还会出现…

《数据结构》预备

在学习数据结构之前&#xff0c;需要预先准备学习的C语言知识是&#xff1a;自定义类型--结构体类型。 本节主要讲的内容有&#xff1a; 1.结构体类型的声明 2.结构体变量的创建和初始化 3.结构成员的访问操作符 4.结构体传参 5.结构体内存对齐 6.结构体实现位段(位域) 正文开…

WORD中使用粘贴时发生“Microsoft Visual Basic 运行时错误‘53文件未找到:MathPage.WIL”

WORD中使用粘贴时发生“Microsoft Visual Basic 运行时错误’53文件未找到:MathPage.WIL” 解决方法 1.关闭word 2.找到并打开自己安装的MathType所在文件夹中MathPage.WIL 因为我安装64位&#xff0c;所以打开64位安装路径下的MathPage.WIL 3.把这个文件复制到该目录下&a…

ExcelVBA运用Excel的【条件格式】(四)

ExcelVBA运用Excel的【条件格式】&#xff08;四&#xff09;条件格式FormatConditions.AddTop10方法 【问题】 快速定位到数据的前10或后10 【效果图】 如图 【知识点】 在VBA中&#xff0c;FormatConditions.AddTop10方法用于向Range对象添加一个基于最高或最低数值的条件格式…

ubuntu源码安装Odoo

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 Odoo具有非常多的安装方式&#xff0c;除了我最爱用的 apt-get install&#xff0c;我们还可以使用git拉取Odoo源码进行安装。 本次示例于ubuntu20.04 Desktop上进行操作&#xff0c;理论上在ubuntu14.04之后都可以用此操作。 …

Atom - hackmyvm

简介 靶机名称&#xff1a;Atom 难度&#xff1a;简单 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmAtom 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;Atom&#xff09;&#xff1a;192.168.56.101 跳板机IP(windows 11)&#xff1…

分享:一次性查找多个PDF文件,如何根据txt文本列出的文件名批量查找指定文件夹里的文件,并复制到新的文件夹,不需要写任何代码,点点鼠标批量处理一次性搞定

简介&#xff1a; 该文介绍了一个批量查找PDF文件&#xff08;不限于找PDF&#xff09;的工具&#xff0c;用于在多级文件夹中快速查找并复制特定文件。用户可以加载PDF库&#xff0c;输入文件名列表&#xff0c;设置操作参数&#xff08;如保存路径、复制或删除&#xff09;及…

一个自托管免费开源的人脸识别系统

大家好&#xff0c;今天给大家分享一个自托管免费开源的人脸识别系统CompreFace。 CompreFace 是一个开源的人脸识别系统&#xff0c;由 Exadel 公司开发并维护。它提供了一个基于深度学习的解决方案&#xff0c;用于人脸检测、识别和验证。 CompreFace 的设计旨在简化人脸识别…

RV1103使用rtsp和opencv推流视频到网页端

参考&#xff1a; Luckfox-Pico/Luckfox-Pico-RV1103/Luckfox-Pico-pinout/CSI-Camera Luckfox-Pico/RKMPI-example Luckfox-Pico/RKMPI-example 下载源码 其中源码位置&#xff1a;https://github.com/luckfox-eng29/luckfox_pico_rtsp_opencv 使用git clone由于项目比较大&am…

视频压缩文件太大了怎么缩小?怎么压缩视频大小?视频压缩方法:10个!(宝藏)

视频压缩文件太大了怎么缩小&#xff1f;让我看看是谁下班之后不是一手刷手机短视频&#xff0c;顺便葛优躺在沙发上的&#xff1f;互联网发展到现在&#xff0c;视频已成为我们生活中不可或缺的一部分。不管是视频录制还是视频缓存&#xff0c;视频文件体积越来越庞大&#xf…

hive3 hql脚本传递参数

在数仓的构建过程中&#xff0c;需要配置hive的调度任务&#xff0c;这时就需要对hive hql脚本进行封装&#xff0c;将参数提取出来&#xff0c;作为变量进行配置&#xff0c;比如日期、类型等。 hive3版本&#xff0c;hive -f 在执行sql脚本文件的时候是可以传递参数。 具体…

基于STC8H4K64TL单片机的触摸功能和数码管驱动功能实现一个触摸按键单击长按都增加数值另一个触摸按键单击长按都减少数值应用

基于STC8H4K64TL单片机的触摸功能和数码管驱动功能实现一个触摸按键单击长按都增加数值另一个触摸按键单击长按都减少数值应用 STC8H4K64TL单片机介绍STC8H4K64TL单片机管脚图(48个引脚)STC8H4K64TL单片机串口仿真与串口通信STC8H4K64TL单片机管脚图(32个引脚)STC8H4K64TL单…