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

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

3天内不再提示

Xilinx FPGA时序约束设计和分析

FPGA之家 来源:FPGA之家 2023-04-27 10:08 次阅读

在进行FPGA的设计时,经常会需要在综合、实现的阶段添加约束,以便能够控制综合、实现过程,使设计满足我们需要的运行速度、引脚位置等要求。通常的做法是设计编写约束文件并导入到综合实现工具,在进行FPGA/CPLD的综合、实现过程中指导逻辑的映射和布局布线。下面主要总结一下Xilinx FPGA时序约束设计和分析。

一、周期约束

周期约束是Xilinx FPGA 时序约束中最常见的约束方式。它附加在时钟网线上,时序分析工具会根据周期约束来检查时钟域内所有同步元件的时序是否满足需求。周期约束会自动的寄存器时钟端的反相。如果相邻的两个元件的时钟相位是相反的,那么它们之间的延迟将被默认的限制成周期约束的一半。

在进行周期约束之前,必须对电路的时钟周期明了,这样才不会出现约束过松或者过紧的现象。一般情况下,设计电路所能达到的最高运行频率取决于同步元件本身的Setup Time 和 Hold Time,以及同步元件之间的逻辑和布线延迟。周期约束一般是使用下面的约束方法:

1、period_item PERIOD=period {HIGH|LOW} [high_or low_item]

其中,period_item可以是NET或TIMEGRP,分别代表时钟线名称net name或元件分组名称group-name。用NET表示PERIOD约束作用到名为“net name”的时钟网线所驱动的同步元件上,用TIMEGRP表示PERIOD约束作用到TIMEGRP所定义的分组(包括FFS、LATCH和 RAM等同步元件)上。period是目标时钟周期,单位可以是ps、ns、μS和ms等。HIGH|LOW指出时钟周期中的第1个脉冲是高电平还是低电平,high or low time为HIGH LOW指定的脉冲的持续时间,默认单位是ns。如果没有该参数,时钟占空比 是50%。例如, NET SYS_CLK PERIOD=10 ns HIGH 4ns

2、NET“clock net name”TNM_NET=“timing group name”;

TIMESPEC“TSidentifier”=PERIOD “TNM reference”period {HIGH | LOW} [high or low item]INPUT_JITTER value;

很多时候为了能够定义比较复杂的派生关系的时钟周期,就要使用该方法。其中TIMESPEC在时序约束中作为一个标识符表示本约束为时序规范;TSidentifier包括字母TS和一个标识符identifier共同作为一个TS属性;TNM reference指定了时序约束是附加在哪一个组上,一般情况下加在TNM_NET定义的分组上。HIGH | LOW 指的是时钟的初始相位表明第一个时钟是上升沿还是下降沿;high or low item 表示的是时钟占空比,即就是high或者low的时间,默认为1:1, INPUT_JITTER 表示的是时钟的抖动时间,时钟会在这个时间范围内抖动,默认单元为ps。比如周期约束:

NET "ex_clk200m_p" TNM_NET = TNM_clk200_p;

TIMESPEC "TS_clk200_p" = PERIOD "TNM_clk200_p" 5.000 ns HIGH 50 %;

建立一个TNM_clk200_p的时序分组,包括时钟网络ex_clk200m_p驱动的所有同步元件,这些同步元件都将受到时序规范TS_clk200_p的约束。同步元件到同步元件有5ns的时间要求。占空比为1:1.

二、偏移约束

偏移约束包括OFFSET_IN_BEFORE、OFFSET_IN_AFTER、OFFSET_OUT_BEFORE和OFFSET_OUT_AFTER等4种约束。属于基本的时序约束,它规定了外部时钟和数据输入输出引脚之间的时序关系,只能用于与引脚相连接。其基本的语法为:

OFFSET = {IN | OUT} “offset_time” [units] {BEFORE | AFTER} “clk_name” [TIMEGRP “group_name”];

其中,[IN | OUT] 说明约束是输入还是输出,”offset_time”为FPGA引脚数据变化与有效时钟之间的时间差,[BEFORE | AFTER]说明该时间差在有效时钟沿的前面还是后面,”clk_name”时钟名,[TIMEGRP “group_name”]定义约束的触发器组,缺省时约束clk_name驱动的所有触发器。

1、OFFSET_IN_BEFORE、OFFSET_IN_AFTER约束

