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
    +关注

    关注

    1603

    文章

    21328

    浏览量

    593274
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119388
  • 复位
    +关注

    关注

    0

    文章

    159

    浏览量

    24047
收藏 人收藏

    评论

    相关推荐

    Xilinx FPGA芯片内部时钟和复位信号使用方法

    如果FPGA没有外部时钟源输入,可以通过调用STARTUP原语,来使用FPGA芯片内部的时钟和复位信号,Spartan-6系列内部时钟源是50MHz,Artix-7、Kintex-7等7系列F
    的头像 发表于 10-27 11:26 1092次阅读
    Xilinx <b class='flag-5'>FPGA</b>芯片内部时钟和<b class='flag-5'>复位</b>信号使用方法

    fpga和单片机复位原理有哪些区别呢?

    fpga和单片机复位原理有哪些区别?
    发表于 10-16 08:22

    请问fpga和单片机复位原理有哪些区别?

    fpga和单片机复位原理有哪些区别?
    发表于 10-15 11:49

    FPGA学习-异步复位,同步释放

    点击上方 蓝字 关注我们 系统的复位对于系统稳定工作至关重要,最佳的复位方式为:异步复位,同步释放。以下是转载博客,原文标题及链接如下: 复位最佳方式:异步
    的头像 发表于 09-09 14:15 306次阅读
    <b class='flag-5'>FPGA</b>学习-异步<b class='flag-5'>复位</b>,同步释放

    xilinx FPGA复位方法讲解

    能不复位尽量不用复位,如何判断呢?如果某个模块只需要上电的时候复位一次,工作中不需要再有复位操作,那么这个模块可以不用复位,用上电初始化所有
    发表于 06-28 14:44 568次阅读
    xilinx <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>方法讲解

    你真的会Xilinx FPGA复位吗?

    对于复位信号的处理,为了方便我们习惯上采用全局复位,博主在很长一段时间内都是将复位信号作为一个I/O口,通过拨码开关硬件复位
    发表于 06-21 10:39 683次阅读
    你真的会Xilinx <b class='flag-5'>FPGA</b>的<b class='flag-5'>复位</b>吗?

    Xilinx FPGA异步复位同步释放—同步后的复位该当作同步复位还是异步复位

    针对异步复位、同步释放,一直没搞明白在使用同步化以后的复位信号时,到底是使用同步复位还是异步复位
    发表于 06-21 09:59 821次阅读
    Xilinx <b class='flag-5'>FPGA</b>异步<b class='flag-5'>复位</b>同步释放—同步后的<b class='flag-5'>复位</b>该当作同步<b class='flag-5'>复位</b>还是异步<b class='flag-5'>复位</b>?

    不得不读的Xilinx FPGA复位策略

    尽量少使用复位,特别是少用全局复位,能不用复位就不用,一定要用复位的使用局部复位
    发表于 06-21 09:55 1448次阅读
    不得不读的Xilinx <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>策略

    FPGA复位电路的实现方式

    有人说FPGA不需要上电复位电路,因为内部自带上电复位信号。也有人说FPGA最好加一个上电复位电路,保证程序能够正常地执行。不管是什么样的结
    的头像 发表于 05-25 15:50 2460次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>电路的实现方式

    FPGA设计添加复位功能的注意事项

    本文将探讨在  FPGA  设计中添加复位输入的一些后果。 本文将回顾使用复位输入对给定功能进行编码的一些基本注意事项。设计人员可能会忽略使用复位输入的后果,但不正确的
    的头像 发表于 05-25 00:30 547次阅读

    FPGA中的异步复位or同步复位or异步复位同步释放

    FPGA设计中,复位电路是非常重要的一部分,它能够确保系统从初始状态开始启动并保证正确运行。
    发表于 05-22 14:21 692次阅读
    <b class='flag-5'>FPGA</b>中的异步<b class='flag-5'>复位</b>or同步<b class='flag-5'>复位</b>or异步<b class='flag-5'>复位</b>同步释放

    在高速设计中跨多个FPGA分配复位信号

    SoC设计中通常会有“全局”同步复位,这将影响到整个设计中的大多数的时序设计模块,并在同一时钟沿同步释放复位
    发表于 05-18 09:55 148次阅读
    在高速设计中跨多个<b class='flag-5'>FPGA</b>分配<b class='flag-5'>复位</b>信号

    常见的FPGA复位设计

    FPGA设计中,当复位整个系统或功能模块时,需要将先关寄存器被清零或者赋初值,以保证整个系统或功能运行正常。在大部分的设计中,我们经常用“同步复位”或“异步复位”直接将所有的寄存器全
    发表于 05-14 14:49 1786次阅读
    常见的<b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>设计

    FPGA中三种常用复位电路

    FPGA设计中,复位电路是非常重要的一部分,它能够确保系统从初始状态开始启动并保证正确运行。本文将分别介绍FPGA中三种常用复位电路:同步复位
    发表于 05-14 14:44 1837次阅读
    <b class='flag-5'>FPGA</b>中三种常用<b class='flag-5'>复位</b>电路

    FPGA设计中的复位

    本系列整理数字系统设计的相关知识体系架构,为了方便后续自己查阅与求职准备。在FPGA和ASIC设计中,对于复位这个问题可以算是老生常谈了,但是也是最容易忽略的点。本文结合FPGA的相关示例,再谈一谈
    的头像 发表于 05-12 16:37 3655次阅读
    <b class='flag-5'>FPGA</b>设计中的<b class='flag-5'>复位</b>