FPGA学习之日常工作复位电路
最近一个多月没有写博客了,然后最近工作中也遇到一个复位信号的问题。问题是这样的,关于外部复位信号,之前我们的处理方式都是通过PLL产生的Lock信号作为内部的复位信号。但是由于换到A54上面没有IP核,所以只有不用PLL,改成直接用外部复位信号,这时候问题就来了,发现有些模块并没有上电复位。然后通过异步复位,同步释放的方式解决了该问题。所以再记录学习一下!
1 同步复位
同步复位指的是当时钟上升沿检测到复位信号,执行复位操作。有效的时钟沿是前提
verilog是这样写的
always @(posedge clk) beginif(rst_n)y <= 1'b0;elsey <= b;
end
同步复位的优点有如下:
- 可以使所设计的系统成为100%的同步时序电路,有利于时序分析,而且综合出较高的Fmax
- 由于只有时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺
- 有利于仿真器仿真
缺点如下:
- 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务,同时还要考虑诸如时钟偏移、组合逻辑路径延时、复位延时等因素(所以复位信号有时需要脉冲展宽,用以保证时钟有效期间有足够的复位宽度)
- 由于大多数的逻辑期间的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会一方面额外增加FPGA内部逻辑资源,另一方面也增加了相应的组合逻辑门延时。
2 异步复位
异步复位指的是无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。当时钟上升沿检测到复位信号,执行复位操作。
verilog是这样写的:
always @(posedge clk or negedge rst_n) beginif(rst_n)y <= 1'b0;elsey <= b;
end
异步复位的优点:
- 大多数目标器件库的DFF都有异步复位端口,那么该触发器的复位端口就不需要额外的组合逻辑,这样就可以节省资源
- 设计相对简单
- 异步复位信号产生和相应都很方便(电路在任何情况下都能复位而不管是否有时钟出现)
异步复位的缺点:
- 最大的问题在于它属于异步逻辑,问题出现在复位释放的时候,而不是有效时,如果复位释放接近时钟有效沿,则触发器的输出可能进入亚稳态(此时clk检测到的rstn的状态就会是一个亚稳态,即是0是1是不确定的,从而导致复位失败)
异步复位信号需要满足 recovery time(恢复时间)和 removal time(去除时间),才能有效的复位和释放复位,防止出现亚稳态。
释放复位时,复位信号在时钟有效沿来临之前就需要提前一段时间恢复到非复位状态,这段时间为 recovery time。类似于同步时钟下触发器的 setup time。
复位时,复位信号在时钟有效沿来临之后,还需要在一段时间内保持不变,这段时间为 removal time。类似于同步时钟下触发器的 hold time。
recovery 与 removal time 示意图如下所示。