OFFSET_IN_BEFORE和OFFSET_IN_AFTER都是输入偏移约束。OFFSET_IN_BEFORE说明了输入数据比有效时钟沿提前多长时间准备好。于是芯片内部与输入引脚相连的,组合逻辑的延迟不能大于这个时间,否则会发生数据采样错误。OFFSET_IN_AFTER是输入数据在有效时间沿之后多久到达芯片的输入引脚。

OFFSET_IN_BEFORE对芯片内部的输入逻辑的约束,约束如下:

NET data_in OFFSET = IN Time BEFORE CLK;

2、OFFSET_OUT_AFTER、OFFSET_OUT_BEFORE约束

这两个都是输出约束,OFFSET_OUT _AFTER规定了输出数据在有效沿之后多久稳定下来,芯片内部的输出延迟必须小于这个数值。OFFSET_OUT_BEFORE是指下一级芯片的输入数据应该在有效时钟沿之前多久准备好。从下一级的输入端的延迟可以计算出当前设计输出的数据必须在何时稳定下来。其基本的语法规则为:“NET data_out” OFFSET=OUT

Time AFTER CLK“;

三、专门约束

附加约束的一般策略是首先附加整天约束,比如PERIOD、OFFSET等约束,然后对局部的电路进行约束。专门约束包括以下几个:

1、FROM_TO约束

FROM_TO在两个组之间定义的约束,对二者之间的逻辑和布线延迟进行控制,这两个组可以是用户自定义的,也可以预定义的,可以使用TNM_NET、TNM和TIMEGRP定义组。其语法如下:

TIMESPEC “TSname“ = FROM ”group1“ TO ”group2“ value ;

其中group1和group2分别是路径的起点和终点,value为延迟时间,可以是具体的数值或者表达式。比如:TIMESPEC TS_CLK = PERIOD CLK 30ns; TIMESPEC T1_T3 = FROM T1 TO T3 60ns;

2、MAXDELAY约束

MAXDELAY约束定义了特定的网络线的最大延迟,其语法如:

NET “net_name“ MAXDELAY = value units ;value 为延迟时间。

3、MAXSKEW约束

MAXSKEW是高级时序约束,通过MAXSKEW约束附加在某一网线上,可以约束该网线上的最大SKEW。MAXSKEW语法如下:

NET “net_name“ MAXSKEW = allowable_skew units;

比如,NET “Singal“ MAXSKEW = 3ns;

四、分组约束

在FPGA设计当中,往往包含大量的触发器、寄存器和RAM等元件,为了方便附加约束需要把他们分成不同的组,然后根据需要对某些组分别约束。

1、TNM约束。

使用TNM约束可以选出一个构成分组的元件,并且赋予一个名字,以便添加约束。如:{NET | INST | PIN} “object_name“ TNM= “identifier“;

其中object_name为NET、INST或PIN的名称,identifier为分组名称。

2、TNM_NEY约束

TNM_NET约束只加在网线上,其作用与TNM约束加在网线时基本相同,即把该网线所在路径上的所有有效同步元件作为一组命名。不同之处在于TNM是加在引脚上的,而不是该网线所在路径上的同步元件,也就是说TNM约束不能穿过IBUF,用TNM_NET约束就不出现这种情况。

NET “net_name“ TNM_NET = [predefined_group:] identifier;

TNM_NET只能用在网线上,否则会出现警告,或者同时该约束被忽略。

2、TIMEGRP约束

可以通过TIMEGRP约束使已有的分组约束构成新的分组,已经有的预定义和用TNM/TIMEGRP定义。使用TIMEGRP约束可以使多个分组合并组成一个新分组。

TIMEGRP “big_group1“ = ”small_group“ ”medium_group“

将”small_group“ ”medium_group“合并一个新分组big_group1。

五、简单的避免时序违规和补救的方法

PERIOD 约束定义的是触发器等同步元件的时钟周期。可使用时序分析器来验证同步元件之间的所有路径是否满足设计的建立和保持时序要求。PERIOD 约束违例将以负的时序裕量显示在在时序报告,并说明到底是建立时间还是保持时间要求出现违例。应找出两个所分析的同步元件间一条较快路径,如果是多周期路径,应该采样多周期约束,或至少是某种方法来确保数据在合适时间内到达并保持足够长的时间,以便时钟脉冲边沿能够正确采样。若布局布线软件无法找到更快的路径,则可从 FPGA Editor 工具中手动进行布线。不过一般不推荐使用手工布局布线。首先应该试试重构电路来满足时序要求。比如用寄存器打一拍,有点逻辑复制的意思,这样可以增加了信号的延迟,但是却可以使电路正确的采样数据。

