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

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

3天内不再提示

浅谈FPGA的复位设计问题

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-19 19:10 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、为什么要设计复位?

首先回想一下,在平常的设计中我们是不是经常采用同步复位或者异步复位的写法,这一写法似乎都已经形成了肌肉记忆----每次我们写always块的时候总是会对所有的寄存器写一个复位赋初值的语句。

这样设计的目的是什么?似乎是为了给寄存器一个初值,避免仿真不定态或初始化操作错误。又似乎是为了在调试时能方便地使用按键进行复位(最常用的全局复位)。这么一看复位似乎是蛮重要的。

2、复位是否有必要?

似乎在平常的设计中,多数会使用异步复位的方式,异步复位由于是异步信号,所以不可避免地引入了亚稳态的可能,这一可能性随着时钟频率的提高而增加。好像在平常的设计与使用中,异步复位电路也不会引发什么问题。这是因为随着器件工艺的提升,现在器件的上升时间在0.0x 纳秒级,而一般设计的时钟周期可能在100~200M。只要复位的释放不是刚好在这0.0x 纳秒内就不会引发亚问题问题,显然这个概率极小(比例--0.0x:10),基本可以说是99.99不会有问题。但是著名的墨菲定律高速我们:再小概率的事情都会发生。所以不管怎样这种事情我们都应该要想办法避免。

再来看我们使用复位的主要目的:为了给寄存器一个初始值,从而避免仿真或使用错误。然而实际上,Xilinx的FPGA的内部资源(触发器和RAM)等都会在上电后默认赋初值,一般是0,或者可以在定义寄存器时手动赋值,如:

reg [1:0] test = 2'b01; //定义时即赋初值

这么看的话仅仅为了赋初值而存在的赋值就没有意义的。数据链路上有初值就够了,因为后来的数据总会冲走之前的数据,数据仍然能稳步传递。但是控制链路就一定需要被复位后一定要恢复到初始状态,不然会“乱跑‘从而导致代码运行异常。其中最经典的例子就是状态机了,显然,如果状态机的状态模块没有复位的话,那么可能在出现异常后永远无法恢复到正常状态了。

最后,复位所使用的资源远超你的想象:

3、应该怎样设计复位?

说了这么多,那到底要怎么设计复位?

同步or异步?

在一文中探讨过同步复位与异步复位的特点。

同步复位:

有利于仿真

由于只在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的复位毛刺,没有亚稳态问题

可以使所设计的系统成为 100%的同步时序电路,有利于时序分析

复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑延时因素

大多数的FPGA的DFF都只有异步复位端口,采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样会耗费逻辑资源

异步复位

大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源

设计相对简单,异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR

复位信号容易受到毛刺的影响且容易存在亚稳态问题

建议使用同步复位的方式,若一定要使用异步复位的话,则建议使用异步复位、同步释放的方法。

高or低?

选择高还是低,需要根据具体的电平标准、器件结构来选择,并不是一概而论低电平有效的好或者高电平有效的好。简单经验:Altera的用低电平复位,Xilinx的用高电平复位。

总结

复位信号能不用就不要用,需要特定初值的可以在定义寄存器时赋值

如果一定需要则使用异步复位、同步释放的方法,并将复位信号局部化,避免高扇出。