- 可能因为噪声或者毛刺照成虚假复位信号(比如系统正常工作时突然复位)(注意:时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要注意的问题)
- 总结下来,我们推荐使用异步复位、同步释放的方式,并且复位信号为低电平有效!
进一步解释一下,
1 复位信号到来的有效与否与clk无关,而且复位信号的撤除也与clk无关,但是复位信号的撤除是在下一个clk来到后才起的作用。
2 异步复位同步释放的目的就是为了防止复位信号撤除时,可能产生的亚稳态
异步复位同步释放的代码如下:
always @(posedge clk or negedge rst_async_n) beginif(!rst_async_n) beginrst_s1 <= 1'b0;rst_s2 <= 1'b0;endelse beginrst_s1 <= 1'b1;rst_s2 <= rst_s1;endendassign rst_sync_n = rst_s2;
为什么是 rst_s1 <= 1’b1,因为本身复位时高扇出信号,这样可以减少复位信号的扇出数,1’b1 意思是直接接电源,节省资源,这样可以使电路性能更好
3 继续深入理解复位,同步复位,异步复位,异步复位同步释放
3.1 前言
电路中任何一个寄存器、存储器结构和其他时序单元都必须附加复位逻辑电路,以保证电路能够从错误状态中恢复、可靠性工作。对于综合实现的真实电路,通过复位使电路进入初始状态或者其他预知状态。复位在数字IC设计中是不可缺少的一部分。
3.2 异步复位
一般来说,复位信号有效后会保持比较长的一段时间,确保register被复位完成。但是复位信号释放时,因为其和时钟是异步的关系,我们不知道它会在什么时刻被释放。
相关文章:
FPGA学习之日常工作复位电路
最近一个多月没有写博客了,然后最近工作中也遇到一个复位信号的问题。问题是这样的,关于外部复位信号,之前我们的处理方式都是通过PLL产生的Lock信号作为内部的复位信号。但是由于换到A54上面没有IP核,所以只有不用PLL,…...
【洛谷 P1177】【模板】快速排序 题解(快速排序+指针)
【模板】快速排序 题目描述 利用快速排序算法将读入的 NNN 个数从小到大排序后输出。 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C 选手请不要试图使用 STL,虽然你可以…...
Pthon--自动化实用技巧篇--文件目录处理
为什么要讲这一篇,主要是因为这个在自动化测试框架或者脚本的编写的时候会用到,还是比较方便的。看上述两个函数。getcwd()、chdir()。使用 os.getcwd() 函数获得当前工作目录。使用 os.chdir()函数改变当前工作目录。所以在用chdir()函数的时候别忘记指…...
想招到实干派程序员?你需要这种面试法
技术招聘中最痛的点其实是不精准。技术面试官或CTO们常常会向我们吐槽: “我经常在想,能不能把我们项目中的代码打印出来,作为候选人的面试题的一部分?” “能不能把一个Bug带上环境,让候选人来试试怎么解决…...
cesium常见操作:鼠标点击获取对象
目录 一、viewer.scene.pick(获取Cartesian2) 二、 viewer.scene.pickPosition(获取Cartesian3) 三、viewer.scene.drillPick(穿透拾取,获取所有对象) 四、viewer.scene.globe.pick…...
【玩转c++】git的安装和使用以及可视化处理
本期主题:git的安装和使用(windows环境)博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题 小编的能力有限,出现错误希望大家不吝赐1.两个工具介绍第一个工具git,链接gitee或者github等代码托…...
第三阶段02-Mybatis框架
Mybatis框架 Mybatis框架是目前最流行的数据持久层框架, 使用Mybatis框架可以帮助程序员自动生成JDBC代码, 程序员只需要通过注解或xml配置文件提供需要执行的SQL语句,以及对象和表的映射关系, Mybatis框架会根据此映射关系和SQL自动生成出JDBC代码,从而提高开发效率 Mybatis框…...
基于超像素的多视觉特征图像分割算法研究
0.引言 背景: 经典聚类算法:Kmeans、FCM 现有问题: 1)现有算法大都是基于单一的视觉特征而设计的,eg:基于颜色特征的分割。 2)没有考虑像素周围的空间信息;分割结果:多噪…...
mysql的三大日志
摘自https://blog.csdn.net/chuige2013/article/details/123027580 一. 初步认识 binlog二进制日志 redolog undolog 二. binlog binlog记录写入行操作 作用 1)、主从复制:在Master端开启binlog,然后将binlog发送到各个Slave端,S…...
API接口及社区电子商务化的解释
API是应用程序的开发接口,在开发程序的时候,我们有些功能可能不需要从到到位去研发,我们可以拿现有的开发出来的功能模块来使用,而这个功能模块,就叫做库(libary)。比如说:要实现数据传输的安全,…...
[蓝帽杯 2021]One Pointer PHP
知识点:php 数组整型溢出,open_basedir 绕过分析 利用数组整型溢出绕过,因为PHP 会对溢出的数字处理为 float 类型。 <?php include "user.php"; if($userunserialize($_COOKIE["data"])){$count[$user->count]…...
【JAVA】xxl-job服务搭建
xxl-job服务搭建 1.下载xxl-job项目 https://github.com/xuxueli/xxl-job 2.数据库表创建 3.修改配置 注意:这是两个项目,一个是xxl-job前台,一个是xxl-job执行器,找到这两个项目得配置文件,修改配置。 配置文件地址…...
毕业设计 基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线设计
基于STM32单片机生理监控心率脉搏TFT彩屏波形曲线设计1、项目简介1.1 系统构成1.2 系统功能2、部分电路设计2.1 STM32F103C8T6核心系统电路设计2.2心率检测电路设计2.3 TFT2.4寸彩屏电路设计3、部分代码展示3.1 ADC初始化3.2 获取ADC采样值3.3 LCD引脚初始化3.3 在LCD指定位置显…...
【10k~30k的区别】=== 功能测试、自动化测试、性能测试的区别
按测试执行的类型来分:功能测试、自动化测试、性能测试 1.功能测试 功能测试俗称点点点测试。初级测试人员的主要测试任务就是执行测试工程师所写的测试用 例,记录用例的执行状态及bug情况。与开发人员进行交互直到bug被修复。 功能测试理论…...
《MySQL学习》 索引失效的三种特殊情况
一.条件字段使用函数 explain select * from bpm_proc_instance bpi where CREATED_AT > 2022-06-01 CREATED_AT 字段建立了索引,此时explain分析的结果表明能使用到索引 但如果我们对 CREATED_AT 字段使用函数 explain select * from bpm_proc_instance bpi w…...
wafw00f 防火墙探测
kali机器自带防火墙探测工具wafw00,它可以通过发送正常以及不正常甚至包含恶意代码的HTTP请求,来探测网站是否存在防火墙,并识别防火墙的厂商及类型。安装:git clone https://github.com/EnableSecurity/wafw00f.git python setup…...
MySQL学习(1)[参考书籍:mysql是怎么运行的]
目录 一、mysql设计模式和技术 二、mysql服务器和客户端 启动mysql服务 启动mysql客户端程序 三、mysql存储引擎 四、mysql配置 五、mysql系统变量 六、mysql字符集 编码和解码: 常见字符集(五种): 相关概念࿱…...
用Python制作邮件检测器
github地址: https://github.com/CaLlMeErIC/MailDetective 因为需求需要写一个简单的邮件检测系统的框架,这里记录下思路 首先第一反应,这个检测系统不应该是各个邮件收件系统都有自带的吗,于是搜索了下是否有相关的邮件检测开源软件&#…...
K8S---pod基础概念
目录 一、资源限制 二、Pod 的两种使用方式 三、Pod 资源共享 四、底层容器Pause 1、Pause共享资源 1.1 网络 1.2 存储 1.3 小结 2、Pause主要功能 3、Pod 与 Pause 结构的设计初衷 五、Pod容器的分类 1、基础容器(infrastructure container)…...
激活函数入门学习
本篇文章从外行工科的角度尽量详细剖析激活函数,希望不吝指教! 学习过程如下,先知道这个东西是什么,有什么用处,以及怎么使用它: 1. 为什么使用激活函数 2. 激活函数总类及优缺点 3. 如何选择激活函数 …...
STM32CubeMX LL库配置外部中断,从按键消抖到中断嵌套的实战避坑指南
STM32CubeMX LL库外部中断深度优化:从硬件消抖到中断嵌套的工程实践 当你的嵌入式系统需要实时响应外部事件时,外部中断(EXTI)往往是最高效的选择。但在实际项目中,简单配置EXTI只是开始——按键抖动导致的误触发、中断优先级冲突引发的死锁、…...
重庆优质小程序开发性价比优选推荐
在重庆,随着小程序开发市场的迅速发展,企业面临着众多选择。为了确保项目的成功、选择一家靠谱的小程序开发公司成为核心。这些公司能够提供高质量的服务市场需求、为企业量身定制解决方案。分析各家公司在服务质量和技术实力上的差异合作伙伴。另外&…...
Honey Select 2终极优化补丁:200+插件一键安装,打造完美游戏体验
Honey Select 2终极优化补丁:200插件一键安装,打造完美游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2…...
【仅限首批Early Access用户】Claude 3.5 Sonnet的“动态温度调节”机制详解:如何让模型在严谨性与创意性间智能切换?
更多请点击: https://intelliparadigm.com 第一章:Claude 3.5 Sonnet新功能详解 Anthropic 正式发布的 Claude 3.5 Sonnet 在推理速度、多模态理解与工具调用能力上实现显著跃升,尤其在代码生成与结构化输出方面表现突出。该模型原生支持 JS…...
多模态(同时处理红外和可见光图像)目标检测任务的模型 以YOLOv8为基础如何组织数据、训练模型以及进行推理处理 红外与可见光图像数据集
多模态(同时处理红外和可见光图像)目标检测任务的模型 以YOLOv8为基础如何组织数据、训练模型以及进行推理处理 红外与可见光图像数据集 以下文字及代码仅供参考。 文章目录数据集准备目录结构训练代码安装依赖项训练脚本处理多模态输入数据集准备转换图…...
别再用重启就丢数据的流量统计了!OpenWrt上nlbwmon的持久化配置与性能优化全攻略
OpenWrt高级流量监控:nlbwmon持久化配置与性能优化实战 每次重启路由器后流量统计归零?图表加载慢到怀疑人生?这些问题困扰着许多OpenWrt用户。本文将带你深入解决nlbwmon的两大核心痛点——数据持久化和界面响应速度,打造一个真正…...
FPGA新手避坑指南:用SPWM驱动电机时,你的死区时间加对了吗?
FPGA电机驱动实战:SPWM死区时间设计的核心要点与避坑策略 在数字电源和电机控制领域,FPGA因其并行处理能力和精确时序控制而备受青睐。许多工程师在成功实现SPWM信号生成后,往往忽略了驱动电路中最致命的一环——死区时间设置。我曾亲眼见证过…...
FPGA调试实录:我的SPI Master模块为什么读不到数据?常见问题排查指南
FPGA调试实录:SPI Master模块数据读取失败的深度排查指南 当你的SPI Master模块在调试过程中突然"罢工",示波器上的波形看似正常却始终无法读取数据时,那种挫败感每个硬件工程师都深有体会。本文将从实战角度出发,分享一…...
气象数据分析实战:用Python+cinrad从雷达基数据中提取组合反射率并可视化
气象数据分析实战:用Pythoncinrad从雷达基数据中提取组合反射率并可视化 雷达基数据是气象业务和科研中的宝贵资源,尤其在强对流天气监测和短临预报中发挥着关键作用。对于气象从业者来说,如何高效地从原始雷达数据中提取组合反射率…...
USB枚举过程深度解析:主机是如何‘读懂’你的配置描述符的?
USB枚举过程深度解析:主机是如何‘读懂’你的配置描述符的? 当我们将一个USB设备插入电脑时,短短几秒钟内,主机和设备之间已经完成了数十次数据交换。这个过程被称为枚举(Enumeration),是USB协议…...
