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

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

3天内不再提示

FPGA复位的8种技巧

ZYNQ 来源:ZYNQ 2024-11-16 10:18 次阅读

FPGA 设计中,复位起到的是同步信号的作用,能够将所有的存储元件设置成已知状态。在数字电路设计中,设计人员一般把全局复位作为一个外部引脚来实现,在加电的时候初始化设计。全局复位引脚与任何其它输入引脚类似,对 FPGA 来说往往是异步的。设计人员可以使用这个信号在 FPGA 内部对自己的设计进行异步或者同步复位。

不过在一些提示和技巧的帮助下,设计人员可以找到更加合适的复位结构。理想的复位结构可以改善 FPGA 中器件的利用率、时序和功耗水平。

了解触发器复位行为

在深入探讨复位技术之前,有必要了解 FPGA Slice 内触发器行为。基于赛灵思 7 系列架构的 FPGA 器件的每个Slice中含有 8 个寄存器,所有这些寄存器都是 D 类触发器。这些触发器共享一个通用的控制集。

触发器控制集的组成包括时钟输入(CLK)、高电平有效芯片使能端 (CE) 和高电平有效 SR 端口。触发器中的 SR 端口既可用作同步置位/复位端口,也可用作异步预设/清除端口(见图1)。

3c702824-9080-11ef-a511-92fbcf53809c.jpg

推断触发器的 RTL 代码也能推断触发器准备使用的复位类型。当复位信号出现在 RTL 过程的敏感列表中时,该代码就会推断异步复位(如图 2a所示)。随后综合工具将推断出一个触发器,该触发器的 SR 端口被配置为预设或清除端口(用 FDCE 或者 FDPE 触发器原语来表示)。在 SR 端口被断言后,触发器的输出会被立即强制赋予给触发器的 SRVAL 属性。

3c80535c-9080-11ef-a511-92fbcf53809c.jpg

在同步复位的情况下,综合工具推断出的触发器,其 SR 端口被配置为置位或复位端口(用FDSE 或 FDRE 触发器原语来表示)。SR 端口被断言后,触发器的输出将在时钟周期的下一个上升沿被强制赋予给触发器的 SRVAL 属性。

此外,还可以把触发器的输出初始化为 INIT 属性规定的值。在配置过程中,当全局置位/复位 (GSR) 信号被断言时,INIT 值就会被加载到触发器。

赛灵思 FPGA 中的触发器能够同时支持异步的和同步的复位与置位控制。但是,底层触发器每次只能实现一个设置/重设/预设/清除。如果为 RTL 代码中的多个设置/重设/预设/清除状况进行编码,那么其中一种状况的实现将使用触发器的 SR端口,其余的状况则使用架构逻辑,因而会占用更多的 FPGA 资源。

如果其中一个状况是同步的,另一个状况是异步的,异步状况的实现将使用 SR 端口,同步状况的实现则使用架构逻辑。一般来说,应尽量避免出现一个以上的设置/重设/预设/清除状况的出现。另外,对于 Slice 中的每个触发器组(4 个触发器为一组),只有一个属性可以确定触发器的 SR 端口是同步的还是异步的。

复位方法 不管使用哪种复位类型( 同步或是异步),一般都需要让复位与时钟同步。只要全局复位脉冲的持续时间足够长,器件上所有的触发器都会进入复位状态。但是,取消复位信号的断言必须满足触发器的时序要求,才能保证触发器顺利地从复位状态转换到正常状态。如果不能满足时序要求,触发器就会进入亚稳定状态。

另外, 为了某些子系统的正常运行,比如状态机和计数器,所有的触发器必须在同一个时钟边沿退出复位。如果状态机的不同部分在不同的时钟周期退出复位状态,状态机可能会进入非法状态。这就要求取消复位断言必须与时钟同步。

对在给定时钟域中使用同步复位方法的设计来说,使用标准的亚稳态解决电路(两个背对背触发器)就足以把全局复位引脚同步到特定的时钟域。这个同步复位信号可以利用触发器上的同步SR 端口初始化该时钟域内的所有存储元件。由于待复位的同步器和触发器都处于同一时钟域,因此该时钟域的标准PERIOD 约束的包括同步器与触发器之间的路径时序。器件中的每个时钟域都需要使用单独的同步器为该时钟域生成一个同步的全局复位。

