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

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

3天内不再提示

如何在FPGA设计环境中加入时序约束?

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2023-10-12 12:00 次阅读

在给FPGA做逻辑综合和布局布线时,需要在工具中设定时序的约束。通常,在FPGA设计工具中都FPGA中包含有4种路径:从输入端口寄存器,从寄存器到寄存器,从寄存器到输出,从输入到输出的纯组合逻辑。

通常,需要对这几种路径分别进行约束,以便使设计工具能够得到最优化的结果。下面对这几种路径分别进行讨论。

(1)从输入端口到寄存器:

这种路径的约束是为了让FPGA设计工具能够尽可能的优化从输入端口到第一级寄存器之间的路径延迟,使其能够保证系统时钟可靠的采到从外部芯片到FPGA的信号。约束名称:input delay. 约束条件的影响主要有4个因素:外部芯片的Tco,电路板上信号延迟Tpd,FPGA的Tsu, 时钟延迟Tclk. Tco的参数通常需要查外部芯片的数据手册。计算公式:input delay = Tco+Tpd+Tsu-Tclk. FPGA的Tsu也需要查FPGA芯片的手册。FPGA速度等级不同,这个参数也不同。Tpd和Tclk需要根据电路板实际的参数来计算。通常,每10cm的线长可以按照1ns来计算. 例如:系统时钟100MHz,电路板上最大延迟2ns, 时钟最大延迟 1.7ns, Tco 3ns, FPGA的Tsu为0.2ns. 那么输入延迟的值:max Input delay = 2+3+0.2-1.7=3.5ns. 这个参数的含义是指让FPGA的设计工具把FPGA的输入端口到第一级寄存器之间的路径延迟(包括门延迟和线延迟)控制在 10ns-3.5ns=6.5ns 以内。

(2)寄存器到寄存器:

这种路径的约束是为了让FPGA设计工具能够优化FPGA内寄存器到寄存器之间的路径,使其延迟时间必须小于时钟周期,这样才能确保信号被可靠的传递。由于这种路径只存在于FPGA内部,通常通过设定时钟频率的方式就可以对其进行约束。对于更深入的优化方法,还可以采用对寄存器的输入和寄存器的输出加入适当的约束,来使逻辑综合器和布线器能够对某条路径进行特别的优化。还可以通过设定最大扇出数来迫使工具对其进行逻辑复制,减少扇出数量,提高性能。

(3)寄存器到输出:

这种路径的约束是为了让FPGA设计工具能够优化FPGA内部从最后一级寄存器到输出端口的路径,确保其输出的信号能够被下一级芯片正确的采到。约束的名称:output delay,约束条件的影响主要有3个因素:外部芯片的Tsu,电路板上信号延迟Tpd,时钟延迟Tclk.Tsu的参数通常需要查外部芯片的数据手册。计算公式:output delay = Tsu+Tpd-Tclk.例如:系统时钟100MHz,电路板上最大延迟2ns, 时钟最大延迟 1.7ns, Tsu 1ns, 输出延迟的值:max output delay = 1+2-1.7=1.3ns . 这个参数的含义是指让FPGA的设计工具把最后一级寄存器到输出端口之间的路径延迟(包括门延迟和线延迟)控制在 10ns-1.3ns=8.7ns 以内。

(4)从输入端口到输出端口:

这种路径是指组合逻辑的延迟,指信号从输入到输出没有经过任何寄存器。给这种路径加约束条件,需要虚拟一个时钟,然后通过约束来指定哪些路径是要受该虚拟时钟的约束。在Synplifypro和Precision中都有相应的约束来处理这种路径。

关于输入输出延迟的一些参数,如果要把这些参数和xilinx的软件结合起来,也不是一件容易的事情。以前似乎大家也不太看重约束条件的设定,大多时候都是无论如何先上板,然后通过signaltap和Chipscope来调。当FPGA规模大了之后,布线一次都需要很长时间,这种方法的弊端就越来越严重。实际上可以借鉴ASIC的设计方法:加比较完善的约束条件,然后通过RTL仿真,时序分析,后仿真来解决问题,尽量避免在FPGA电路板上来调试。altera最先意识到这一点,它采用了Synopsys的SDC格式。SDC的格式也得到了逻辑综合器的支持。而且设定方法比较容易掌握。这个帖子会详细讨论一下这种格式的约束设定方法。

