FPGA同步复位和异步复位的区别以及设计处理

2023-11-18

FPGA复位信号的设计处理

同步复位

同步复位:同步复位信号跟触发器的时钟是同步的,只有在时钟的跳变沿到来之后才会生效,对应verilog代码如下(这种写法会被编译器综合成同步复位):
always@(posedge clk) begin
	if(!rst_n) begin
	...
end

同步复位电路原理
优点:可确保电路百分之百地为同步电路,所以同步复位的时序很容易被静态时序分析器分析。
缺点:大大增加资源消耗,触发器的输入端会增加一个LUT,同时也降低了系统能运行的最高时钟速度。

异步复位

异步复位:异步复位信号是直接到达寄存器的复位端,跟寄存器的时钟无确定的时序关系,对应的verilog代码如下(这种写法会被编译器综合成异步复位):
always@(posedge clk or negedge rst_n) begin
	if(!rst_n) begin
	...
end

异步复位电路原理
优点:消耗资源少;不像同步复位那样需要插入到数据路径中,因此不会影响数据到达触发器的时间,可提高运行时钟;复位即刻生效,不像同步复位那样依赖于时钟。
缺点:异步复位是自然的到达触发器的复位端,与触发器所在时钟域无确定的时序关系,所以异步复位信号的时序分析比较困难;易受毛刺影响;在复位的时候,电路不会有什么问题,但是复位释放时,很容易产生亚稳态,且无法保证电路中各个触发器的异步复位与时钟之间的时序关系是一样的,就会导致有些触发器复位及时而其他的触发器在下一个时钟才会复位,这对于一个寄存器的下一个输出依赖于其他寄存器输出的反馈电路会致命性的影响。

异步复位同步释放(推荐)

这种复位电路完美继承了同步复位和异步复位的优点且有效避免了这两者的缺点。对应的verilog代码如下:
module sync_async_reset(
	input wire clock,
	input wire reset_n,
	input wire data_in,
	output reg data_out
);
	reg rstn_1,rstn_2;
	always @(posedge clock or negedge reset_n) begin
		if(!reset_n) begin
			rstn_1<=1'b0;
			rstn_2<=1'b0;
		end else begin
			rstn_1<=1'b1;
			rstn_2<=rstn_1;
		end
	end
	always @(posedge clock ) begin
		if(!rstn_2) begin
			data_out<=1'b0;
		end else begin
			data_out<=data_in;
		end
	end
endmodule

在这里插入图片描述
上面这种同步化的异步复位方式,可以做到即刻复位同步释放,但是容易受到噪声和窄脉冲干扰,故而最好对进入到FPGA的异步复位信号先进行滤波和去抖动。

友善提醒