现在进入实质部分。下面是一些具体的提示和技巧,有助于您找到最佳的设计复位策略。

技巧 1:当驱动触发器的同步 SR端口时,每个时钟域都需要全局复位的局部版本, 并与该时钟域同步。

有时候不能保证设计的某个部分具备有效的时钟。这种情况通常发生在这样的系统中,即系统使用的时钟为恢复时钟,或者系统使用的时钟源于热拔插模块。在这种情况下,可能需要使用触发器上的异步 SR 端口,通过异步复位的方法对设计中的存储元件进行初始化。即便存储元件使用的是异步 SR 端口,取消复位沿断言仍然必须与时钟同步。这项要求主要体现为触发器的复位恢复时序弧,这类似于要求将异步 SR的取消断言沿设置为与时钟的上升沿同步。如果不能满足这个时序弧的要求,就会导致触发器进入亚稳态,同步子系统也会进入异常状态。

图 3 所示的复位桥接电路提供了一种机制,可以对复位进行异步断言(故在无有效时钟的情况下也可以进行)以及对复位进行同步取消断言。在这个电路中,假定两个触发器的 SR端口具有异步置位功能 (SRVAL=1)。

3c9a9fe6-9080-11ef-a511-92fbcf53809c.jpg

可以使用该复位桥的输出来驱动给定时钟域的异步复位。这种经过同步的复位能够使用触发器的异步 SR 端口对该时钟域中的所有存储元件进行初始化。器件中的每个时钟域仍需要一个单独的、经过同步的、由单独复位桥生成的全局复位。

技巧 2:复位桥接电路实现了一种安全的机制,可以同步地对异步复位取消断言。使用复位桥接电路,每个时钟域都需要全局复位的局部版本。

在图 3 所示的电路中,假定为复位桥和相关逻辑提供时钟信号的时钟 (clk_a) 是稳定且无误的。在 FPGA 中,时钟信号可以直接来自片外的时钟源(理想的情况下是通过有时钟功能的引脚获得),或者可以用 MMCM 或者锁相环(PLL) 在内部生成。任何用于生成时钟的MMCM 或者 PLL 在复位之后都需要进行校准。因此,可能需要在全局复位路径中插入额外的逻辑来稳定时钟。

技巧3:在对 FPGA 的全局复位取消断言之前,确保由 MMCM 或PLL 生成的时钟是稳定且被锁定的

图 4 是 FPGA 中典型的复位实现方法。

3cb5d3a6-9080-11ef-a511-92fbcf53809c.jpg

赛灵思寄存器的 SR 控制端口属于高电平有效。如果 RTL 代码描述的是低电平有效的设置/重设/预设/清除功能,那么综合工具在驱动寄存器的控制端口之前,必须首先推断出一个反相器。由于必须使用查找表来完成反相操作,所以需要一个 LUT 输入。这个因使用低电平有效的控制信号而增加的逻辑可能导致运行时间延长,器件利用率下降。而且它还会给时序和功耗造成不利影响。

那么底线是什么呢?在 HDL 代码或者实例化组件中尽量使用高电平有效的控制信号。在无法控制设计中控制信号的极性的时候,应在代码的最顶层对信号进行反相操作。用这种方法进行描述,推断出的反相器可以并入 I/O 逻辑中,无需占用额外的 FPGA 逻辑或者布线。

技巧 4:高电平有效复位能够实现更高的器件利用率,并可改善性能 值得注意的是,FPGA 不是一定需要全局复位。全局复位和设计中的其它线路一样,要争用相同的布线资源。全局复位一般具有高扇出,因为它需要扩展到设计中的每一个触发器。这样会消耗大量的布线资源,对器件的利用率和时序性能造成不利影响。由此,有必要探索出不是建立在完整的全局复位基础之上的其它复位机制。

在配置或重配置赛灵思 FPGA时,每一个单元(包括触发器和 block RAM)都需要进行初始化,如图 5 所示。因此,FPGA 配置具有与全局复位一样的效果,因为它能将 FPGA中的每一个存储元件的初始状态都设置为已知状态。

3ccc8862-9080-11ef-a511-92fbcf53809c.jpg

