0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详细讲解同步后的复位是同步复位还是异步复位?

Hx 来源:FPGA探索者 作者:FPGA探索者 2021-04-27 18:12 次阅读

Xilinx 复位准则:Xilinx FPGA复位策略

(1)尽量少使用复位,特别是少用全局复位,能不用复位就不用,一定要用复位的使用局部复位;

(2)如果必须要复位,在同步和异步复位上,则尽量使用同步复位,一定要用异步复位的地方,采用“异步复位、同步释放”;

(3)复位电平选择高电平复位;

(这里说明,由于 Altera 和 Xilinx 器件内部结构的不同,Altera 的 FPGA 推荐低电平复位)

一、异步复位同步释放

针对异步复位、同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用同步复位还是异步复位?

比如针对输入的异步复位信号rst,使用本地时钟clk将其同步化以后得到一个新的复位信号sys_rst,当使用sys_rst时,是将sys_rst作为同步复位信号还是异步复位信号?

always @(posedge clk or posedge rst) begin if(rst)begin rst_r0 《 = 1‘b1; rst_r1 《 = 1’b1; end else begin rst_r0 《 = 1‘b0; rst_r1 《 = rst_r0; end end assign sys_rst = rst_r1;

如下图所示,选方式1还是方式2?

100062600-124726-1.png

针对此问题查找了很多资料,网络上多是将sys_rst继续按照方式1异步复位使用,Xilinx复位白皮书wp272中提到的异步复位同步释放 如图所示:

100062600-124727-2.png

对于输入的异步复位Asynchronous Reset,首先使用了4个触发器来做同步(一般用2个即可,4个出现亚稳态的概率更小),触发器类型为FDP(异步置位),同步化以后的复位信号去使用时综合出的触发器类型为FDR(同步复位),即在Xilinx中是将sys_rst按照方式2同步复位使用。

使用FDP异步置位的原因是因为Xilinx推荐高电平复位,当异步复位信号到来时,输出复位电平“1”,即异步置位FDP,当复位消失后,D触发器在每个时钟边沿输出前一级触发器的值,一定周期后,最后一级的FDP稳定输出“0”。

使用Xilinx A7系列FPGA实现异步复位、同步释放代码,确定同步化后的复位使用情况。

二、Xilinx复位程序对比

1. 将同步化后的复位当作异步复位信号

/******FPGA探索者******/ always @(posedge clk or posedge rst_async) begin if(rst_async == 1’b1) begin rst_sync_reg1 《= 1‘b1; rst_sync_reg2 《= 1’b1; rst_sync_reg3 《= 1‘b1; rst_sync_reg4 《= 1’b1; end else begin rst_sync_reg1 《= 1‘b0; rst_sync_reg2 《= rst_sync_reg1; rst_sync_reg3 《= rst_sync_reg2; rst_sync_reg4 《= rst_sync_reg3; end end wire sys_rst; assign sys_rst = rst_sync_reg4; always @(posedge clk) begin if(sys_rst == 1’b1) begin data_out_rst_async 《= 1‘b0; end else begin data_out_rst_async 《= a & b & c & d; end end

综合并布局布线后的原理图如图所示,显然,综合后对sys_rst复位,将其作为异步复位综合出FDCE同步使能异步复位(这里不考虑使能),和白皮书WP272给出的参考电路显然不一致。

100062600-124730-3.png

100062600-124732-4.png

2. 将同步化后的复位当作同步复位信号

/******FPGA探索者******/ always @(posedge clk or posedge rst_async) begin if(rst_async == 1’b1) begin rst_sync_reg1 《 = 1‘b1; rst_sync_reg2 《 = 1’b1; rst_sync_reg3 《 = 1‘b1; rst_sync_reg4 《 = 1’b1; end else begin rst_sync_reg1 《 = 1‘b0; rst_sync_reg2 《 = rst_sync_reg1; rst_sync_reg3 《 = rst_sync_reg2; rst_sync_reg4 《 = rst_sync_reg3; end end wire sys_rst; assign sys_rst = rst_sync_reg4; always @(posedge clk) begin if(sys_rst == 1’b1) begin data_out_rst_async 《 = 1‘b0; end else begin data_out_rst_async 《 = a & b & c & d; end end