不管是实现哪一种复位方式,虽然看起来没有增加什么代码量,但是他们消耗的FPGA资源远比你想象中要多得多,尤其是同步复位方式,复位的寄存器位宽越大消耗的资源就越多。因此,在设计的时候需要多想一步,这个复位是否真的有必要。典型的类似axi stream总线,一般情况下复位的时候只需要复位tready和tvalid即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA同步复位和异步复位的区别以及设计处理 的相关文章

  • Quartus II 安装

    本次介绍使用的 Quartus 版本为 10 1 目前 Quartus II 官网已经没有 13 1 以下版本的安装包 大家可以安装 13 1 以上版本的软件 功能都是大同小异 下载地址 FPGA Software Download Cen
  • zynq之petalinux安装和编译

    首先下载petalinux v2015 4 final installer dec run 去xilinx官网或者我的网盘下载http pan baidu com s 1gf11UGr mkdir opt pkg petalinux v20
  • Verilog--CDC跨时钟域处理(快时钟域到慢时钟域)

    Verilog CDC跨时钟域处理 快时钟域到慢时钟域 CDC问题 单比特信号的跨时钟域问题 从快时钟域到慢时钟域 从慢时钟域到快时钟域 多比特信号的跨时钟域问题 异步FIFO 握手协议 DMUX 格雷码 双D触发器 今天先写单比特信号从快
  • SmartFusion从FPGA到ARM(四)——MSS_TIMER定时器的使用

    文章目录 1 定时器资源简介 2 MSS TIMER库函数简介 3 简单的周期性中断 4 自定义产生波形 5 64位定时器的使用 6 单次中断模式 系列教程 SmartFusion从FPGA到ARM系列教程 1 定时器资源简介 SmartF
  • [FPGA系列] 扩展知识 --- 时钟小结

    一 基本概念 时钟域 由同一个时钟信号控制的区域 时钟抖动 Jitter 相对于理想时钟信号 实际时钟信号存在时而超前 时而之后的偏移 时钟偏斜 Skew 时钟信号到达数字电路各个部分所用时间的差异 时钟漂移 Wander 工程上解释 抖动
  • verilog中wire和reg类型的区别

    module counter parameter CNT MAX 25 d24 999 999 input wire sys clk input wire sys rst n output reg led out reg 24 0 cnt
  • 【Xilinx】SynchronousInterruptHandler错误排查笔记

    SynchronousInterruptHandler错误排查笔记 一 ArmV8的异常处理 二 64位lscript ld的修改 三 asm vectors S的修改 四 SynchronousInterruptHandler函数解析 五
  • 八段数码管动态显示(输入数据为BCD编码)

    八段数码管动态显示 输入数据为BCD编码 一 数码管概述 图1 八段共阴数码管内部等效原理图 图2 八段共阳数码管内部等效原理图 上面两图分别是对应八段共阴 共阳的数码管内部等效图 共阴是将八个LED数码管的阴极连接在一起接低 阳极segm
  • 输入延时(Input Delay)与输出延时(Output Delay)

    一 设置输入延时 Input Delay 1 不同的路径需要使用不同的约束 2 输入延时的定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input d
  • win10下安装vivado 2018.3之后ise14.7 的impact 无法使用

    软件版本号 操作系统win10 ise14 7 vivado 2018 3 ise14 7 在win10里面问题总结 1 ise14 7 闪退问题 比较好解决 论坛上比较多的解决方法 2 ise 14 7 windows 10 版本的ise
  • 采用Vivado 配置xilinx GTX的SATA设计

    从Vivado开始 配置GTX的时候 多了一个SATA协议支持 但有些小地方还需要自己另外设置 整理了一下 分享给大家 首先打开Transceivers wizard 打开页签 线速率和参考时钟选择 在协议里面选择SATA2或者SATA3
  • verilog 基本语法 {}大括号的使用

    的基本使用是两个 一个是拼接 一个是复制 下面列举了几种常见用法 基本用法 表示拼接 第一位 第二位 表示复制 4 a 等同于 a a a a 所以 13 1 b1 就表示将13个1拼接起来 即13 b1111111111111 拼接语法详
  • FPGA学习笔记(一)__电平知识

    常见电平标准 文章目录 1 TTL电平标准 2 LVTTL电平标准 1 LVTTL3V3 2 LVTTL2V5 3 CMOS电平标准 4 LVCOMS电平标准 1 LVCOMS3V3 2 LVCOMS2V5 3 LVCOMS1V8 4 LV
  • FPGA功耗估计(二)

    针对于Altera的Cyclone III 做出了静态功耗 对于Altera 其提供了一个功耗早期估计工具 可以在官网上下到 首先需要将宏设置为安全 在excel选型中选择文件 之后便可看到 根据相应的选择 红框部分 可以查看静态功耗 对于
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • PyOpenCL 中的时间测量

    我正在 FPGA 和 GPU 中使用 PyOpenCL 运行内核 为了测量执行所需的时间 我使用 t1 time event mykernel queue c width c height block size block size d c
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • verilog $readmemh 对于 50x50 像素 RGB 图像花费太多时间

    我正在尝试编译用于 FPGA 编程的 verilog 代码 我将在其中实现 VGA 应用程序 我使用 QuartusII 和 Altera 我正在尝试正确使用 readmemh 来逐像素获取图片 现在 我已经使用 matlab 将图片转换为
  • FPGA大输入数据

    我正在尝试向 FPGA 发送 4 KB 字符串 最简单的方法是什么 是我正在使用的fpga的链接 我正在使用 Verilog 和 Quartus 您的问题的答案在很大程度上取决于将数据输入 FPGA 的内容 即使没有您需要遵守的特定协议 S
  • 如何从 Spartan 6 写入 Nexys 3 FPGA 板上的 Micron 外部蜂窝 RAM?

    我到处都查过了 数据表 Xilinx 网站 digilent 等等 但什么也没找到 我能够使用 Adept 工具来验证我的蜂窝 RAM 是否正常运行 但我找不到任何库存 VHDL 代码作为控制器来写入数据和从中读取数据 帮助 找到了此链接