可以从 RTL 代码中推断触发器初始化值。图 6 的示例说明了如何对 RTL中寄存器的初始化进行编码。FPGA 工具能够综合这些信号的初始化,尽管通常会误以为做不到。底层 VHDL 信号或者 Verilog 寄存器的初始化值会成为推断出的触发器的 INIT 值,这个值会在配置的过程中被加载到触发器中。

3ce38814-9080-11ef-a511-92fbcf53809c.jpg

使用寄存器还可以在配置过程中初始化 block RAM。随着基于处理器的系统中嵌入式 RAM 数量的增多,BRAM初始化已经成为一项有用的功能。这是因为预先定义的 RAM 能够简化仿真设置,并且无需使用引导顺序为嵌入式设计清空内存。

全局置位/复位 (GSR) 信号是一种特殊的预布线复位信号,能够在 FPGA配置的过程中让设计保持初始状态。在配置完成后,GSR 会被释放,所有的触发器及其它资源都加载的是 INIT 值。除了在配置进程中运行 GSR,用户设计还可以通过实例化 STARTUPE2 模块并连接到 GSR 端口的方法来访问 GSR 网。使用该端口,设计可以重新断言 GSR网,相应地 FPGA 中的所有存储元件将返回到它们的 INIT 属性所规定的状态。

取消断言 GSR 是异步的,需要使用多个时钟才能影响到设计中的所有触发器。对于状态机、计数器或者其它能够自动改变状态的逻辑,需要一个显示的复位,用于同步取消用户时钟断言。因次,使用 GSR 作为唯一的复位机制可能导致系统不可靠。

因此,最好是综合采用多种方法来有效地管理启动。

技巧 5:依靠 GSR 提供的内置初始化功能,同时对设计中能够自动启动的部分进行显式复位,这种综合法能够带来更高的利用率和性能。

在使用 GSR 设置整个设计的初始状态之后,对需要同步复位的逻辑单元(比如状态机)使用显式复位。可使用标准的亚稳态解决电路或者复位桥来生成同步的显式复位。

使用恰当的复位实现利用率的最大化 RTL 代码中使用的复位类型对工具将设计映射到 FPGA 底层资源的能力有重大影响。在编写 RTL 代码的时候,设计人员应根据情况定制子设计的复位方式,以便工具能够把设计映射到这些资源。

应注意的是,SRL、LUTRAM 和BRAM 中内容的初始化,只能用 GSR方法来完成,不能使用显式复位。因此,在为以上这些资源编写代码时,应注意避免在编码中使用复位。例如,如果一段 RTL 代码描述的是一个 32 位移位寄存器,而且对移位寄存器的 32 个阶进行显式复位,那么综合工具将无法将这段 RTL 代码直接映射到 SRL32E上, 因为它无法满足该资源的编码复位要求。作为替代,该代码将围绕SRL32E 推断出 32 个触发器,或推断出一些其它电路,用以实现要求的复位功能。相对于不使用复位的 RTL 代码,这两种解决方案都会占用更多资源。

技巧 6:在映射到 SRL、LUTRAM或者 BRAM 时,不要为 SRL 或者RAM 阵列的复位进行编码 在 7 系列器件中,不能把具有不同控制信号的触发器打包到同一个 Slice中。对于低扇出复位,这样会给 Slice的总体利用率造成不利影响。在同步复位的情况下,综合工具可以使用 LUT(如图 7 所示)来实现复位功能,而不是使用触发器的控制端口,故而可将复位当作控制端口移除。这样就可以把得到的 LUT/触发器对与其它不使用其 SR端口的触发器打包。这样做的结果是LUT 使用率虽然会上升,但 Slice 的使用率可以得到改善。

3cf7991c-9080-11ef-a511-92fbcf53809c.jpg

技巧 7:同步复位能够增强 FPGA利用率。在设计中应使用同步复位,而不是异步复位

一些较大的专用资源(即 BRAM和 DSP48E1 单元)内含的寄存器可以被推断为专用资源功能的组成部分。BRAM 包含可选的输出寄存器,可利用该寄存器以及附加的时延时钟来改善时钟频率。DSP48E1 有许多寄存器,既可以作为流水线来增加最大时钟速度,也可作为周期时延 (Z-1)。但是这些寄存器只具备同步置位/复位功能。

技巧 8:使用同步复位可以允许综合工具使用 DSP48E1 Slice 或BRAM等专用资源内部的寄存器。这样能够改善设计中相应部分的器件总体使用率和性能,同时降低总体功耗。