综合并布局布线后的原理图如图所示,显然,综合后对sys_rst复位,将其作为同步复位综合出FDRE同步使能异步复位(这里不考虑使能),和白皮书WP272给出的参考电路一致。

100062600-124734-5.png

异步复位相比较同步复位,在Xilinx的FPGA中资源是一致的,异步复位的优势在于复位信号一来就能检测到,不需要保持至少一个时钟周期才能在时钟边沿检测到,通过仿真来验证上述电路是否能实现异步复位一来就能检测到。

三、仿真结果

设置时钟50MHz,时钟周期20ns,给一个持续时间3ns的异步复位信号,且持续时间均不出现在时钟上升沿检测期间,可以看到:

(1)rst_async异步复位一旦给出,用于同步的4个寄存器rst_sync_reg1~4立刻输出高电平“1”,在下一个时钟上升沿检测到同步复位并将输出data_out_rst_async复位;

(2)异步复位信号释放后,经过同步的sys_rst经过一定周期后在时钟边沿同步释放;

100062600-124735-6.png

按照同样的复位,将sys_rst看作异步复位,仿真结果如下,相比于上图,区别在于异步复位信号rst_async一旦产生,输出立刻复位,且同样是同步释放,好像这种处理才更符合异步复位、同步释放。。。。。。

100062600-124737-7.png

那么为什么Xilinx白皮书还是将sys_rst按照同步复位去做的呢?难道写错了?

综合考虑可能有这样的因素:

(1)当作同步复位的差别只在于复位时间会稍晚一些,要在时钟的下一个边沿检测到,但是还是能够识别到输入的rst_async异步复位信号,所以从复位角度来说,都能够后实现复位效果;

(2)根据Xilinx复位准则,我们知道同步复位相比异步复位有很多好处,具体参见:Xilinx FPGA 复位策略白皮书,既然两者对后级复位没有功能上的差别,那么优先选择同步复位;

经过异步复位同步释放处理后,相比于纯粹的异步复位,降低了异步复位信号释放导致亚稳态的可能性;相比同步复位,能够识别到同步复位中检测不到的复位信号(如上图所示的rst_async在同步复位是检测不到的);综合两者的优势,异步复位同步释放。

四、Altera复位

Altera还是把这个同步后的复位当作异步复位来用的,且推荐低电平复位。

从上面的分析来看,这里当作异步复位还是同步复位对于复位结果本身没有太大的影响,区别在于Xilinx是推荐同步复位来节省资源(比如DSP48E或BRAM,异步复位比同步复位耗资源),而Altera的FPGA中带异步复位的触发器,想要同步复位需要消耗更多的资源。

100062600-124738-8.png

编辑:lyn

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1634

    文章

    21831

    浏览量

    608058
  • Xilinx
    +关注

    关注

    71

    文章

    2173

    浏览量

    122728
  • 同步复位
    +关注

    关注

    0

    文章

    27

    浏览量

    10766
  • 异步复位
    +关注

    关注

    0

    文章

    47

    浏览量

    13376
