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

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

3天内不再提示

基于Xilinx FPGA的复位信号处理

454398 来源:csdn 作者:NingHeChuan 2020-12-25 12:08 次阅读

作者:NingHeChuan

Get Smart About Reset: Think Local, Not Global。
对于复位信号的处理,为了方便我们习惯上采用全局复位,博主在很长一段时间内都是将复位信号作为一个I/O口,通过拨码开关硬件复位。后来也看了一些书籍,采用异步复位同步释放,对自己设计的改进。

不过自从我研读了Xilinx的White Paper后,让我对复位有了更新的认识。

One of the commandments of digital design states,"Thou shalt have a master reset for all flip-flops so that the test engineer will love you, and your simulations will not remain undefined for time eternal."

这句是用来装逼的。使用全局复位有利于我们仿真,所有的寄存器都是有初始值的,也可以在任意时刻让你的寄存器恢复初值,所以验证工程师很喜欢这样的设计,但是Xilinx建议的是尽量避免使用全局复位,这是为什么呢。

全局复位并不是好的处理方式
我们习惯上通常使用的复位有三种,

硬件开关:复位信号接一个拨码开关。

电源芯片:上电时候电源芯片产生,可以长时间维持,直到稳定。

控制芯片:控制芯片产生复位脉冲。

这些复位信号和FPGA内部信号的变化比起来是比较慢的。复位按钮最快也会到达毫秒级别,而FPGA内部信号都是纳秒级别的变化。全局复位的周期远大于系统时钟的周期,是完全可以保证所有的触发器被成功复位的。

但随着系统的频率越来越快,全局复位信号的释放形成一个高扇出的网络

Fan-out即扇出,模块直接调用的下级模块的个数,如果这个数值过大的话,在FPGA直接表现为net delay较大,不利于时序收敛。因此,在写代码时应尽量避免高扇出的情况。

o4YBAF9uHs6AahZPAACQLpLP5B4391.png

如图,全局复位的释放需要传输到不同的触发器。每一个触发器需要被释放复位,但是随着时钟频率的提高,加上复位路径网络的延迟,而且全局复位还是一个高扇出的网络,所以这对系统的时序是一个大挑战。

pIYBAF9uHtCAVVkSAABsVYI7OAc112.png

通常情况下,复位信号的异步释放,没有办法保证所有的触发器都能在同一时间内释放。触发器在A时刻接收到复位信号释放是最稳定的,在下一个时钟沿来临被激活,但是如果在C时刻接收到复位信号释放无法被激活,在B时刻收到复位信号释放,则会引起亚稳态。

o4YBAF9uHtGALPeWAABLbZOjaLA239.png

随着系统时钟频率的提高,并不是所有的触发器都能在同一个时刻从复位状态被释放。

复位真的有那么重要吗?
白皮书上又说了,好的消息是99.9%的情况下,全局复位的异步释放并不会出现问题。所以大多数电路都可以正常工作。但是,如果你有了第一次就不能工作的电路,那你就是遇到那0.01%的情况,很不幸你的复位信号被在错误的时刻重置。(哈哈,皮)
在一些情况下,复位释放的时间并不重要。

pIYBAF9uHtKAUEP3AAAyIyDDKXk798.png

当你的数据采用流水线操作的时候,复位释放的时间并不重要,因为不管你流水线后面的触发器复位释放后是否出错,只需要一些周期后,整个流水线就又会正常工作了。白皮书上还说,这样的复位也是没有意义的。

但是有一些情况下,复位的释放后是很重要的。

pIYBAF9uHtSASvUJAABCFCV0ow8779.png

比如独热码状态机。如果表示独热码状态的第一个触发器比第二个触发器早释放了一个时钟周期,那状态机的状态机会跳转到一个无效的状态。如果所有的表示独热码的寄存器无法在同一个周期内被释放,那状态机肯定会跳转到一个无效的状态。还有一些例子,请读者自己看白皮书。

解决99.99%的情况

pIYBAF9uHtWAdB6oAABXpcuKfDY636.png

其实当Xilinx FPGA配置或重新配置时,所有的单元都会被初始化。白皮书称为master reset,因为这可比你复位一些D触发器要强得多,它甚至初始化了片内RAM

Xilinx的器件也有嵌入处理的系列,软核或硬核。在程序执行第一条指令前,程序和数据区域已经定义好了。有了上电复位,还用专门消耗逻辑资源去复位触发器是没有意义的。

解决0.01%的方法
当然,白皮书也给出了处理复位的建议和方法。

o4YBAF9uHtaAOxOSAABTjgt_6zA048.png

Think Local, Not Global。异步复位,同步释放的方法。用内部定义复位信号的方法来复位触发器,而不是全都直接使用全局复位信号。当进行复位操作时,所有的触发器被预设为1。如上图,移位寄存器的最后一个触发器去操作模块内部定义的复位网络。当复位信号释放时,移位寄存器经过移位,当最后一个触发器由高电平变为低电平时,对本地的复位网络进行复位操作。也就是异步复位,同步释放。

复位的消耗的资源比你想象的要多
复位网络占用大量布线资源。
提高了布局布线时间。
使用器件的逻辑资源。
会使你的设计变得更大。
占用更多的逻辑资源肯定会影响你的性能。
具体请参阅白皮书。