时钟的设定方法:时钟要分成两种,一种是从端口上直接输入的时钟,另一种是在FPGA内部产生的时钟。内部产生的时钟又要分成两种,从锁相环出来的(包括altera的PLL和Xilinx的DLL)和从逻辑单元出来的,例如一般的计数器分频就是这种情况。从锁相环出来的时钟可以通过端口直接加,因为一般的综合工具和布线工具都能够自动的把端口的时钟约束传递到锁相环,并且根据锁相环的倍频关系自动施加到下一级。而从逻辑单元出来的就需要单独对其进行约束。

在SDC格式中,创建时钟的命令 create_clock, 后面要带3个参数:name ,period, waveform. name的含义是指创建这个时钟约束的名字,而不是时钟本身的名字。要把这个约束和时钟信号关联起来,还需要在后面加些东西。period的单位缺省是ns. waveform是用来指定占空比。除了这三个参数以外,常常还要加 get_ports的命令,来指定时钟的输入端口。下面的例子是一个较为完整的设定时钟的例子:

create_clock -name clk1 -period 10.000 –waveform { 2.000 8.000 } [get_ports sysclk]

这个例子表示,有一个clk1的约束,在这个约束中设定了时钟的周期为10ns, 占空比为2ns低电平,8ns高电平。这个叫做clk1的约束是针对sysclk这个端口的。

如果是利用内部锁相环分频出来很多其他时钟的约束,可以不再另外施加其他约束,逻辑综合器和布线器都能根据锁相环的参数自动计算。如果是利用内部的逻辑单元分频出来的信号,则必须利用get_registers指定分频的寄存器名。例如上例:

create_clock -name clk1 -period 10.000 –waveform { 2.000 8.000 } [get_registers cnt_clk].

对于逻辑单元分频的时钟信号,也可以采用命令create_generated_clock会更加精确。举例如下:

create_generated_clk -name clk2 -source [getports sysclk] -div 4 [get_registers cnt_clk]

这个约束命令描述了一个clk2的约束,约束的对象是由sysclk分频4次得到的时钟,这个时钟是由cnt_clk这个寄存器产生的。

在高速的系统中,对时钟的描述可能会要求的更多,更加细致。例如,会要求对时钟的抖动和时钟的延迟进行描述。在SDC的文件格式中,可以通过两个命令来描述:set_clock_uncertainty 和 set_clock_latency 来设定。

时钟的延迟相对来讲比较简单。延迟一般分为外部延迟和内部时钟线网的延迟。通常在约束时只对外部延迟做约束,在set_clock_latency的命令后带 -source的参数就可以了。例如:

set_clock_latency -source 2 [get_clocks {clk_in}]

时钟的抖动要稍微复杂一些。因为这个值不但会影响到对Tsu的分析,也会影响到对Thold的分析。因此,采用set_clock_uncertainty的参数要多一些。如果要理解这个命令对系统时序分析的影响,就需要对altera的延时计算的概念需要做更多的说明。

对于set_clock_uncertainty的情况,就稍微复杂一些。因为set_clock_uncertainty的值既影响建立时间的计算,也影响保持时间的计算,因此,需要在设定时分别指明:

set_clock_undertainty –setup 0.500 –from clkA –to clkA

set_clock_uncertainty –hold 0.300 –from clkA –to clkA

前面的内容里面提供了计算输入输出延迟的计算方法。输出延迟的命令是set_output_delay. 有几个参数要加:参考时钟,最大最小值,和端口的名称。如下面的例子中描述。

set_output_delay -clock CLK -max 1.200 [get_ports OUT]

set_output_delay -clock CLK -min 0.800 [get_ports OUT]

输入延迟的命令很类似:

set_input_delay -clock CLK -max 2.000 [get_ports IN]

set_input_delay -clock CLK -min 1.600 [get_ports IN]

对一些特殊的设计要求,例如不关心的数据传递路径和多拍的路径,还需要增加false path 和 Multicycle的设定。这两个约束比较简单,容易设定,但是非常关键。如果设定的不好,系统性能会大打折扣。false path是指在时序分析中不考虑其延迟计算的路径。例如有些跨越时钟域的电路等。设定的方法:

set_false_path -from [get_clocks clkA] -to [get_clocks clkB]