如果 RTL 代码描述的是异步置位/复位,那么综合工具就无法使用这些内部寄存器。作为替代,它将使用 Slice触发器,因为它们能够实现要求的异步置位/复位功能。这样不仅会导致器件利用率降低,还会给性能和功耗造成不利影响。

多种选择 有多种复位方法可供 FPGA 选择,每种都有自身的优势和不足。这里提出的建议有助于设计人员为自己的设计选择最适合的复位结构。理想的复位结构能够改善 FPGA 的器件使用率、时序和功耗。

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

    关注

    1625

    文章

    21648

    浏览量

    601443
  • 复位
    +关注

    关注

    0

    文章

    170

    浏览量

    24189

原文标题:FPGA复位的8种技巧

文章出处:【微信号:ZYNQ,微信公众号:ZYNQ】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA复位的可靠性设计方法

     对FPGA设计中常用的复位设计方法进行了分类、分析和比较。针对FPGA复位过程中存在不可靠复位的现象,提出了提高
    发表于 08-28 17:10 8721次阅读

    fpga设计实战:复位电路仿真设计

    最近看advanced fpga 以及fpga设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输入系统复位
    发表于 09-01 15:37 1687次阅读
    <b class='flag-5'>fpga</b>设计实战:<b class='flag-5'>复位</b>电路仿真设计

    FPGA中三常用复位电路

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

    常见的FPGA复位设计

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

    FPGA的理想的复位方法和技巧

    FPGA设计中,复位起到的是同步信号的作用,能够将所有的存储元件设置成已知状态。在数字电路设计中,设计人员一般把全局复位作为一个外部引脚来实现,在加电的时候初始化设计。全局复位引脚与
    发表于 11-22 17:03 5612次阅读
    <b class='flag-5'>FPGA</b>的理想的<b class='flag-5'>复位</b>方法和技巧

    Xilinx FPGA的同步复位和异步复位

    对于xilinx 7系列的FPGA而言,flip-flop支持高有效的异步复/置位和同步复位/置位。对普通逻辑设计,同步复位和异步复位没有区别,当然由于器件内部信号均为高有效,因此推荐
    发表于 07-13 09:31 6557次阅读

    基于verilog的FPGA中上电复位设计

    在实际设计中,由于外部阻容复位时间短,可能无法使FPGA内部复位到理想的状态,所以今天介绍一下网上流行的复位逻辑。
    的头像 发表于 08-07 09:17 1.2w次阅读

    FPGA怎么搭复位电路 fpga复位电路设计方案

    FPGA的可靠复位是保证系统能够正常工作的必要条件,本文对FPGA设计中常用的复位设计方法进行了分类、分析和比较,并针对各种复位方式的特点,
    发表于 08-08 15:14 1w次阅读

    FPGA设计:PLL 配置后的复位设计

    先用FPGA的外部输入时钟clk将FPGA的输入复位信号rst_n做异步复位、同步释放处理,然后这个复位信号输入PLL,同时将clk也输入P
    发表于 03-29 17:19 2796次阅读
    <b class='flag-5'>FPGA</b>设计:PLL 配置后的<b class='flag-5'>复位</b>设计

    FPGA设计实战-复位电路仿真设计

    最近看 advanced fpga 以及 fpga 设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输入系统
    的头像 发表于 10-30 12:17 495次阅读

    实现FPGA实战复位电路的设计和仿真

    最近看 advanced fpga 以及 fpga 设计实战演练中有讲到复位电路的设计,才知道复位电路有这么多的门道,而不是简单的外界信号输入系统
    发表于 12-22 12:54 13次下载
    实现<b class='flag-5'>FPGA</b>实战<b class='flag-5'>复位</b>电路的设计和仿真

    基于FPGA的小波滤波抑制复位噪声方法

    基于FPGA的小波滤波抑制复位噪声方法
    发表于 07-01 14:42 24次下载

    FPGA设计中的复位

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

    FPGA复位电路的实现方式

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

    FPGA同步复位和异步复位

    FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的复位操作是设计过程中不可或缺的一环,它负责将电路恢复到初始状态,以确保系统的正确启动和稳定运行。在FPGA设计中,
    的头像 发表于 07-17 11:12 1284次阅读