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

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

3天内不再提示

在工程中学习到的各种时序约束技巧

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-08-15 14:15 次阅读

FPGA毕竟不是ASIC,对时序收敛的要求更加严格,本文主要介绍本人在工程中学习到的各种时序约束技巧。

首先强烈推荐阅读官方文档UG903和UG949,这是最重要的参考资料,没有之一。它提倡要在设计的早期阶段就要排除问题,越到后期时序的改善就越困难。其中HLS层次对性能的影响是最大的。

本文将从代码风格,时序修正,工程设置等几个方面介绍本人的实践经验,希望让各位初学者快速提高,也希望FPGAer能给出宝贵建议。

1. 代码风格

推荐使用Xilinx language templates的代码块,这里的代码能够综合出正确且结构简洁的电路,包括移位寄存器,乘法,复数乘法,FIR滤波器等,凡是涉及到的模块尽量使用官方写法。

合理的设计代码框架。IO相关的代码、时钟管理单元尽量放在顶层,后者有助于以共享资源从而提高性能降低功耗。模块的输出最好是使用寄存器输出,有助于降低路径延时帮助时序收敛。

复位也是非常重要的问题。和ASIC不同,Xilinx FPGA的寄存器是高电平复位,支持异步复位和同步复位,但是DSP和BRAM内部的寄存器不支持异步复位。因此,官方更推荐设计采用高电平同步复位,可以降低资源的使用和功耗,有助于时序收敛。由于FPGA的初始状态是确定的(可以在定义说明中指定),为了更快地时序收敛,官方文档认为,能不用复位是最好的,尤其数据路径和移位寄存器的设计中。不过使用同步复位仍需要注意控制集不能太多的问题。关于这方面的内容,UG949第三章Control Signals and Control Sets给了详细的说明。

数学运算使用DSP单元速度会更快一些,根据DSP的结构重组数学运算,充分利用FPGA的DSP、BRAM资源。并且能做到对代码映射的硬件资源心里有数。

如果并不需要优先级,尽量将If语句转化为case语句。

尽量不要使用Don't Touch这类语句。如今Vivado综合工具已经很完善了,除非代码有问题或者手动复制寄存器,否则一般不会发生电路被综合掉的现象。使用这些语句会覆盖Vivado综合设置,导致电路没有得到充分的优化,给时序收敛造成困难。

2. 时序修正

严格遵守Vivado开发流程,在第一次跑综合时最好是在没有任何物理约束的情况下,Vivado在越少物理约束的情况下综合出来的效果越好。查看每个阶段的时序报告,将每一阶段的时序违例控制在300ps以内,尽早消除问题。以前本人RTL Analysis阶段过了之后选择运行Implementation跳过Synthesis报告,这是不可取的行为。有时候会发现Synthesis有时序问题而在Implementation阶段反而没问题,这是因为Vivado在Implementation阶段对时序不满足的地方倾斜了更多的资源保证时序收敛。但是忽略Synthesis的时序问题会在后期顶层模块集成占用大资源时爆发出来。

下面介绍主要面对的两个时序问题的处理技巧。

1)setup time 建立时间问题

建立时间是工程设计中最常遇到的问题了。一般说来,导致建立时间违例主要有两个原因:逻辑级数太大或者扇出太大。

打开Report Timing Summary界面查看路径延迟信息,如下图所示。

8397d642-1c48-11ed-ba43-dac502259ad0.png

Levels指的是逻辑级数logic level,一个logic level的延迟对应的是一个LUT和一个Net的延迟,对于不同的器件,不同频率的设计能容纳的logic level是不同的。假设7系列的-2速度等级250MHz的设计,电路设计的大部分levels最好不要超过8,否则会造成时序收敛困难。

83b31132-1c48-11ed-ba43-dac502259ad0.png

Logic level太大的处理方法就是重定时(Retiming)了,典型的重定时方法就是流水线,将过于冗长的组合逻辑增加寄存器进行打拍。

High Fanout指的是扇出,同样和器件、设计频率等有关,如下图所示:

83c1d582-1c48-11ed-ba43-dac502259ad0.png

降低扇出最好不要在综合设置中指定,过低的扇出限制会造成设计堵塞反而不利于时序收敛,最好的方法是根据设计中时序最差路径的扇出进行针对性的优化。如果是寄存器的输出扇出很大,可以使用max_fanout属性标记寄存器声明,也可以手动复制寄存器,

如果不是关键时序路径,而且高扇出网络直接连接到触发器,对扇出超过25K的net插入BUFG:

set_property CLOCK_BUFFER_TYPE BUFG [get_nets netName]

当然,也可以在后期Implementation的物理优化设置中优化扇出。

2)hold time 保持时间问题

在实践中,我发现保持时间问题的问题往往是异步处理的问题。

对于一个信号的跨时钟域问题,一般使用双寄存器法(对于慢采快的结绳法这里不讨论)。为了降低MTBF(Mean Time Between Failures,平均无障碍时间),这两个寄存器最好位于同一个slice中。可以使用tcl语言指定,如:

set_property ASYNC_REG TRUE [get_cells [list sync0_reg sync1_reg]]

