ISE Timing Report 小结

本文深入探讨了FPGA设计中的时序分析与约束设置,涵盖了时序路径模型、时序报告解读、ISE工具使用及策略设置等内容。通过实例讲解了如何在ISE环境下进行时序约束的设定与分析,帮助读者理解和掌握FPGA设计中的关键时序问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

结合近期工作调试经验,并整理网上资料,对timing summary相关内容进行整理。

部分图文来自文后的参考博客,更多精彩内容请阅读参考博客原文。

 

 

 

一、概述

1.1、时序模型

在任何设计中最普通的时序路径有以下4种:

1 输入端口到内部时序单元路径;

2 从时序单元到时序单元之间的内部路径;

3 从内部时序单元到输出端口之间的路径;

4 输入端口到输出端口之间的路径;

 

时序路径模型

 

1.2、ISE Timing Report

ISE Summary 示例

1.3、ISE工具和策略设置

 

ISE的综合设置

 

通常大的FPGA设计中跑一次bit文件时间很长,为了能够一次把不满足的timing报告出来,首先需要将ISE的设置从默认的3更改为较大的数字(100,200等);

ISE map setting

 

组合逻辑的深度极大的影响FPGA的时序,这个比较容易理解;LUT or Slice的级数决定了关键路径。工程师coding的技巧和能力决定了整个代码timing的结果,如果写代码时能够联想到综合结果将RTL转化到电路的结构,Slice的占用情况;Timing 一定很好。

 

 

 

1.4、时序报告的阅读

  • 通常时序单元(寄存器)之间的组合逻辑计算延时和布线时间是影响FPGA timing的关键。

  • 其中组合逻辑计算和逻辑深度(级数)相关;而布线延时和信号的扇出大小、器件类型、版本的资源占用情况相关;

  • 逻辑工程师能够通过阅读时序路径报告,找到代码中相应存在的时序问题;

  • 最好结合timing analyzer 和FPGA editor 一起使用,能够直观看到路径走线,延时信息等;(点击蓝色路径即可)

 

 

 

 

 

Timing Constraints Classes

制定时序要求通常是由整个系统电路的外部环境来决定的,比如:

  • 整个电路系统提供给FPGA的时钟速度为多快

  • FPGA输入数据是同步信号还是异步信号以及它的频率

  • FPGA输出数据所需的频率

  • 输入/输出数据与时钟的相位关系

总结以上各种需求情况,得出FPGA芯片对外的三种时序约束:

  • Period(时钟周期约束):约束用同一时钟驱动的寄存器(或同步器件)所能使用的最低时钟频率来保证FPGA内部同步信号的采样时间与保持时间。

  • Offset:约束用时钟采样数据(offset in)或用时钟打出数据(offset out)时时钟与数据的相位差来保证FPGA采样数据的建立时间与下一级芯片得到数据的采样时间。

  • Pad to Pad:当输入数据进入FPGA后没有经过任何同步器件(即由时钟驱动的器件如寄存器、BRAM等),只经过组合逻辑后就输出片外时,Pad to Pad的From…To..约束用以保证内部的延迟时间。

有了以上三种约束类型,就可以描述外界的任何可能条件,并清楚的对最终设计需要满足的时序要求作出说明,FPGA实现工具就会依据此要求进行布局布线,并试图满足要求。Xilinx有许多文档对怎样书写时序约束进行了说明。在此要强调的一点是:时序约束首先是对外界环境的一个反映,其次才是对布局布线工具的要求。时序约束向工具说明上游器件所给的信号是怎样的,下游器件又要求怎样的输入,FPGA实现工具才好依照此标准来综合、布局、布线,时序收敛的设计才可能在真正的电路环境中正常工作。

 

Timing报告显示逻辑层次比较多,而这些层次中没有延时特别长的

如果是LUT到LUT的层次太多,那么可以先使用XST的register balancing功能。如果还是无法满足,可能需要手动调整组合逻辑,在中间插一级寄存器,并修改其他相关的代码,使得相关数据的latency一致。其他方法参考Xilinx AR9417。

如果是进位链太长,那么就要考虑使用两个小一点的计数器/加法器级联。当考虑到进位逻辑是纵向排列的,当超出一列时,进位会导致延时变长很多时,更需要注意进位链的长度。