总结
并不是所有部分的设计都需要复位,所以设计者在设计过程中应该准确判断需要被复位的部分,从而采用异步复位、同步释放的方法进行对复位的严格处理。

当我们在设计每一个部分的时候,都要内心问问自己,这个bit需要被复位吗?

那么怎样处理Xilinx FPGA中的复位呢?Xilinx的工程师也给出了解释和方法。

https://www.eetimes.com/document.asp?doc_id=1278998

http://xilinx.eetrend.com/d6-xilinx/article/2013-07/4343.html

简单总结就是,Xilinx的FPGA 应该尽量避免全局复位,有些部分的设计都可以不用复位,必需要复位的设计而采用 同步 高复位。

代码如下。设计中需要复位的部分,使用产生的sys_rst信号进行同步复位,而且是同步 高复位。再次贴出下图。

o4YBAF9uHtiAWahlAABTjgt_6zA083.png

module Sys_Rst(
input clk,
input rst,
output sys_rst

);

reg rst_r0;
reg rst_r1;

always @(posedge clk or posedge rst)begin
if(rst)begin
rst_r0 rst_r1 end
else begin
rst_r0 rst_r1 end
end

assign sys_rst = rst_r1;

endmodule

编辑:hfy


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

    关注

    1603

    文章

    21328

    浏览量

    593271
  • 寄存器
    +关注

    关注

    30

    文章

    5037

    浏览量

    117764
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119388
  • 状态机
    +关注

    关注

    2

    文章

    486

    浏览量

    27184
收藏 人收藏

    评论

    相关推荐

    Xilinx 7系列FPGA功能特性介绍

    Xilinx7系列FPGA由四个FPGA系列组成,可满足一系列系统需求,从低成本、小尺寸、成本敏感的大容量应用到最苛刻的高性能应用的超高端连接带宽、逻辑容量和信号
    发表于 04-22 10:49 110次阅读
    <b class='flag-5'>Xilinx</b> 7系列<b class='flag-5'>FPGA</b>功能特性介绍

    Xilinx fpga芯片系列有哪些

    Xilinx FPGA芯片拥有多个系列和型号,以满足不同应用领域的需求。以下是一些主要的Xilinx FPGA芯片系列及其特点。
    的头像 发表于 03-14 16:24 802次阅读

    对于芯片中的复位信号我们通常会有哪些特殊处理

    经常在面试时问到一个问题:对于芯片中的复位信号我们通常会有哪些特殊处理?这个时候我一般希望得到的回答包括:复位消抖、异步复位同步撤离、降频
    的头像 发表于 12-25 09:52 538次阅读
    对于芯片中的<b class='flag-5'>复位</b><b class='flag-5'>信号</b>我们通常会有哪些特殊<b class='flag-5'>处理</b>?

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

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

    如何将Arm Cortex-M处理器与XilinxFPGA和SoC结合使用

    电子发烧友网站提供《如何将Arm Cortex-M处理器与XilinxFPGA和SoC结合使用.pdf》资料免费下载
    发表于 09-15 15:04 1次下载
    如何将Arm Cortex-M<b class='flag-5'>处理</b>器与<b class='flag-5'>Xilinx</b>的<b class='flag-5'>FPGA</b>和SoC结合使用

    复位信号是什么意思?复位信号的作用?详解Xilinx FPGA复位信号那些事

    复位信号几乎是除了时钟信号外最常用的信号了,几乎所有数字系统在上电的时候都会进行复位,这样才能保持设计者确定该系统的系统模式的状态,以便于更
    的头像 发表于 07-27 09:48 5137次阅读
    <b class='flag-5'>复位</b><b class='flag-5'>信号</b>是什么意思?<b class='flag-5'>复位</b><b class='flag-5'>信号</b>的作用?详解<b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b><b class='flag-5'>信号</b>那些事

    xilinx FPGA复位方法讲解

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

    你真的会Xilinx FPGA复位吗?

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

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

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

    请问DSP和FPGA的时钟信号如何产生?

    我做的一个基于DSP的系统中,DSP做主处理器,控制着整个系统,包括信号处理,整体调度等;选择了一块XilinxFPGA做FIFO UAR
    发表于 06-19 06:43

    XILINX FPGA IP之Clocking Wizard详解

    锁相环基本上是每一个fpga工程必不可少的模块,之前文档xilinx 7 系列FPGA时钟资源对xilinx fpga的底层时钟资源做过说明
    发表于 06-12 17:42 3290次阅读
    <b class='flag-5'>XILINX</b> <b class='flag-5'>FPGA</b> IP之Clocking Wizard详解

    Xilinx FPGA pcb设计

    Xilinx FPGA pcb设计
    发表于 05-29 09:11 0次下载

    FPGA复位电路的实现方式

    有人说FPGA不需要上电复位电路,因为内部自带上电复位信号。也有人说FPGA最好加一个上电复位
    的头像 发表于 05-25 15:50 2459次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>复位</b>电路的实现方式

    MBIST逻辑的复位信号怎么来的?

    jtag端口的复位信号jtag_trst用于复位TAP状态机模块,该复位信号可选。
    的头像 发表于 05-25 15:09 682次阅读
    MBIST逻辑的<b class='flag-5'>复位</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>