审核编辑:汤梓红

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

    关注

    1664

    文章

    22506

    浏览量

    639399
  • Xilinx
    +关注

    关注

    73

    文章

    2208

    浏览量

    131944
  • 复位
    +关注

    关注

    0

    文章

    179

    浏览量

    25091
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    同步复位和异步复位到底该用哪个

    FPGA/数字IC设计的,平时写得最多的可能就是复位逻辑了。但你有没有这种感觉:看别人代码,有的用同步复位,有的用异步复位,有的又搞什么"异步复位
    的头像 发表于 04-22 09:42 391次阅读
    同步<b class='flag-5'>复位</b>和异步<b class='flag-5'>复位</b>到底该用哪个

    浅谈FPGA在无叶风扇控制器中的应用

    本项目探讨了基于FPGA控制器的无叶风扇,它能够带来无叶片的空气流动体验。FPGA的灵活性和性能使得它非常适合用于实时控制和信号处理。
    的头像 发表于 04-22 09:29 398次阅读

    浅谈FPGA的时钟输入要求

    Virtex-7 FPGA的时钟输入主要通过其全局时钟缓冲器(BUFG、BUFH等)和时钟管理模块(MMCM、PLL)来处理。对输入时钟的要求主要围绕电气特性、抖动和引脚分配。
    的头像 发表于 03-25 15:26 927次阅读

    SGM823A:集复位、看门狗和手动复位功能于一体的微处理器监控电路

    SGM823A:集复位、看门狗和手动复位功能于一体的微处理器监控电路 在电子设备的设计中,微处理器的稳定运行至关重要。SG Micro Corp推出的SGM823A微处理器监控电路,集成了复位
    的头像 发表于 03-23 17:20 617次阅读

    SGM823:集成复位、看门狗和手动复位功能的微处理器监控电路

    SGM823:集成复位、看门狗和手动复位功能的微处理器监控电路 在电子设计领域,微处理器的稳定运行至关重要。SGM823作为一款功能强大的微处理器监控电路,为系统的可靠性提供了有力保障。今天,我们
    的头像 发表于 03-23 17:20 634次阅读

    SGM802:低功耗微处理器复位电路的理想之选

    SGM802:低功耗微处理器复位电路的理想之选 在电子设备的设计中,微处理器复位电路起着至关重要的作用,它能确保系统在各种情况下都能稳定、可靠地运行。今天,我们就来详细了解一下SGMICRO公司推出
    的头像 发表于 03-23 16:45 822次阅读

    SGM804:低功耗微处理器复位电路的理想之选

    SGM804:低功耗微处理器复位电路的理想之选 在电子设备中,微处理器复位电路起着至关重要的作用,它能确保系统在各种情况下都能稳定、可靠地运行。今天要给大家介绍的SGM804,就是一款性能出色
    的头像 发表于 03-23 16:45 625次阅读

    探索DS1811:经济高效的电源监控复位芯片

    探索DS1811:经济高效的电源监控复位芯片 在电子设备设计中,电源监控与复位是确保系统稳定运行的关键环节。今天,我们来深入了解一款名为DS1811的EconoReset芯片,它在电源监控和复位功能
    的头像 发表于 02-27 16:20 310次阅读

    MAX6443–MAX6452:具备长手动复位设置周期的微处理器复位电路

    MAX6443–MAX6452:具备长手动复位设置周期的微处理器复位电路 在电子设备的设计中,微处理器复位电路起着至关重要的作用,它能确保设备在各种情况下稳定运行。今天我们就来详细了解一下
    的头像 发表于 02-27 14:45 334次阅读

    使用Aurora 6466b协议实现AMD UltraScale+ FPGA与AMD Versal自适应SoC的对接

    在本博客中,我们将介绍使用 Aurora 6466b 协议实现 AMD UltraScale+ FPGA 与 AMD Versal 自适应 SoC 的对接。我们还将涵盖有关 IP 配置、FPGA 之间的连接、时钟设置以及复位拓扑
    的头像 发表于 01-13 14:04 3823次阅读
    使用Aurora 6466b协议实现AMD UltraScale+ <b class='flag-5'>FPGA</b>与AMD Versal自适应SoC的对接

    CW32在不同复位方式对应的复位范围

    上电复位 / 掉电复位(POR/BOR) 整个 MCU 引脚输入复位(NRST) 整个 MCU(除 RTC 外) IWDT/WWDT 复位 M0+ 内核 / 外设(除 R
    发表于 12-22 09:44

    用于稳定电源设计的复位IC应用实例

    现代电子设备正面临电压波动、浪涌电压以及输入电源不稳定等问题。如果缺乏适当的电压监测与复位保护功能,系统可能会出现误动作、异常复位,甚至导致硬件损坏。
    的头像 发表于 12-08 09:41 749次阅读
    用于稳定电源设计的<b class='flag-5'>复位</b>IC应用实例

    GraniStudio:轴复位例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入轴复位例程,点击导入按钮。 打开轴复位运动例程所在路径,选中轴复位运动.gsp文件,点击打开,完成导入。 2.
    的头像 发表于 08-22 16:05 784次阅读
    GraniStudio:轴<b class='flag-5'>复位</b>例程

    GraniStudio零代码平台轴复位算子支持多少个轴同时复位,有哪些回零模式?

    GraniStudio平台在轴复位的功能上未对同时复位的轴数进行硬性限制,理论上支持任意数量轴同步复位,需要考虑的是在做多轴同步复位时要评估机械安全风险,建议提前确认机械在多轴同时
    的头像 发表于 07-07 18:02 788次阅读
    GraniStudio零代码平台轴<b class='flag-5'>复位</b>算子支持多少个轴同时<b class='flag-5'>复位</b>,有哪些回零模式?

    复位电路的核心功能和主要类型

    复位电路(Reset Circuit) 是数字系统中的关键功能模块,用于确保设备在上电、电压波动或异常状态下可靠复位至初始状态。其设计直接影响系统的稳定性和抗干扰能力。
    的头像 发表于 06-30 14:24 1887次阅读
    <b class='flag-5'>复位</b>电路的核心功能和主要类型