随机推荐

  • vue 全局loading的思路和方法

    Vue 全局 loading 的实现思路一般是在 Vue 实例中添加一个 loading 组件 通过控制该组件的显示和隐藏来实现全局 loading 的效果 具体思路如下 创建一个全局的 Vue 组件 Loading 该组件用于显示 loa
  • 使用Aspect切面实现系统日志并存入数据库

    使用Aspect切面实现系统日志并存入数据库 1 pom xml中 加入Maven依赖
  • 标准C++库用法

    本文中提到的函数库有
  • JOIN与INNER JOIN区别

    一 指代不同 1 JOIN 用于根据两个或多个表中的列之间的关系 从这些表中查询数据 2 INNER JOIN 组合两个表中的记录 只要在公共字段之中有相符的值 二 特点不同 1 JOIN 每个主键的值都是唯一的 这样做的目的是在不重复每个
  • JS求任意字符串中出现最多的字符以及出现的次数

    随意定义一个字符串 var str 111iiiw2shhfel000 定义函数 function num str 定义一个空对象 因为这边要求出现最多次数 以及出现的字符 这边使用对象的方式再合适不过了 键值对的形式 var obj 求出
  • 在idea使用本地jetty

    参考 https www jetbrains com idea help run debug configuration jetty server html背景 web开发当中 我觉得服务层的代码尽量用单元测试来测 这样可减少启动web容器
  • HTTP代理编程:Python实用技巧与代码实例

    今天我要与大家分享一些关于HTTP代理编程的实用技巧和Python代码实例 作为一名HTTP代理产品供应商 希望通过这篇文章 帮助你们掌握一些高效且实用的编程技巧 提高开发和使用HTTP代理产品的能力 一 使用Python的requests
  • 小数转化为二进制

    小数转换为二进制方法 a 0 125 10 0 125 10 转化为二进制方法 取每次结果的小数乘以2得到b 取b的整数位 如果b为1 0结束计算得到结果 0 125 2 0 25 gt 取整数部分 0 0 25 2 0 5 gt 0 0
  • 【C#】.Net Framework框架下使用SQLike以及基本概念

    2023年 第32周 第2篇文章 给自己一个目标 然后坚持总会有收货 不信你试试 在C 的 NET Framework框架下 有很多轻量级数据库选择 比如 SQLike就是其中一款 一起来了解SQLike的简单使用吧 目录 一 轻量级数据库
  • 关于VUE 配置文件config详解内容

    const path require path module exports 区分打包环境与开发环境 process env NODE ENV production 打包环境 process env NODE ENV development
  • 【知识蒸馏】知识蒸馏(Knowledge Distillation)技术详解

    参考论文 Knowledge Distillation A Survey 1 前言 近年来 深度学习在学术界和工业界取得了巨大的成功 根本原因在于其可拓展性和编码大规模数据的能力 但是 深度学习的主要挑战在于 受限制于资源容量 深度神经模型
  • C++ 使用海康威视SDK将视频推流到rtmp服务器

    研究FFmpeg有两三年了 一直没写过这方面的文章 今天记一下 由于工作关系 需要将化工企业内部的视频发布到一个部署在公网的视频服务器 然后由相关人员浏览 由于是化工企业 企业严禁外部的机器直接访问视频网络 最多提供一个跳板机 因此 两年多
  • 干洗店小程序,洗鞋店小程序,互联网洗鞋店,企业干洗方案,干洗行业小程序,上门取衣小程序,预约干洗小程序,校园干洗店小程序,工厂干洗店小程序,干洗店小程序开发;

    干洗店小程序 洗鞋店小程序 互联网洗鞋店 企业干洗方案 干洗行业小程序 上门取衣小程序 预约干洗小程序 校园干洗店小程序 工厂干洗店小程序 干洗店小程序开发 微信干洗店小程序 一 核心功能介绍 1 支持上门取送 送货到店 寄存网点 智能衣柜
  • oracle9i升级oracle10g

    author skate time 2009 09 11 网上看到一篇oracle9i升级oracle10g的文章 觉得不错 记录下来 你可以参考汪海的文章 http wzwanghai spaces live com 37AFBD116
  • day3作业

    在家目录下创建目录名为 shuren ubuntu ubuntu mkdir shuren 在shuren目录下创建d1 d2 d3 注意d2在d1目录下 d3在d2目录下 ubuntu ubuntu mkdir shuren d1 d2
  • java 数组作为方法参数

    数组作为方法参数 例 定义方法 打印输出数组元素的值 public void printArray int arr 数组明指向数组的第一个的元素 数组作为方法参数的方法调用 数组作为方法参数 当传参的时候 传递的是数组的名字 而在方法中定义
  • React 组件通讯

    目录 1 组件通讯 概念 1 组件的特点 2 知道组件通讯意义 总结 2 组件通讯 props 基本使用 1 传递数据和接收数据的过程 2 函数组件使用 props 3 类组件使用 props 总结 3 组件通讯 props 注意事项 1
  • Mybatis的缓存(实例)

    目录 概念 实例 Mybatis中的一级缓存 清空一级缓存的时机 Mybatis中的二级缓存 总结 gt 项目源码 概念 缓存 存于内存中的临时数据 使用缓存优点 减少和数据库的交互次数 提高执行效率 缓存适用于 经常查询并且不经常改变的
  • GO连接数据库--踩坑(超详细)

    当使用go语言对数据进行连接时需要几部操作 1 数据库侧 需要允许远程连接 具体操作方法详见 本地主机连接阿里云数据库 自建数据库 排雷 秋为春的博客 CSDN博客 2 GO侧 1 需要引入go sql driver驱动 常见的引入方法有两
  • FPGA同步复位和异步复位的区别以及设计处理

    FPGA复位信号的设计处理 同步复位 同步复位 同步复位信号跟触发器的时钟是同步的 只有在时钟的跳变沿到来之后才会生效 对应verilog代码如下 这种写法会被编译器综合成同步复位 always posedge clk begin if r