如果是BRAM到后续FF的延时比较长,那么考虑几种情况:

  • BRAM的输出直接驱动FF,而且目标频率比较高,比如400-500MHz。为降低这段从BRAM到FF的TCO延时,那么应该使用BRAM Primitive内部的寄存器

  • BRAM的输出经过一些组合逻辑后驱动FF,而且目标频率比较低,<300MHz。为了将BRAM的TCO从这段路径中去除,应该在使用CoreGen生成BRAM时选择输出寄存器在Core中而不用Primitive的。

  • 如果目标频率又高,BRAM输出又经过了LUT再驱动FF,那么Primitive和Core中的寄存器最好都使用。这样既降低TCO,又缓解后续逻辑的时序要求。

参考Xilinx AR9412

 

二、ISE的时序约束工具入门

该节内容引用自博文:在ISE下分析和约束时序

详细内容可以跳转上面链接

 

像TimeQuest一样,ISE软件工具也有自己的时序约束及分析工具。ISE界面的processes当中,有一个user constraints列表,其中的Creat Timing Constrain可以提供用户添加指定的时序约束。

ISE使用的时序约束信息跟其他的物理约束,电气约束等信息全部都放置在后缀名为ucf(user constrain file)的文件中,在使用图形化界面编辑约束后,用户还可以直接编辑UCF文件对时序等要求进行修改。

此外,PlanAhead Post synthesis工具在提供管脚,区域约束等功能之外,也提供了时序约束及分析的功能。所以设计者在约束设计时序时可以有多种方法。

使用Creat Timing Constrain时界面的约束类型部分如下图所示:

ISE时序约束类型

 

从图中我们看到,这个工具对于时序约束的理解与altera的一致,需要约束时钟,输入输出信号,以及指定一些时序例外,也有将约束组成Group的功能。Xilinx公司对于其FPGA约束的名称与altera略有不同,但含义一样。分别是Period constrain(时钟周期约束),OFFSET constrain(输入输出偏移约束),以及FROM TO constrain,当然也有multi-cycle constrain等。

       双击unconstrainedclks窗口的clk项,出现的以下对话框可以对设计的时钟信息进行指定。

ISE下约束时钟界面

 

这个界面可以设置时钟的周期,占空比,以及初始边沿是上升沿还是下降沿。或者如果这个时钟是从其他指定的时钟生成的,也可以指定生成的关系从而软件自己计算生成时钟的信息。unconstrained clks窗口将设计中没有约束的时钟列出来,在对每个时钟一一指定之后,窗口内容逐一消失。而其上方另一个窗口将显示约束的具体信息,并且也可从中选择一条约束进行逐一修改。

约束类型菜单下的Inputs 选中双击后,会出现如下图所示的对话框,指定了输入偏移约束的类型之后,选择next。这里的OFFSET IN 的类型包括,输入信号是源同步还是系统同步(时钟的来源不同),是单边沿触发还是双边沿触发的信号,以及有效边沿类型。通常在设计中,若非特殊的DDR数据,或者使用了外部随路时钟,就选择SDR以及系统同步即可。

指定输入偏移约束的类型

 

       指定了偏移约束类型后选择next会出现下图所示页面,在这个页面中可以约束输入信号的时序。

OFFSET IN 约束设置页面

 

在这个页面中,左上角表明了系统中使用的时钟的信息。若有多个时钟,则可以选择输入信号建立相关的时钟。在Input pad timegroup/net中,可以选择要指定约束的目标端口。若没有对信号合并分组,就选择input pad net,然后选择需要约束的输入管脚即可。画红色*号的必须指定的地方,会有External setup time,此即为需要设置的offset in 约束。通过计算外部器件输出时序以及电路板上延时之后,设计者可以在此指定一个值,表示的是输入端口信号建立时间与时钟信号有效边沿的延时。

仿照上面OFFSET IN的设置,读者可以设置OFFSET OUT的约束。它约束的是输出端口信号与参考时钟有效边沿之间的延时关系。其数值需要查阅下一级芯片输入数据时钟的建立关系及电路板上时钟,信号线延时关系计算获得。

约束了设计中使用的时钟,同时约束了输入输出端口的时序之后,整个设计的约束就是完整的。但完整的约束不一定是正确的,过于严格的约束会挤占布局布线的资源从而造成无法进行最优布线。所以还需要对一些不必要的,过于严格的约束进行时序例外的声明。这些读者可以通过尝试软件工具及阅读软件用户手册来学习。

 

下面是PlanAhead Post synthesis工具启动后设置时序约束的页面。

PlanAhead Post synthesis工具下的时序约束界面

 

从上图可以看出这里的时序约束包括了Clk period,Pad-clk offset,pathdelay,Time group,False path以及off chip delay等项。双击其中的任何一项可以出现下图所示的对话框:

设置新的时序约束对话框

 

       这个对话框列出了所有能够设置的时序约束,这里的约束设置比Creat Timing Constrain工具更加简洁,如图中所示,在选择了Input pad to clk offset 之后,右边出来的界面中,选择data arrival为Before clock,时钟选择的clk为系统时钟,有效边沿选择上升沿,勾选Delay value,设置为2ns。Pad net勾选后可以选择需要设置的端口名称。这样的设置与前文所述的Creat Timing Constrain工具约束输入端口时序是一致的。可见这个工具会更加简洁。

 

 ISE下查看时序结果

查看时序报告时,在ISE工具下也有多种方式。比如,在ISE工具下可以选择Timing,然后在出现的对话框选择run analysis。会出现下图所示界面。在这个界面中可以选择需要分析的pad, net或者是寄存器(Flip-Flop)。这样工具会给出你选择的路径的时序分析报告。

Run Timing Analysis对话框

 

或者不选择分析的具体内容,而是直接在tools下选择Timing Analyzer,或者是在Place&Route下选择Generatepost-Place&Route Static Timing下面的Analyze post-Place&Route Static Timing,都会出现一个以工程头文件命名的后缀为twx的一个报告框,这里面将包含设计的时序信息。

 

 

 

 

 

 

 

 

 

 

 

结论

1、FPGA模块之间的信号输入、输出,在时间允许的情况下,都可以使用寄存器打一拍在使用/或者送到下级模块。

 

 

 

 

 

参考

作者博文
1、FPGA Timing笔记
2、Reborn LeeVivado 随笔(6) Timing Summary 相关讨论(一)
3、天一涯在ISE下分析和约束时序
4、 

 

 

 

 

 

 

### 关于 Timing Report 中 '&' 的处理 在 Timing Report 的上下文中,'&' 符号通常不会直接用于表示某种发送操作或问题。然而,在某些情况下,它可能被用来连接多个参数或者作为逻辑运算符的一部分。以下是关于如何处理 Timing Report 中涉及 '&' 的情况: #### 1. **理解 '&' 的语义** 在编程和协议描述中,'&' 可能有多种含义: - 如果是在 C 或类似的低级语言中,`&` 表示取地址操作符或按位与操作符[^3]。 - 如果是在 XML 或其他标记语言中,`&` 是特殊字符的转义前缀(如 `&` 表示实际的 `&` 字符)[^4]。 对于 Timing Report 来说,如果涉及到 `'&'`,可能是为了组合多个时间调整参数,或者是协议文档中的语法标志。 #### 2. **Timing Report 的结构分析** 根据引用的内容[^2],Timing Advance (TA) 报告可以在 connected mode 下由 UE 提供,并且可以通过随机接入过程或事件触发的方式进行更新。如果需要查找与 `'&'` 相关的操作,则可以从以下几个方面入手: - **检查报告格式**:确认 Timing Report 是否包含任何字段名或数据项使用了 `'&'` 进行分隔或标识。 ```python ta_report = { 'timing_advance': value, 'frequency_pre_compensation': another_value, '&additional_info': special_data # 假设存在这样的键 } ``` - **解析协议规范**:查阅相关标准文档(如 38.331 和 38.321),寻找是否有提及 `'&'` 的具体用途。例如,是否存在类似于 `&additional_parameters` 的字段名称。 #### 3. **实现 Timing Report 处理** 如果确实发现 `'&'` 被用作某种标识符或分隔符,可以编写代码来提取和处理相关信息。以下是一个简单的 Python 示例,展示如何从 Timing Report 数据中筛选出带有 `'&'` 的条目: ```python def process_timing_report(report): related_items = {} for key, value in report.items(): if '&' in str(key): # 检查键是否包含 '&' related_items[key] = value return related_items # 示例输入 timing_report = { 'timing_advance': 10, 'frequency_pre_compensation': 5, '&special_parameter': 'important data', 'another_field': 'normal data' } result = process_timing_report(timing_report) print(result) ``` 输出结果将是只包含带 `'&'` 的键值对的部分。 #### 4. **潜在问题及其解决方法** 如果 Timing Report 中的 `'&'` 导致了解析错误或其他异常行为,可以根据具体情况采取措施: - **编码冲突**:如果是由于字符串未正确解码引起的,确保所有数据都经过 UTF-8 编码处理[^5]。 - **非法字符**:验证 `'&'` 是否属于合法范围内的字符集。如果不是,则考虑将其替换为更安全的形式(如 `_and_`)。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值