set_false_path -from regA -to regB

第一条命令是设定了从时钟域clkA到时钟域clkB的所有路径都为false path。第二条命令设定了从 regA到regB的路径为false path。这两种路径在做时序分析时都会被忽略。multicycle的设定和false path的设定方法差不多。

为了让逻辑综合器和布局布线器能够根据时序的约束条件找到真正需要优化的路径,我们还需要对时序报告进行分析,结合逻辑综合器的时序报告,布线器的时序报告,通过分析,可以看出是否芯片的潜能已经被完全挖掘出来

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

    关注

    1602

    文章

    21322

    浏览量

    593213
  • FPGA设计
    +关注

    关注

    9

    文章

    425

    浏览量

    26273
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • 时序约束
    +关注

    关注

    1

    文章

    111

    浏览量

    13350

原文标题:如何在FPGA设计环境中加入时序约束?

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

收藏 人收藏

    评论

    相关推荐

    FPGA的IO口时序约束分析

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

    FPGA主时钟约束详解 Vivado添加时序约束方法

    FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序
    发表于 06-06 18:27 7056次阅读
    <b class='flag-5'>FPGA</b>主时钟<b class='flag-5'>约束</b>详解 Vivado添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>方法

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

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

    FPGA I/O口时序约束讲解

    前面讲解了时序约束的理论知识FPGA时序约束理论篇,本章讲解时序
    发表于 08-14 18:22 922次阅读
    <b class='flag-5'>FPGA</b> I/O口<b class='flag-5'>时序</b><b class='flag-5'>约束</b>讲解

    Xilinx资深FAE现身说教:在FPGA设计环境中加时序约束的技巧

      在给 FPGA 做逻辑综合和布局布线时,需要在工具中设定时序约束。通常,在 FPGA  中都包含有4 种路径:从输入端口到寄存器,从寄存器到寄存器,从寄存器到输出,从输入  到输
    发表于 03-05 15:02

    FPGA时序约束OFFSET

    FPGA时序约束,总体来分可以分为3类,输入时序约束,输出时序
    发表于 09-05 21:13

    何在FPGA设计环境中加入时序约束

    在给FPGA做逻辑综合和布局布线时,需要在工具中设定时序约束。通常,在FPGA设计工具中都FPGA中包含有4种路径:从输入端口到寄存器,从
    发表于 11-08 07:27

    FPGA时序约束方法

    FPGA时序约束方法很好地资料,两大主流的时序约束都讲了!
    发表于 12-14 14:21 19次下载

    赛灵思FPGA设计时序约束指南

    赛灵思FPGA设计时序约束指南,下来看看
    发表于 05-11 11:30 48次下载

    FPGA中的时序约束设计

    一个好的FPGA设计一定是包含两个层面:良好的代码风格和合理的约束时序约束作为FPGA设计中不可或缺的一部分,已发挥着越来越重要的作用。毋
    发表于 11-17 07:54 2357次阅读
    <b class='flag-5'>FPGA</b>中的<b class='flag-5'>时序</b><b class='flag-5'>约束</b>设计

    FPGA设计之时序约束

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

    详解FPGA时序input delay约束

    本文章探讨一下FPGA时序input delay约束,本文章内容,来源于配置的明德扬时序约束专题课视频。
    发表于 05-11 10:07 3585次阅读
    详解<b class='flag-5'>FPGA</b>的<b class='flag-5'>时序</b>input delay<b class='flag-5'>约束</b>

    FPGA时序input delay约束

    本文章探讨一下FPGA时序input delay约束,本文章内容,来源于明德扬时序约束专题课视频。
    的头像 发表于 07-25 15:37 2481次阅读
    <b class='flag-5'>FPGA</b>的<b class='flag-5'>时序</b>input delay<b class='flag-5'>约束</b>

    何在Vivado中添加时序约束

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序
    的头像 发表于 06-23 17:44 1393次阅读
    如<b class='flag-5'>何在</b>Vivado中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    何在Vivado中添加时序约束呢?

    今天介绍一下,如何在Vivado中添加时序约束,Vivado添加约束的方法有3种:xdc文件、时序约束
    的头像 发表于 06-26 15:21 2235次阅读
    如<b class='flag-5'>何在</b>Vivado中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>呢?