首页 > 其他分享 >【FPGA基础】同步复位与异步复位

【FPGA基础】同步复位与异步复位

时间:2023-01-11 01:22:17浏览次数:56  
标签:异步 同步 FPGA 复位 信号 寄存器 Xilinx

一、何时何处需要复位

  参考Xilinx官方文档《UltraFast Design Methodology Guide for FPGAs and SoCs (UG949)》:

  Xilinx器件具有专用的全局置位/复位信号 (global set/reset signal,GSR)。在器件配置结束时,此信号会对硬件中所有时序逻辑电路做初始化的赋值。 如果未指定初始状态,将为时序原语分配默认值。在大多数情况下,默认值为 0。FDSE 和 FDPE 原语是例外,其默认为逻辑 1。每个寄存器在配置结束时都将处于已知状态。因此无需编写仅用于在上电时初始化器件的全局复位代码。(作者补:有时也需要软复位,可以可控的复位FPGA器件内部的逻辑电路,这时通过外部定义的引脚,或者当使用zynq系列FPGA时由PS端复位,需要专门设计复位电路)

  Xilinx强烈建议您谨慎判断何时设计需要复位以及何时不需要复位。大多数情况下,控制电路逻辑上可能需要复位以确保正常运行,数据电路逻辑上通常不需要复位。(作者补:因为数据信号的有效与否通常是由控制信号,比如使能信号或有效信号,来决定的)

  复位的使用限制如下:

  • 限制复位信号线的总体扇出。
  • 减少复位布线所需的互连数量。
  • 简化复位路径的时序。
  • 在大多数情况下,这样即可整体改进性能、面积和功耗。

 

二、同步复位与异步复位

  参考Xilinx官方文档《UltraFast Design Methodology Guide for FPGAs and SoCs (UG949)》:

  如需复位,Xilinx建议使用同步复位。同步复位相比于异步复位具有如下优势:

  • 在Xilinx的器件结构中,同步复位可以直接映射至器件架构中的更多资源元件。
  • 异步复位会影响通用逻辑结构的性能。由于所有Xilinx器件的通用寄存器均可将置位/复位编程为异步或同步,可能看似使用异步复位不会受到任何惩罚。使用全局异步复位虽然并不会增加控制集,但由于需要将此复位信号布局到所有寄存器元件,因此会增加布线复杂性。
  • 需要更高密度或者微调布局时,同步复位会为控制集重新映射提供更多的灵活性。如果在布局更优化的 slice 中发现不兼容的复位,那么可将同步复位重新映射到寄存器的数据路径。这样即可根据需要减少布线资源利用率并增加布局密度,从而实现正确的适配并改进性能。
  • 异步复位可能需要多周期断言(multi-cycle assertion),以确保电路正确复位并稳定。同步复位没有这个要求。
  • 复位断言有效期间,异步复位导致 block RAM、LUTRAM、以及 SRLs的存储器内容损坏的可能性更高。
  • 对于含异步复 位(用于驱动 block RAM、LUTRAM 和 SRL 的输入管脚)的寄存器尤其如此。DSP48 和 block RAM 等部分资源仅包含同步复位以供块内的寄存器元件使用。在与这些元件关联的寄存器元件上使用 异步复位时,可能无法在不影响功能的前提下直接将这些寄存器推断到这些块中。
//同步复位,敏感变量表中只有clk
always @ (posedge clk) begin
    if(rst) ......
    else ......
end

//异步复位,敏感变量表中除有clk外,还有复位信号
always @ (posedge clk or posedge rst) begin
    if(rst) ......
    else ......
end

 

三、异步复位的同步处理

  “异步”的复位信号一般不建议作为FPGA逻辑的全局异步复位信号使用。(1)异步复位的“异步”很可能导致各个逻辑的复位“异步”,引起设计问题;(2)异步复位可能占用更多的FPGA布局布线资源,难以满足时序性能要求。

  若设计中一定要做异步复位,那么推荐对异步复位信号先做“同步处理”,再做异步复位信号使用。

//对复位信号做同步处理,产生新的异步复位信号
//input i_rst_n;
reg r_rst_n;

always @ (posedge i_clk)
    r_rst_n <= i_rst_n;

 

标签:异步,同步,FPGA,复位,信号,寄存器,Xilinx
From: https://www.cnblogs.com/Ivan0506/p/17042681.html

相关文章

  • Vue3 异步数据渲染模板,ref 获取不到真实节点
    获取异步数据,并把数据渲染到模板中,比如todolist等。ref只有在模板渲染之后才可以获取,而异步获取数据期间,模板可能没有被渲染。因此,直接在setup执行期间获取ref、甚至......
  • Python中日志异步发送到远程服务器
    背景在Python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日......
  • FPGA:数字电路简介
    数字电路的历史数字电路是数字计算机和自动控制系统的基础,它的发展是以电子器件的发展为基础的,器件的发展可以大致上分为3个阶段:电子管(1906年)晶体管(1947年)集成电路(Integrate......
  • 基于Kintex-7 FPGA的核心板电路设计
    1.引言    FieldProgrammableGateArray(简称,FPGA)于1985年由XILINX创始人之一RossFreeman发明,第一颗FPGA芯片XC2064为XILINX所发明,FPGA一经发明,后续的发展速度之快,......
  • tornado异步非阻塞测试
    测试不同的异步实现方式:协程+第三方库;线程池测试工具最近使用tornado6.1版本进行服务开发,毕竟纸上得来终觉浅,于是针对tornado异步非阻塞的功能进行了详细的验证和测试,并......
  • tornado原理介绍及异步非阻塞实现方式
    tornado原理介绍及异步非阻塞实现方式以下内容根据自己实操和理解进行的整理,欢迎交流~在tornado的开发中,我们一般会见到以下四个组成部分。ioloop:同一个ioloop实例运......
  • [VueJsDev] 基础知识 - asyncTool.js异步执行工具
    [VueJsDev]目录列表https://www.cnblogs.com/pengchenggang/p/17037320.htmlasyncTool.js异步执行工具:::details目录目录asyncTool.js异步执行工具Step.1:getA......
  • 每日一题之Vue的异步更新实现原理是怎样的?
    最近面试总是会被问到这么一个问题:在使用vue的时候,将for循环中声明的变量i从1增加到100,然后将i展示到页面上,页面上的i是从1跳到100,还是会怎样?答案当然是只会显示100,并不会......
  • 基于Kintex-7 FPGA的核心板电路设计
    1. 引言FieldProgrammableGateArray(简称,FPGA)于1985年由XILINX创始人之一RossFreeman发明,第一颗FPGA芯片XC2064为XILINX所发明,FPGA一经发明,后续的发展速度之快,超出大多数......
  • 关于NET异步的理解
    1、包含async、await关键字及Task相关方法,async和await必须成对使用(Task无强制要求)。2、异步是为了解决执行耗时操作所导致的线程阻塞。3、当在你的method中调用NET提供......