若外部信号值在时钟脉冲边沿之前发生变化,则需使用 DCM 或 PLL 延迟时钟脉冲边沿,这样数据才能由新的延迟时钟正确采样。有一种替代方法,就是在输入/ 输出模块中使用 IDELAY 元件,将数据移到时钟有效的位置上。

一般情况下,提高电路的运行速度可以尽量减少时序违规的问题。具体总结如下:

1、通过设置Xilinx ISE软件在“Implement Design“点击右键,选择”属性“选择”“Optimization Strategy”栏中选择”speed“以及点击右键选择”Design Goals and Strategies“选择”Timing performance“。

2、尽量使用Xilinx公司提高的专用资源,FPGA厂商都提高了一些专用的,比如进位链MUX、SRL等。

3、重新分配关键路径

(1) 关键路径在同一Module,这样综合时可以获得最佳的时序效果。

(2) 对关键路径近LOC约束,如果发现关键路径相关的LUT距离太远,可以使用floorplanner手工布线。

(3) 复制电路,减少关键路径的扇出。当一个信号网络所带的负载越多的时候,他的路径也会相应的增加,所以通过复制电路,可以有效的减少甚至消除时序违规的问题。

(4) 在关键路径网络上插入buffer减少扇出,提高速度,消除时序违规。

4、 进行特殊约束,通过设置Multi_Cycle_Path意义不大,因为它不会直接对关键路径产生影响,这样想法显然不对,因为它可以对非关键路径散开的作用,给关键路径节约了空间,间接的达到压缩关键路径延迟的问题,有点“曲线救国“的味道。

5、 通过修改代码减少逻辑级数和分割组合逻辑。

注:一般情况下,使用比较多的都是周期约束,专门约束只是针对部分器件可能需要,一般高端FPGA是不需要这个的。

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

    关注

    1602

    文章

    21320

    浏览量

    593192
  • 电路
    +关注

    关注

    170

    文章

    5482

    浏览量

    169552
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119373
  • 布线
    +关注

    关注

    9

    文章

    730

    浏览量

    84020
  • 时序约束
    +关注

    关注

    1

    文章

    111

    浏览量

    13350

原文标题:Xilinx FPGA的约束设计和时序分析总结

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

收藏 人收藏

    评论

    相关推荐

    FPGA的IO口时序约束分析

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

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

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

    FPGA I/O口时序约束讲解

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

    Xilinx FPGA编程技巧之常用时序约束详解

    今天给大侠带来Xilinx FPGA编程技巧之常用时序约束详解,话不多说,上货。 基本的约束方法为了保证成功的设计,所有路径的
    发表于 04-12 17:39

    Xilinx_fpga_设计:全局时序约束及试验总结

    Xilinx_fpga_设计:全局时序约束及试验总结
    发表于 08-05 21:17

    FPGA时序分析如何添加其他约束

    你好: 现在我使用xilinx FPGA进行设计。遇到问题。我不知道FPGA设计是否符合时序要求。我在设计中添加了“时钟”时序
    发表于 03-18 13:37

    FPGA约束设计和时序分析

    FPGA/CPLD的综合、实现过程中指导逻辑的映射和布局布线。下面主要总结一下Xilinx FPGA时序约束设计和
    发表于 09-21 07:45

    时序约束时序分析 ppt教程

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

    FPGA时序约束方法

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

    Xilinx时序约束设计

    Xilinx时序约束设计,有需要的下来看看
    发表于 05-10 11:24 18次下载

    Xilinx时序约束培训教材

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

    Xilinx FPGA编程技巧常用时序约束介绍

    Xilinx FPGA编程技巧常用时序约束介绍,具体的跟随小编一起来了解一下。
    的头像 发表于 07-14 07:18 4174次阅读
    <b class='flag-5'>Xilinx</b> <b class='flag-5'>FPGA</b>编程技巧常用<b class='flag-5'>时序</b><b class='flag-5'>约束</b>介绍

    xilinx时序分析约束

    详细讲解了xilinx时序约束实现方法和意义。包括:初级时钟,衍生时钟,异步时终域,多时终周期的讲解
    发表于 01-25 09:53 6次下载

    正点原子FPGA静态时序分析时序约束教程

    时序分析结果,并根据设计者的修复使设计完全满足时序约束的要求。本章包括以下几个部分: 1.1 静态时序
    发表于 11-11 08:00 58次下载
    正点原子<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>教程

    FPGA设计之时序约束

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