收藏 人收藏

    相关推荐

    FPGA复位的8种技巧

    其它输入引脚类似,对 FPGA 来说往往是异步的。设计人员可以使用这个信号在 FPGA 内部对自己的设计进行异步或者同步复位。 不过在一些提示和技巧的帮助下,设计人员可以找到更加合适的
    的头像 发表于 11-16 10:18 549次阅读
    FPGA<b class='flag-5'>复位</b>的8种技巧

    复位电路的设计问题

    前言 最近看advanced fpga 以及fpga设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输入系统复位。 流程: 1.同步
    的头像 发表于 11-15 11:13 252次阅读
    <b class='flag-5'>复位</b>电路的设计问题

    复位电路的三种方式 复位电路的原理和作用

    ) 原理: 上电复位电路通常包含一个RC(电阻-电容)网络。当电源首次接通时,电容充电需要一定的时间,这段时间内电容上的电压较低,导致复位电路输出低电平,触发微控制器的复位信号。当电容充满电
    的头像 发表于 10-21 10:28 2203次阅读

    复位电路的电容多大的 复位电路设计类型有哪几种

    复位电路是电子系统中的一个关键部分,它确保系统在启动或发生故障时能够正确地初始化。复位电路的设计取决于多种因素,包括系统的复杂性、所需的复位时间、以及是否需要上电复位(Power-On
    的头像 发表于 10-21 10:24 527次阅读

    复位电路静电整改案例分享(一)——交换机复位电路

    复位信号,确保单片机在上电能够立即进入初始化状态。其中上拉电阻可以确保在未按下按钮时输入引脚上具有高电平状态,避免输入信号的浮动和噪音干扰。在选择上拉电阻时,根据具体需求和电路设计合理参数可以提高电路稳定性、
    的头像 发表于 10-19 14:56 552次阅读
    <b class='flag-5'>复位</b>电路静电整改案例分享(一)——交换机<b class='flag-5'>复位</b>电路

    复位电路介绍 复位电路的原理及作用

    复位电路(Reset Circuit)是现代电子设备中常见的一种关键电路,它用于确保在正确的时间和条件下将系统恢复到初始状态。复位电路的设计和应用对于保障电子系统的稳定性和可靠性至关重要。 一、复位
    的头像 发表于 10-18 16:44 3450次阅读

    单片机异常复位的原因

    单片机异常复位是指单片机在正常工作过程中,非预期地返回到初始状态或重启。这种异常复位现象可能由多种因素引起,以下是对单片机异常复位原因的详细分析:
    的头像 发表于 10-17 17:56 1760次阅读

    STM32复位电路用复位芯片和阻容复位电路区别

    STM32是一款广泛使用的微控制器,其复位电路设计对于系统的稳定性和可靠性至关重要。本文将详细介绍STM32复位电路中使用复位芯片和阻容复位
    的头像 发表于 08-06 10:26 2020次阅读

    双管正激励磁复位电路的作用

    双管正激励磁复位电路是一种广泛应用于电子设备中的电路,它具有多种功能和优点。 一、双管正激励磁复位电路的作用 双管正激励磁复位电路是一种特殊的电路,它具有以下主要作用: 提供稳定的电源:双管正激励磁
    的头像 发表于 08-02 15:41 724次阅读

    FPGA同步复位异步复位

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的复位操作是设计过程中不可或缺的一环,它负责将电路恢复到初始状态,以确保系统的正确启动和稳定运行。在FPGA设计中,复位方式主要分为同步
    的头像 发表于 07-17 11:12 1950次阅读

    单端正激电路磁芯复位的方法

    单端正激电路是一种常见的开关电源电路,广泛应用于各种电子设备中。在单端正激电路中,磁芯的复位是一个非常重要的问题,它直接影响到电路的稳定性和效率。本文将详细介绍单端正激电路磁芯复位的方法,包括磁芯
    的头像 发表于 07-10 09:51 2110次阅读

    变频器的复位方法有哪些

    变频器作为现代工业自动化控制中的关键设备,其稳定运行对于生产效率和设备安全至关重要。然而,由于各种原因,变频器在运行过程中可能会出现故障或异常,此时进行复位操作是解决问题的一种有效方法。本文将详细
    的头像 发表于 06-11 11:51 5338次阅读

    示波器测量复位信号的原理和方法

    具有重要意义。本文将详细介绍示波器测量复位信号的原理和方法,以帮助工程师和技术人员更好地理解和应用这一技术。
    的头像 发表于 05-17 17:14 1755次阅读

    电容在复位电路中的作用(复位电路具体要怎么设计)

    数字电路中寄存器和 RAM 在上电之后默认的状态和数据是不确定的,如果有复位,我们可以把寄存器复位到初始状态,RAM 的数据可以通过复位来触发 RAM 初始化程序逻辑如果进入了错误的状态。
    发表于 03-13 12:16 1854次阅读
    电容在<b class='flag-5'>复位</b>电路中的作用(<b class='flag-5'>复位</b>电路具体要怎么设计)

    L431采用PLL异步时钟,复位ADC采样值发生偏差的原因?

    前提:可以确认的是外部条件没有变化。 问题:开机复位的情况下,ADC_DMA读取值几乎相同,而每次重新复位,ADC_DMA读出来的值差别较大。在采用ADC
    发表于 03-08 07:32