Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位

这篇具有很好参考价值的文章主要介绍了Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 概要 

Xilinx复位准则

全局复位主要由以下三种方式实现

高时钟频率下的复位时序全局复位对时序的要求真的很关键吗?

独热码状态机的复位       

FPGA配置


 概要 

Xilinx白皮书WP272《Get Smart About Reset: Think Local, Not Global》详细讲述了FPGA的全局复位。在数字系统设计中,我们传统上都认为,应该对所有的触发器设置一个复位信号,这样将大大方便后续的测试工作。所以,当看到文档中提到,“不建议在FPGA设计中使用全局复位,或者说应该努力避免这种设计方式”时,许多设计人员(都会觉得非常难以理解,这种设计思想跟我们通常的认识是冲突的。

Xilinx复位准则

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

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

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

全局复位主要由以下三种方式实现

用一个复位按钮产生一个复位信号接到FPGA的全局复位管脚上,它的速度非常慢(ms级),而且复位时间不确定。

上电时由电源芯片产生,如TI的TPS76x系列的电源芯片一般都可以产生复位信号,供主芯片上电复位使用。控制芯片产生复位脉冲,它方便设计人员用程序控制的。

        在这些情况下,复位信号的变化与FGPA芯片内部信号相比起来是及其缓慢的,例如,复位按钮产生的复位信号的周期至少是在毫秒级别的,而我们FPGA内部信号往往是纳米或者微秒级别的。复位信号的频率是如此之低,以至于我们认为它不属于关键时序(not timing-critical)。即使是对此类信号进行时序约束,约束的周期也是非常长的。全局复位脉冲的周期远大于时钟周期,所以传统意义上认为FPGA芯片中所有的触发器都能够得到有效的复位。

        然而,随着FPGA性能和工作频率的快速提高,这种假设开始不再成立。此时,全局复位信号的产生开始成为时序关键的问题。

         在Xilinx 的FPGA器件中,全局的复位/置位信号(Global Set/Reset (GSR))(可以通过全局复位管脚引入)是非常可靠的,因为它是芯片内部的信号。如果所有的触发器都使用这一全局复位信号,则GSR信号将形成一个高扇出的网络。虽然在启动顺序中,它可以与一个用户自定义的时钟进行同步,但是想让它与设计中的所有时钟信号进行同步是不可能的;比如,一个Xilinx FPGA中可能含有多个DLL/DCM/PLL时钟处理模块,每个模块又可以产生多个时钟信号,在各个模块内部进行时钟信号的同步是可行的,然而想让所有时钟信号同步是完全不可行的——从DCM的分布上就可以看出来:中间相隔的长距离布线对高频时钟信号的延时显著增大,进行同步自然无法做到。于是,在时钟信号频率越来越高的情况下,全局复位信号便开始成为时序关键。解释如下:

Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位,FPGA设计-基础篇,fpga开发

两个时钟信号边沿之间的复位信号时序图
       上图给出了被两个时钟信号的边沿截断的复位信号的时序图,第一行是时钟信号,第二行是器件复位管脚上的信号,第三行是到达触发器复位端的复位信号。为了使触发器进行有效的复位,在有效的时钟边沿到来之前,复位信号应该被保持至少一个建立时间(时钟信号的建立时间)。可以看出,时钟信号的频率越高,用来分配复位信号的可用时间就越少。而且考虑到全局复位信号往往是高扇出的网络,想在这个庞大的网络中满足苛刻的时序要求是非常困难的。在经常使用的异步复位的设计中,更没有办法来保证所有的触发器都可以在同一个时钟边沿被释放,即使存在用来分配复位信号的可用时间。这一点从图2中可以看出。

Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位,FPGA设计-基础篇,fpga开发

异步设计中的复位信号时序图
        图2给出了异步设计中复位信号的时序图。可以看出,在A时刻产生的复位信号,将在第一个时钟信号的有效边沿产生,而在C时刻产生的复位信号将在第二个有效的时钟信号边沿产生。在B时刻,触发器很难有效定义哪一个复位信号是有效的,这将导致亚稳态的产生。

        随着时钟信号频率的增高和器件规模增大带来的潜在的时钟偏移,在同一个时钟边沿对所有的触发器进行是否已经几乎是不可能的了。图3显示了高时钟频率下的复位时序图。

Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位,FPGA设计-基础篇,fpga开发

高时钟频率下的复位时序 全局复位对时序的要求真的很关键吗?

  好消息是,在绝大多数设计中(白皮书说是超过99.99%),复位信号的时序是无关紧要的——通常情况下,大部分电路都能够正常工作。然而,只要你曾经遇到过复位信号不正常导致电路无法正确工作的情况,那么可以说你“幸运”地遇到了那0.01%的复位信号异常的情况。图4给出了一个流水线复位的情况。

Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位,FPGA设计-基础篇,fpga开发

流水线的复位
        在流水线中,假如数据都是完全顺序处理的(即不存在反馈、环路等情况),则主复位信号是何时产生的是完全无关紧要的。经过几个周期的流水线操作,任何不正常的数据状态都将被从系统中“冲出”流水线,这是很容易理解的。事实上,在正常的流水线操作中,我们也很少会用到复位操作的,因为这是完全没有必要的。即使是在仿真环境中,我们也往往会在测试程序中对初始状态进行配置,从而将所有的未知状态从系统中清除出去,使得系统中的所有输入都变为有效的数据。

        然而,在图5所示的独热码状态机的情况下,复位信号的时序却的的确确成为了系统正常工作的关键因素之一。

Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位,FPGA设计-基础篇,fpga开发

独热码状态机的复位        

上图的例子演示了一个简单的独热码状态机的复位示意图。图中清晰地显示了复位失败的潜在可能性。如果第一个含有独热码的触发器比第二个触发器提前释放一个时钟周期,则其含有的独热码将丢失,整个状态机将永远进入无效状态(cold)。减小这种情况发生的概率往往可以通过使用相邻的触发器构成状态机来解决(使用本地复位网络,则信号的失真度较低),但前提是时序约束中的建立时间必须满足。此外,如果所有的触发器无法在同一个时钟信号的有效边沿被释放,,则一个已经编码的状态机可能会调变进入未知状态,包括非法状态,造成电路无法正确工作。所以,在包含反馈通路的电路设计者,需要对复位信号的时序要求进行仔细考虑。

       事实上,不存在反馈通路的电路是完全不需要使用复位信号的。例如,在数字信号处理应用中,有限脉冲响应滤波器(FIR)就不存在反馈通路:只有在有效数据填满所有节拍时,滤波器才会输出采样值,否则不输出任何数据;所以对节拍寄存器进行复位是毫无意义的。然而,在有限脉冲响应滤波器(IIR)中,存在反馈通路,如果在一个不可靠的复位信号下对节拍寄存器进行复位并产生一个伪信号输出,则滤波器输出会受到显著的影响。最坏的情况下,伪信号带来的不稳定将导致整个滤波器陷入崩溃状态。

如何自动覆盖99.99%的情况

Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位,FPGA设计-基础篇,fpga开发

FPGA配置


        当一个Xilinx的FPGA芯片被重新配置时,每一个单元都将被初始化,如图6所示。在某种意义上讲,这是一个上电之后的“终极的”全局复位操作,因为它不仅仅是对所有的触发器进行了复位操作,还初始化了所有的RAM单元。随着Xilinx FPGA芯片内部的嵌入式RAM资源越来越多,这种“终极的”全局复位操作越来越有意义。对所有的RAM单元进行预定义,在软件仿真和实际操作中都是非常有帮助的,因为这样避免了在上电时采用复杂的启动顺序来清除存储单元内容的操作。

         随着Xilinx的FPGA芯片越来越多的嵌入处理器内核,比如MicroBlaze软核、ARM和PowerPC硬核等,这种特性使得所有的程序和数据空间在处理器内核执行第一条指令之前都已经被预定义,则原来那种靠烧写昂贵的可编程资源来仅仅复位触发器的操作变得毫无意义了。开发过程中所使用的仿真工具也应当具有模拟此操作的能力(即我们通常所说的“上电复位”),这样在后续的设计中就可以避免使用可有可无的复位操作了。

其余0.01% 情况的设计准则

       最重要的事情是使用某些准则来处理设计中的复位操作,并且这些准则在设计审查阶段就应该被完全考虑到。可以使用一个局部的高性能的复位网络来控制仅仅需要局部复位的触发器。图7给出了一个这种局部复位的示意图。这种电路的优点在于,它所提供的复位效果与外接全局复位信号的效果是一致的。

Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位,FPGA设计-基础篇,fpga开发

局部复位示意图
        在器件配置或者异步复位时,链中的所有触发器都被预设为1。几乎在这同时,链中的最后一个触发器驱动局部复位网络并向其发送一个有效复位信号。随着全局复位/置位信号或异步复位信号的释放,整个移位寄存器链开始在每个时钟周期被填充为0。

        链中触发器的数目决定了局部复位网络所需要的复位脉冲的最小宽度。最后的结果是,链中最后一个触发器从高跳变到低,而局部复位信号的释放与时钟周期同步。被复位的触发器可以采用同步置位(synchronous set (FDS))或者同步复位(synchronous reset (FDR)),即构成了完整的同步设计,而接下来的时序规范和分析也将容易得多。

复位操作消耗的资源远比你想象的要多

        在FPGA设计中,我们往往习惯在HDL文件的端口声明中加入一个reset信号,却忽略了它所带来的资源消耗。仔细分析一下,竟会有如此之多的影响:

Ø  复位网络需要占用布线资源

♦ 导致其余信号的布线信号受到影响,降低了它们布线的自由度。

♦ 增加的布线网络往往需要使用更高速率的芯片。

♦ 复位网络占用大量布线资源,使得Place&Route的时间大大增加。

Ø  复位信号需要占用大量的逻辑资源

♦ 复位信号需要使用触发器的专用复位管脚。

♦ 可操作的复位信号往往导致D触发器的输入前增加额外的门操作或专用的复位信号输入。

♦ 增大整个设计的尺寸。

♦ 额外的逻辑消耗降低了系统的性能。

Ø  阻止了使用高效特征,如Xilinx FPGA特有的SRL16E 移位寄存器

♦ SRL16E可以在一个LUT中实现多达16个触发器。

♦ SRL16E 实现的虚拟触发器不支持复位操作,这使得HDL设计中带有复位操作时,综合工具无法有效利用SRL16E 资源。有可能增加多达16倍的资源消耗。

         在Xilinx网站的白皮书 WP275《Get your Priorities Right - Make your Design Up to 50% Smaller》中提到了复位信号是如何影响FPGA资源利用率的,有兴趣的朋友可以去读一下。

        总结一下,Xilinx FPGA设计中一般不需要插入全局复位网络,这样我们在写程序的时候就不必每个模块都加入reset端口了,既方便了程序书写,又减小了编译时间,还减少了资源占用。绝大多数情况下,重配置或者上电过程中,所有的触发器和RAM等都可以被预设初始状态,所以全局复位是完全没有必要的,因为所有的信号都已经具有明确的初值!Xilinx FPGA都已经经过充分验证,所以扫描逻辑和运行测试向量都不再是必须的操作,全局复位作为这些操作的一部分自然也不再需要。 作者:硬件光阴 https://www.bilibili.com/read/cv26834762/?spm_id_from=333.999.0.0 出处:bilibili文章来源地址https://www.toymoban.com/news/detail-838703.html

到了这里,关于Xilinx 7系列 FPGA硬件知识系列(八)——Xilinx FPGA的复位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 硬件工程师需要掌握的PCB设计常用知识点

    硬件工程师需要掌握的PCB设计常用知识点

          一个优秀的硬件工程师设计的产品一定是既满足设计需求又满足生产工艺的,某个方面有瑕疵都不能算是一次完美的产品设计。规范产品的电路设计,工艺设计,PCB设计的相关工艺参数,使得生产出来的实物产品满足可生产性、可测试性、可维修性等的技术规范要求,

    2023年04月20日
    浏览(9)
  • 板卡设计+硬件每日学习十个知识点(44)23.8.24 (检测单元设计,接口部分设计,板卡电源输入设计,电源检测电路)

    板卡设计+硬件每日学习十个知识点(44)23.8.24 (检测单元设计,接口部分设计,板卡电源输入设计,电源检测电路)

    答: 首先要为检测单元的单片机设计一个最小系统板,包括时钟、供电、调试JTAG、复位。 然后设计检测单元GD32的功能电路,包括温度监测、电压监测、电流监测、FPGA启动检测、PS侧的复位控制、LED状态灯。 最后是和PL侧使用I2C通信的通信电路。 这些让我设计的话,可能得

    2024年02月11日
    浏览(15)
  • 硬件知识-ADC模数转换芯片

    硬件知识-ADC模数转换芯片

    精度”是用来描述物理量的准确程度的,而“分辨率”是用来描述刻度划分的。 分辨率与AD芯片的位数有关,而精度需要查看手册看参数。 对于ADC*:确定输入大小: Vin=Outputcode LSB ; 如果ADC的输出代码为二进制或二进制补码格式也没有关系,只要将二进制数正确转换为其等效

    2024年02月09日
    浏览(9)
  • 硬件基础知识点

    硬件基础知识点

    D:十进制 B:二进制 H:十六进制 二进制→十六进制 整数部分从右往左,小数部分从左往右。 四个二进制数看作一个十六进制数,不足的补零。 十六进制→二进制同理。 十进制→二进制 方法一:短除法 除二倒取整,乘二正取余 方法二:拆分法(二进制减法) 十进制数转

    2024年02月06日
    浏览(13)
  • camera 硬件基本知识

    camera 硬件基本知识

    参考博客:1.【Camera专题】Qcom-你应该掌握的Camera调试技巧2_c枫_撸码的日子的博客-CSDN博客_outputpixelclock 2.浩瀚之水_csdn的博客_CSDN博客-深度学习,嵌入式Linux相关知识汇总,Caffe框架领域博主 3.一个早起的程序员的博客_CSDN博客-FPGA,PCIe应用实战,PCI-E理论剖析领域博主 一、硬件相关

    2024年02月15日
    浏览(10)
  • 2。硬件基础知识

    2。硬件基础知识

    介绍嵌入式软件开发所需要了解的硬件基础知识,与软件相结合学习 阻值:直标法,或色标法(碳膜电阻上的横线) 类型:线性,非线性(压敏电阻、热敏电阻) 基本参数:标称阻值、额定功率、允许误差 电阻在原理图中的表示方法 1 电阻的功能 分压 限流 测温 防浪涌 (

    2024年02月02日
    浏览(17)
  • Linux学习(嵌入式硬件知识)

           GPU(Graphics Processing Unit,图形处理单元)和 CPU(Central Processing Unit,中央处理单元)是计算机中两种不同的处理器。它们在功能、设计和用途上有所不同。 CPU(中央处理单元): CPU 是计算机中的主要处理器,负责执行计算机程序中的指令。 CPU 主要用于执行通用计算

    2024年04月27日
    浏览(9)
  • 服务器硬件基础知识

    服务器是一种专门用于提供各种网络服务的计算机设备,它可以处理来自客户端的请求,并向其提供所需的数据或服务。 1)X86架构服务器 X86架构是目前最常见的服务器处理器架构之一,主要由Intel和AMD生产。它们通常用于普通的通用服务器,适用于大多数应用场景。 2)RI

    2024年03月20日
    浏览(20)
  • 【硬件学习】贴片电阻相关知识

    【硬件学习】贴片电阻相关知识

      参考课程链接:【硬件工程师炼成之路】器件篇   相信有一定硬件学习经验的朋友一定会注意到,实际应用中电阻的阻值(电容的大小)是一个离散的序列。生产厂家为了 在误差允许的范围内最大节约成本 ,采用了 优选系数 的选择方法。 这种选择方法在稳压二极管

    2024年02月05日
    浏览(8)
  • 嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>

    嵌入式硬件基础知识汇总<附带与硬件密切相关的软件介绍>

    工作知识学习及总结系列文档 本文主要记录学习嵌入式软硬件编程过程中的一些硬件基础知识 嵌入式微控制器MCU ,又称单片机,一般以某微处理器内核为核心,芯片集成多种部件,功能和外设,如8051系列。其最大的特点是单片化,体积大大减小,功耗和成本下降,可靠性提

    2024年02月02日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包