也可以直接在代码中指定:

(* ASYNC_REG = "TRUE" *) (* keep = "true" *)reg sync0_reg, sysnc1_reg;

也可以参考代码模板使用XPM模板进行处理。

多个信号一般是使用FIFO或者握手的方法,这里不再赘述原理。同步CDC处理比较复杂,本人打算之后另外写一篇文章详细讲述。

3. 工程设置

Vivado综合实现本质是时序驱动的,和ISE不同,因此再也没有ISE那种用随机种子综合实现满足时序收敛的工具。不过Vivado在布局布线方面提供了几种不同的策略(directive),通过不同策略的组合可以产生上千种不同的布局布线结果,还可以使用tcl钩子脚本自定义布局布线过程,足以满足需求。而且,Vivado可支持同时运行多个Implementation,这为这种设计时间换取性能的方法提供了工具上的便利。

Implementation里Post-place Phys Opt Design和Post-route Phys Opt Design是没有使能的。工程后期使能这两个配置也能在一定程度上改善时序收敛。

FPGA工程师的工作不只是将电路功能实现,由于器件和工具不是理想的,所以还需要研究器件特性和工具的局限,尤其是在如今算法结构越来越成熟的背景下,不断被工具折磨,也许这也是FPGA工程师的悲哀吧。

审核编辑 :李倩

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

    关注

    1627

    文章

    21679

    浏览量

    602180
  • Vivado
    +关注

    关注

    19

    文章

    808

    浏览量

    66357

原文标题:Vivado工程经验与时序收敛技巧

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    VIVADO时序约束及STA基础

    时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序
    的头像 发表于 03-11 14:39 9702次阅读

    FPGA的IO口时序约束分析

      高速系统中FPGA时序约束不止包括内部时钟约束,还应包括完整的IO时序约束
    发表于 09-27 09:56 1722次阅读

    FPGA时序约束之衍生时钟约束和时钟分组约束

    FPGA设计中,时序约束对于电路性能和可靠性非常重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的主时钟
    发表于 06-12 17:29 2630次阅读

    学习时序约束 遇到的问题,求助

    刚刚开始学习Altera FPGA的时序约束,照着特权同学的一个例子做的 但是出现了下面的问题工程代码:modulequest_test(clk,rst, led);input clk
    发表于 03-20 12:51

    FPGA时序约束的几种方法

    控。从最近一段时间工作和学习的成果中,我总结了如下几种进行时序约束的方法。按照从易难的顺序排列如下:0. 核心频率约束 这是最基本的,所以
    发表于 06-02 15:54

    时序约束时序分析 ppt教程

    时序约束时序分析 ppt教程 本章概要:时序约束时序分析基础常用
    发表于 05-17 16:08 0次下载

    时序约束用户指南

    时序约束用户指南包含以下章节: ?第一章“时序约束用户指南引言” ?第2章“时序约束的方法” ?
    发表于 11-02 10:20 0次下载

    Xilinx时序约束培训教材

    时序约束的概念 时序约束主要包括周期约束(FFSFFS,即触发器
    发表于 03-16 18:10 0次下载

    Xilinx时序约束培训教材

    FPGA学习资料教程之Xilinx时序约束培训教材
    发表于 09-01 15:27 0次下载

    深入了解时序约束以及如何利用时序约束实现FPGA 设计的最优结果

    作为赛灵思用户论坛的定期访客(见 ),我注意新用户往往对时序收敛以及如何使用时序约束来达到时序收敛感到困惑。为帮助 FPGA设计新手实现
    发表于 11-24 19:37 5446次阅读
    深入了解<b class='flag-5'>时序</b><b class='flag-5'>约束</b>以及如何利用<b class='flag-5'>时序</b><b class='flag-5'>约束</b>实现FPGA 设计的最优结果

    FPGA时序约束的概念和基本策略

    A 时序约束的概念和基本策略 时序约束主要包括周期约束(FFSFFS,即触发器
    的头像 发表于 09-30 15:17 5043次阅读

    FPGA的约束时序分析的概念详解

    A 时序约束的概念和基本策略 时序约束主要包括周期约束(FFSFFS,即触发器
    的头像 发表于 10-11 10:23 5481次阅读
    FPGA的<b class='flag-5'>约束</b>、<b class='flag-5'>时序</b>分析的概念详解

    FPGA设计之时序约束

    上一篇《FPGA时序约束分享01_约束四大步骤》一文中,介绍了时序约束的四大步骤。
    发表于 03-18 10:29 1646次阅读
    FPGA设计之<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    时序约束怎么用?时序约束到底是要干嘛?

    很多小伙伴开始学习时序约束的时候第一个疑惑就是标题,有的人可能会疑惑很久。不明白时序约束是什么作用,更不明白怎么用。
    的头像 发表于 06-28 15:10 1628次阅读
    <b class='flag-5'>时序</b><b class='flag-5'>约束</b>怎么用?<b class='flag-5'>时序</b><b class='flag-5'>约束</b>到底是要干嘛?

    浅谈时序设计和时序约束

      本文主要介绍了时序设计和时序约束
    的头像 发表于 07-04 14:43 1366次阅读