为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

TimeQuest就一定要搞定完整版

2013-11-27 40页 pdf 2MB 281阅读

用户头像

is_308613

暂无简介

举报
TimeQuest就一定要搞定完整版 一一一一、、、、为什么一定要搞定为什么一定要搞定为什么一定要搞定为什么一定要搞定 时序分析在 ASIC 设计中的重要性毋须多说(我也不甚了解)。在 FPGA 设计中,很少 进行细致全面的时序约束和分析,Fmax 是最常见也往往是一个设计唯一的约束。这一方面 是由 FPGA 的特殊结构决定的,另一方面也是由于缺乏好用的工具造成的。好的时序约束可 以指导布局布线工具进行权衡,获得最优的器件性能,使设计代码最大可能的反映设计者的 设计意图。 花些功夫在静态时序分析上既可以保证设计质量,也可以促使设计者再认识自己的代 ...
TimeQuest就一定要搞定完整版
一一一一、、、、为什么一定要搞定为什么一定要搞定为什么一定要搞定为什么一定要搞定 时序分析在 ASIC 中的重要性毋须多说(我也不甚了解)。在 FPGA 设计中,很少 进行细致全面的时序约束和分析,Fmax 是最常见也往往是一个设计唯一的约束。这一方面 是由 FPGA 的特殊结构决定的,另一方面也是由于缺乏好用的工具造成的。好的时序约束可 以指导布局布线工具进行权衡,获得最优的器件性能,使设计代码最大可能的反映设计者的 设计意图。 花些功夫在静态时序分析上既可以保证设计质量,也可以促使设计者再认识自己的代 码。这后一点,对于我们这些逻辑设计初学者来说,尤为重要。从门级(在 Altera 的 FPGA 器件中是 LE 级)再认识自己的代码,可以更深入地体会语言的特点,也可以更深入地理解 综合工具对语言的处理,对于设计能力的提高帮助很大。 TimeQuest 是 Altera 在 6.0 版的软件中加入的具备 ASIC 设计风格的静态时序分析 (STA)工具。通过初步试用和观看网络教程,我感觉 TimeQuest 确实比 Timng Analyzer 功能强大一些,而且使用界面比较友好,易于进行深入的时序约束和结果分析。 TimeQuest 采用 Synopsys Design Constraints(SDC)文件格式作为时序约束输入, 不同于 Timing Analyzer 采用的 Quartus Settings File(QSF)约束文件。这正是 TimeQuest 的优点:采用行业通用的约束语言而不是专有语言,有利于设计约束从 FPGA 向 ASIC 设计流 程迁移;有利于创建更细致深入的约束条件。 二二二二、、、、时序分析基本概念时序分析基本概念时序分析基本概念时序分析基本概念 以下内容译自 Quartus II Version 10.0 Handbook, Volume 3:Verification 的 SectionII 7.3:Timing Analysis Overview 部分。 TimeQuest 需要读入布局布线后的网表才能进行时序分析。读入的网表是由以下一系列 的基本单元构成的: 1. Cells:Altera 器件中的基本结构单元(例如,查找表、寄存器、IO单元、PLL、存 储器块等)。LE 可以看作是 Cell。 2. Pins:Cell 的输入输出端口。可以认为是 LE 的输入输出端口。注意:这里的 Pins 不包括器件的输入输出引脚,代之以输入引脚对应 LE 的输出端口和输出引脚对应 LE 的输入 端口。 3. Nets:同一个 Cell 中,从输入 Pin 到输出 Pin 经过的逻辑。特别注意:网表中连 接两个相邻 Cell 的连线不被看作 Net,被看作同一个点,等价于 Cell 的 Pin。还要注意: 虽然连接两个相邻 Cell 的连线不被看作 Net,但是这个连线还是有其物理意义的,等价于 Altera 器件中一段布线逻辑,会引入一定的延迟(IC,Inter-Cell)。 4. Ports:顶层逻辑的输入输出端口。对应已经分配的器件引脚。 5. Clocks:约束文件中指定的时钟类型的 Pin。不仅指时钟输入引脚。 6. Keepers:泛指 Port 和寄存器类型的 Cell。 7. Nodes:范围更大的一个概念,可能是上述几种类型的组合,还可能不能穷尽上述 几种类型。 下面这幅图给出了一个时序网表的示例,展示了基本单元中的一部分。 USER 线条 USER 线条 USER 线条 USER 线条 有了网表的 基本单元,我们就可以描述 TimeQuest 进行时序分析的对象:Edges。 Edges:Port-Pin,Pin-Pin,Pin-Port 的连接关系都是 Edges。注意,这里的 Pin-Pin 连接关系既包括 Cell 内部的连接(Net),也包括相邻 Cell 外部的 Pin-Pin 连接。 Edges 根据起止路径分为三类。 1. Clock paths:从 Clock Port 或内部生成的 clock Pin 到寄存器 Cell 的时钟输入 Pin。 2. Data paths:从输入 Port 到寄存器 Cell 的数据输入 Pin,或从寄存器 Cell 的数 据输出 Pin 到另一个寄存器 Cell 的数据输入 Pin。 3. Asynchronous paths:从输入 Port 到寄存器 Cell 的异步输入 Pin,或从寄存器 Cell 的数据输出 Pin 到另一个寄存器 Cell 的异步输入 Pin。 下面这幅图给出了三种不同的 Edges。 还要注意这样一组概念,这里的 edge 指的是时钟沿: 1. Launch Edge:前级寄存器发送数据对应的时钟沿,是时序分析的起点。 2. Latch Edge:后级寄存器捕获数据对应的时钟沿,是时序分析的终点。 下面这幅图给出了发送、捕获时钟沿的示意图。本例在 launch edge(0 ns)时寄存器 reg1 发送数据,在 latch(5 ns)时寄存器 reg2 捕获数据。 时序分析公式的基本公式: 内部寄存器到寄存器的路径内部寄存器到寄存器的路径内部寄存器到寄存器的路径内部寄存器到寄存器的路径((((internal registeinternal registeinternal registeinternal registerrrr----totototo----register pathsregister pathsregister pathsregister paths)))) (1)Data Arrival Time:Launch Edge + 前级寄存器 Clock path 的延时 + 前级寄存器 Cell 从时钟 Pin 到数据输出 Pin 的 Net 延时(uTco) + Data path 的延时。 (2)Data Required Time:Latch Edge + 后级寄存器 Clock path 的延时 (+ uTh)或(- uTsu)。 (3)Clock Arrival Time:Latch Edge + 后级寄存器 Clock path 的延时。 (4)Clock Setup Slack = Data Required Time – Data Arrival Time 从外部输入引脚到内部寄存器从外部输入引脚到内部寄存器从外部输入引脚到内部寄存器从外部输入引脚到内部寄存器((((path from an input port to a internal registerpath from an input port to a internal registerpath from an input port to a internal registerpath from an input port to a internal register)))) (1)Clock Setup Slack = Data Required Time – Data Arrival Time (2)Data Arrival Time = Launch Edge + Clock Network Delay +Input Maximum Delay + Pin-to-Register Delay (3)Data Required Time = Latch Edge + Clock Network Delay to Destination Register – μtSU. 从内部寄存器到从内部寄存器到从内部寄存器到从内部寄存器到输出输出输出输出引脚引脚引脚引脚((((path path path path fromfromfromfrom an internal register to an output port an internal register to an output port an internal register to an output port an internal register to an output port)))) (1)Clock Setup Slack = Data Required Time – Data Arrival Time USER 标注工具 数据到达时间 USER 标注工具 数据需要时间(建立or保持) USER 标注工具 时钟到达时间 USER 标注工具 建立时间SLACK USER 标注工具 外部器件到FPGA的时钟网络延时 USER 标注工具 FPGA输入引脚的最大延时 USER 标注工具 FPGA内部从输入引脚到目的寄存器的延时 USER 标注工具 就是数据应该在什么时候到达 USER 打字机 FPGA---->外部器件 (2)Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μtCO + Register-to-Pin Delay (3)Data Required Time = Latch Edge + Clock Network Delay – Output Maximum Delay of Pin 在下一篇分析建立时间和保持时间时,就必须用到上述三个概念。 三三三三、、、、时序分析基本公式时序分析基本公式时序分析基本公式时序分析基本公式 以下内容译自 Quartus II Version 7.0 Handbook, Volume 3:Verification 的 6-28: Clock Analysis 部分。 TimeQuest 静态时序分析的对象包括:寄存器和寄存器之间的路径、I/O 之间、I/O 和 寄存器之间的路径、异步复位和寄存器之间的路径。TimeQuest 根据 Data Arrival Time 和 Data Required Time 计算出时序余量(Slack)。当时序余量为负值时,就发生了时序违规 (Timing Violation)。 需要特别指出的一点是:由于时序分析是针对时钟驱动的电路进行的,所以分析的对 象一定是“寄存器-寄存器”对。在分析涉及到 I/O 的时序关系对时,看似缺少一个寄存器 分析对象,构不成“寄存器-寄存器” 对,其实是穿过 FPGA 的 I/O 引脚,在 FPGA 外部虚拟 了一个寄存器作为分析对象。 一、 建立时间(Setup Time)检查: USER 标注工具 时钟到源寄存器的延时(数据是在时钟下传输的,所以要加上时钟延时) USER 标注工具 数据在存储器内部传输的时间 USER 标注工具 寄存器到输出引脚的延时 USER 标注工具 应该是可对于外部器件来说的 USER 标注工具 到达外部器件的时钟延时 USER 标注工具 ?????????不是很明白,现阶段理解为FPGA的输出引脚最大延时 USER 线条 USER 线条 遵循的原则是信号从 Launch edge 开始计时,经过一系列的时序路径,到达后级寄存 器的数据输入 Pin 的速度不能太慢,时间不能太长,否则会侵占后级寄存器数据输入 Pin 相对于 Latch edge 的建立时间。刚好满足后级寄存器建立时间的数据到达时间是 Data Required Time(相对于 Latch edge 计算),实际的数据到达时间是 Data Arrival Time(相 对于 Launch edge 计算)。显然,在建立时间检查中,Data Arrival Time 要小于 Data Required Time,否则就会造成建立时间违规。也就是说,Data Required Time 是 Data Arrival Time 的最大值。二者之差就是建立时间的时序余量。 1)寄存器-寄存器(Register-to-Register)路径检查: Clock Setup Slack = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay Source Register +μtco + Register-to-Register Delay Data Required Time = Clock Arrival Time – μtsu – Setup Uncertainty Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 2)输入引脚-寄存器(Pin-to-Register)路径检查: Clock Setup Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + Input Maximum Delay of Pin + Pin-to-Register Delay Data Required Time = Clock Arrival Time – μtsu Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 3) 寄存器-输出引脚(Register-to-Pin)路径检查: USER 打字机 外部器件--->FPGA Clock Setup Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μ tco + Register-to-Pin Delay Data Required Time = Clock Arrival Time – Output Maximum Delay of Pin Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 从上面三组公式可以看出:Data Arrival Time 的前两项是相同的;Data Required Time 的第一项是相同的;Clock Arrival Time 的公式是相同的。 所以,第一组公式可以归纳如下: Clock Setup Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = 时钟到达前级寄存器的时刻 + 前级寄存器时钟到后级寄存器数 据输入的延迟 Data Required Time = 时钟到达后级寄存器的时刻 – 后级寄存器的建立时间 其中,后两个公式的第二项在其他情况下适当修改即可。 这就和一些中讲到时序分析时采用的公式一致了。 USER 矩形 report_timing -from [get_registers reg1] -to [get_registers reg2] -setup -npaths 1 -panel_name "Report Timing" 二、 保持时间(Hold Time)检查: 遵循的原则是信号从 Launch edge 开始计时,经过一系列的时序路径,到达后级寄存 器的数据输入 Pin 的速度不能太快,时间不能太短,否则会侵占后级寄存器数据输入 Pin 相对于上一个 Latch edge 的保持时间。刚好满足后级寄存器保持时间的数据到达时间是 Data Required Time(相对于 Latch edge 计算),实际的数据到达时间是 Data Arrival Time (相对于 Launch edge 计算)。显然,在保持时间检查中,Data Arrival Time 要大于 Data Required Time,否则就会造成保持时间违规。也就是说,Data Required Time 是 Data Arrival Time 的最小值。二者之差就是保持时间的时序余量。 相对于建立时间检查,保持时间检查稍微难懂一些。二者都是同步逻辑设计中对同一 个规则的不同解释:当前时钟沿发出的数据要在下一个时钟沿被正确捕获,不能晚,也不能 早。晚了,会造成下一个时钟沿的建立时间违规,当前时钟沿发送的数据不能被下一个时钟 沿捕获;早了,会造成上一个时钟沿发送的数据保持时间违规,上一个时钟沿发送的数据不 能被当前时钟沿正确捕获。 二者在计算公式上的区别在于 Slack 计算公式中减数与被减数关系。 1)寄存器-寄存器(Register-to-Register)路径检查: Clock Hold Slack = Data Arrival Time – Data Required Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μtCO + Register to Register Delay Data Required Time = Clock Arrival Time + μtH + Hold Uncertainty Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 2)输入引脚-寄存器(Pin-to-Register)路径检查: Clock Setup Slack Time = Data Arrival Time – Data Required Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + Input Minimum Delay of Pin + Pin to Register Delay Data Required Time = Clock Arrival Time + μtH Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 3) 寄存器-输出引脚(Register-to-Pin)路径检查: Clock Setup Slack Time = Data Arrival Time – Data Required Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μ tCO + Register to Pin Delay Data Required Time = Clock Arrival Time – Output Minimum Delay of Pin Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 需要注意的是,上面公式中的 Latch Edge 实际对应的是上一个 Launch Edge。所以, 当 Launch Clock 和 Latch Clock 是同一个时钟时,上述公式中的 Latch Edge 等于 0;当前 级和后级时钟不同时,还需要具体计算 Latch Edge 的取值。 report_timing -from [get_registers reg1] -to [get_registers reg2] -hold -npaths 1 -panel_name "Report Timing" 三、 恢复时间(Recovery Time)检查: 遵循的原则是异步控制信号变化的时刻不能介于寄存器的 Latch edge 和相应的建立时 间之间,否则会导致寄存器的建立时间违规,数据输出进入亚稳态。即从前级寄存器的 Launch edge 开始计时,经过一系列的时序路径,前级寄存器数据输出到达后级寄存器异步 控制 Pin 的速度不能太慢,时间不能太长,否则会破坏后级寄存器在 Latch edge 的数据建 立时间。该检查主要应用于异步控制信号由有效电平向无效电平转换的时刻,在该时刻破坏 数据建立时间会导致亚稳态;在异步控制信号由无效电平向有效电平转换的时刻破坏数据的 建立时间不会造成亚稳态。 从上述定义,可以得到和建立时间检查类似的公式。 1)寄存器-寄存器(Register-to-Register)路径检查: Recovery Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μ tCO + Register to Register Delay Data Required Time = Clock Arrival Time – μtSU Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 2)输入引脚-寄存器(Pin-to-Register)路径检查: Recovery Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Maximum Input Delay + Port to Register Delay Data Required Time = Clock Arrival Time – μtSU Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register report_timing -from [get_ports async_rst] -to [get_registers reg2] -recovery -npaths 1 -panel_name "Report Timing" 四、 移除时间(Removal Time)检查: 遵循的原则是异步控制信号变化的时刻不能介于寄存器的 Latch edge 和相应的保持时 间之间,否则会导致寄存器的保持时间违规,数据输出进入亚稳态。即从前级寄存器的 Launch edge 开始计时,经过一系列的时序路径,前级寄存器数据输出到达后级寄存器异步 控制 Pin 的速度不能太快,时间不能太短,否则会破坏后级寄存器在上一个 Latch edge 的 数据保持时间。该检查主要应用于异步控制信号由有效电平向无效电平转换的时刻,在该时 刻破坏数据保持时间会导致亚稳态;在异步控制信号由无效电平向有效电平转换的时刻破坏 数据的保持时间不会造成亚稳态。 从上述定义,可以得到和保持时间检查类似的公式。 1)寄存器-寄存器(Register-to-Register)路径检查: Removal Slack Time = Data Arrival Time – Data Required Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μ tCO of Source Register + Register to Register Delay Data Required Time = Clock Arrival Time + μtH Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 2)输入引脚-寄存器(Pin-to-Register)路径检查: Removal Slack Time = Data Arrival Time – Data Required Time Data Arrival Time = Launch Edge + Input Minimum Delay of Pin + Minimum Pin to Register Delay Data Required Time = Clock Arrival Time + μtH Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register report_timing -from [get_ports async_rst] -to [get_registers reg2] -removal -npaths 1 -panel_name "Report Timing" 五、多周期路径(Multicycle Paths)检查: 在上述的建立、保持时间检查中,都假设数据从 Launch edge 开始发送,在 Latch edge 被捕获;Launch edge 和 Latch edge 是相邻最近的一对时钟沿。在多周期路径检查中,仍 然采用 Launch edge 和 Latch edge 的概念;但是 Launch edge 和 Latch edge 不再是相邻的 一对时钟沿,而是间隔一定时钟周期的一对时钟沿,间隔的时钟周期个数由用户指定。 在同步逻辑设计中,通常都是按照单周期关系考虑数据路径的。但是往往存在这样的 情况:一些数据不需要在下一个时钟周期就稳定下来,可能在数据发送后几个时钟周期之后 才起作用;一些数据经过的路径太复杂,延时太大,不可能在下一个时钟周期稳定下来,必 须要在数据发送后数个时钟周期之后才能被采用。针对这两种情况针对这两种情况针对这两种情况针对这两种情况,,,,设计者的设计意图都设计者的设计意图都设计者的设计意图都设计者的设计意图都 是是是是::::数据的有效期在以数据的有效期在以数据的有效期在以数据的有效期在以 Lauch edgeLauch edgeLauch edgeLauch edge 为起始的数个时钟周期之后的为起始的数个时钟周期之后的为起始的数个时钟周期之后的为起始的数个时钟周期之后的 Latch edgeLatch edgeLatch edgeLatch edge。。。。这一设计意这一设计意这一设计意这一设计意 图不能够被时序分析工具猜度出来图不能够被时序分析工具猜度出来图不能够被时序分析工具猜度出来图不能够被时序分析工具猜度出来,,,,必须由设计者在时序约束中指定必须由设计者在时序约束中指定必须由设计者在时序约束中指定必须由设计者在时序约束中指定;;;;否则否则否则否则,,,,时序约束工时序约束工时序约束工时序约束工 具会按照单周期路径检查的方式执行具会按照单周期路径检查的方式执行具会按照单周期路径检查的方式执行具会按照单周期路径检查的方式执行,,,,往往会误报出时序违规往往会误报出时序违规往往会误报出时序违规往往会误报出时序违规。。。。 不设置多周期路径约束的后果有两种:一是按照单周期路径检查的结果,虚报时序违 规;二是导致布局布线工具按照单周期路径的方式执行,虽然满足了时序规范,但是过分优 化了本应该多个周期完成的操作,造成过约束(Over-Constrain)。过约束会侵占本应该让 位于其他逻辑的布局布线资源,有可能造成其他关键路径的时序违规或时序余量变小。 在多周期路径的建立时间(Setup Time)检查中,TimeQuest 会按照用户指定的周期数 延长 Data Required Time,放松对相应数据路径的时序约束,从而得到正确的时序余量计 算结果;在保持时间(Hold Time)检查中,TimeQuest 也会相应地延长 Data Required Time, 不再按照单周期路径的分析方式执行(不再采用 Launch edge 最近的时钟沿,而是采用 Latch edge 最近的时钟沿),这就需要用户指定保持时间对应的多周期个数。TimeQuest 计算 Hold Time 的缺省公式等同于 PrimeTime。PrimeTime 会采用建立时间检查对应时钟沿的前一个时 钟沿进行保持时间检查,并多会造成保持时间检查违规,需要用户指定保持时间检查对应的 时钟沿为 Launch edge 最近的时钟沿。(西电出版社《数字 IC 系统设计》p189) TimeQuest 缺省的 Hold Time 检查公式是需要用户修改的——针对 Setup Time 多周期 路径的设置也会影响到 Hold Time 的检查。究其原因,多周期路径是为了解决信号传播太慢 的问题,慢到一个周期都不够,所以要把 Setup Time 的检查往后推几个周期——扩大 Setup Time 检查的时间窗口。而 Hold Time 检查信号是否传播得太快,如果把检查时刻往后推, 就缩小了 Hold Time 检查的时间窗口。 “信号跳变抵达窗口”:对 Latch 寄存器来说,从 previous 时钟对应的 Hold Time 开 始,到 current 时钟对应的 Setup Time 结束。 “信号电平采样窗口”:对 Latch 寄存器来说,从 current 时钟对应的 Setup Time 开 始,到 current 时钟对应的 Hold Time 结束。 Launch 寄存器必须保证驱动的信号跳变到达 Latch 寄存器的时刻恰好处于“信号跳变 抵达窗口”内,才能保证不破坏 Latch 寄存器的“信号电平采样窗口”。 时序检查的目的就是确认信号跳变发生在“信号跳变抵达窗口”内,而不会发生在“信 号电平采样窗口”内。 多周期路径的设置是通过延后 Setup Time 检查的时刻,扩大了“信号跳变抵达窗口”, 放松了时序约束。通过窗口的概念,也很容易理解延后 Hold Time,就会缩小“信号跳变抵 达窗口”。 背景资料: Specify multicycle set-up paths constraints Specifying multicycle hold requirements constraints 随文附上一个 rar,可以采用上面的命令执行并观察结果。该实例改编自 Altera 的 multicycle_exception。 该实例由两个级联寄存器构成。 学习时序分析一定要学会察看 Technology Map Viewer。 在前面的一篇文章中,给出了建立时间检查的基本公式: 1)寄存器-寄存器(Register-to-Register)路径检查: Clock Setup Slack = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay Source Register +μtco + Register-to-Register Delay Data Required Time = Clock Arrival Time – μtsu – Setup Uncertainty Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 2)输入引脚-寄存器(Pin-to-Register)路径检查: Clock Setup Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + Input Maximum Delay of Pin + Pin-to-Register Delay Data Required Time = Clock Arrival Time – μtsu Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 3) 寄存器-输出引脚(Register-to-Pin)路径检查: Clock Setup Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μ tco + Register-to-Pin Delay Data Required Time = Clock Arrival Time – Output Maximum Delay of Pin Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register 在前两组公式中,Data Required Time 计算公式的第二项都是 -uTsu。 但是在 TimeQuest 中对两级级联寄存器的时序分析中,执行 report_timing -from [get_ports data_in] -to [get_registers reg1] -setup -npaths 1 -panel_name "Report Timing"却得到了如下图所示的结果,请注意图中 Data Required Time 的第三行中 reg1 的 uTsu 取值: 在 Incr 一列中,reg1 的 uTsu 取值为 0.036ns,在计算公式中作为正数值计入了 Data Required Time 的结果中。 发现这一现象以后,经过分析,我认为有两种可能: 1. 计算公式正确,但是 TimeQuest 计算错误。 2. 计算公式正确,uTsu 的真实取值是负数,在上图中负负为正,TimeQuest 计算正确。 我一直倾向于后一种可能,毕竟 TimeQuest 是 Altera 的一个招牌工具,这样明显的错 误早就该解决了。但是从 Setup 时间的定义上看,uTsu 又不可能是负值。 后一种可能虽然更合理,但是又没有充足的证据这一点,这一数据是 Altera 给定 的,原值是正是负无从知晓,在 help 里查也没查到,所以我一直对于 TimeQuest 存有怀疑。 直到今天,我偶然想起前些天计算一个输出引脚的建立时间余量时,在同样的位置看 到过一个取值为负的数据。这样看来,Incr 一列中,不是只能有正数值,也可以有负数值。 如果这个负值是我指定的,在 Incr 一列中出现负值就不奇怪了;但是我很清楚地记得, 没有什么特殊条件导致我会在时序约束中采用负值。那么,这个负号应该是 TimeQuest 在计 算中刻意加入的。负号可以加入,自然也可以去除,上图中 uTsu 的负号就可能是 TimeQuest 去除的。 下面,让我们通过输出引脚的建立时间检查(公式 3)来证明一下: 仍然以两级级联寄存器为例,计算公式重写如下: 3) 寄存器-输出引脚(Register-to-Pin)路径检查: Clock Setup Slack Time = Data Required Time – Data Arrival Time Data Arrival Time = Launch Edge + Clock Network Delay to Source Register + μ tco + Register-to-Pin Delay Data Required Time = Clock Arrival Time – Output Maximum Delay of Pin Clock Arrival Time = Latch Edge + Clock Network Delay to Destination Register Data Required Time 中第二项是可以人为指定的。我们通过 set_output_delay -add_delay -max -clock clk_in 2.000 [get_ports data_out]来指定 Output Maximum Delay of Pin 的取值为 2ns。 执行 TimeQuest 建立时间检查命令 report_timing -from [get_registers reg2] -to [get_ports data_out] -setup -npaths 1 -panel_name "Report Timing"。得到如下图所 示的结果: 可以看到,我们在时序约束中指定的输出引脚延时 2ns 被作为负数加入了 Data Required Time 的计算公式中。这样一来,TimeQuest 的计算和上面的计算公式就一致了。 同理,在 reg1 的建立时间余量计算中,uTsu 原本是负值,经过计算公式中的一次负号 变换,就作为正数加入了 Data Required Time 的计算公式中。 这样看来,在 Altera 的器件中,uTsu 是作为负值提供给 TimeQuest 进行计算的。这一 负值是器件本身的特性,还是为了补偿计算误差的需要有意加入的,还需要进一步的考证。 相关链接: 请问负的 hold 时间和建立时间一般由什么引起的? 优化逻辑分析仪对高速系统的建立/保持时间的调节 google 上搜索 negative setup time could anybody give me a clear picture of negative setup and negative hold ? Negative setup and Negative hold Negative setup time and postive hold time? Method of HDL simulation considering hard macro core with negative setup/hold time 上午给 Altera 发了一个 Service Request,下午就得到了回复: 但是这个回复没有解决我的疑惑,还要继续问: 隔了一个周末,正当我为自己是否说错了话而忐忑时,回复出来了。 感谢 Roger,TimeQuest 在这一点上是没错的。负的建立时间是特定时序模型的特点, 模型在器件上不同的位置具有不同的特征参数。负的建立时间和寄存器靠近引脚有关。我们 不必关心,交给工具去处理好了。 TimeQuestTimeQuestTimeQuestTimeQuest 就一定要搞定就一定要搞定就一定要搞定就一定要搞定————————时序约束和分析流程时序约束和分析流程时序约束和分析流程时序约束和分析流程 TimeQuest 的约束和分析流程是与 Quartus II 的编译流程紧密结合的。 TimeQuest 进行约束和分析的对象都来自 Quartus II 编译流程各阶段的编译结果。二 者对应关系如下: 1. 分析与解析 Start Analysis & Elaboration -> RTL Viewer Quartus II 编译的第一步是纯粹的“逻辑综合”,虽然经过了逻辑优化,但是生成的 数据库并不对应 FPGA 器件的物理结构,生成的网表中节点的名称也不与 FPGA 器 件的 Cell 名称对应。由于 TimeQuest 进行约束和分析的对象是 FPGA 器件的底层物理单元,所以这一 步编译过程完成后不能进行 TimeQuest 时序约束和分析。 这一步在 TimeQuest 操作流程中没有实际意义。 这一步在 TimeQuest 操作流程中没有实际意义。 2. 分析与综合(与映射) Start Analysis & Synthesis -> Technology Map Viewer(Post-Mapping) -> Create Timing Netlist(Post-Map), Specify Timing Constraints, Early Tim ing Estimate 这一编译步骤的名称虽然是“分析与综合”,但是在“综合”后还进行了一步“映射” (Mapping)。Start Analysis & Synthesis = Start Analysis & Elaboration + Mappin g。这一步完成后生成的数据库已经对应了 FPGA 器件的物理结构,可以供 TimeQuest 进行时 序约束之用。由于“映射”过程实际是预先布局过程,“映射”后的数据库包含了 FPGA 底 层 Cell 的位置信息和 Cell 本身的时序信息,TimeQuest 根据这一数据库生成的时序网表中 的节点与 FPGA 底层 Cell 是对应的。由于预先布局尚未执行时序驱动的布局和布线工作,也 没有读入引脚位置等约束信息,这时的网表不包含布线信息,而且布局结果也会在 P&R 后发 生变化,所以不能获得准确的时序分析结果。在这一步进行的时序分析是 Early Timing Es timate,只是根据 Cell 本身的时序信息和由预布局结果得来的 Cell 之间的位置关系进行的 “估计”。 这一步在 TimeQuest 操作流程中的意义在于可以进行时序约束和时序预估。 3. 适配(P&R) Start Fitter -> Technology Map Viewer, Chip Planner -> Create Timing Netlist(Post-Fit), Generate Timing Reports 这一步骤的名称“适配”对应的操作是“布局和布线”(P&R)。这一步骤是在上一个 步骤获得时序约束信息后进行的,Fitter 会努力按照时序约束的要求进行布局和布线优化。 这一步骤获得的数据库包含了 Cell 的位置、Cell 本身的时序信息和 Cell 之间连线资源的 分布和时序信息,TimeQuest 根据这一数据库生成的网表就是 FPGA 最终实现结果的时序网 表,可以反映最终实现结果的时序特性。此时进行的时序分析才是最准确的。 这一步在 TimeQuest 操作流程中的意义在于可以进行最终的时序分析,并检查适配结果 是否满足了时序约束的要求。(如文章开头引用的 Quartus II Help 文档给出的所示, 在这一步才执行时序约束也是可以的,但是如果不指出在第 2步就可以进行时序约束,会产 生“先有鸡还是先有蛋”的矛盾,这一点就是 Altera 文档误导读者之处。此外,在这一步 才执行时序约束会重复执行 P&R 操作,浪费编译时间。) 在上述流程的每一步中,都有 Netlist Viewer 与编译和时序分析的对应关系。根据这 一对应关系,设计者可以借助 Netlist Viewer 工具观察编译生成的网表,间接观察和分析 TimeQuest 生成的对应的时序网表。Netlist Viewer 实现了 TimeQuest 时序约束对象的可视 化。 在上述操作流程的最后一步,还可以通过 Chip Planner 直观察看设计在 FPGA 中的实现 情况,并且与 TimeQuest 的时序分析报告一一对应。Chip Planner 实现了 TimeQuest 时序 分析结果的可视化。 相关链接:在线观看 Chinese Version: Validating Performance with the TimeQues t Static Timing Analyzer,离线观看 Chinese Version: Validating Performance with the TimeQuest Static Timing Analyzer 关键路径中的时序分析工具对设计成败至关重要 附图:TimeQuest 操作流程。 TimeQuestTimeQuestTimeQuestTimeQuest 就一定要搞定就一定要搞定就一定要搞定就一定要搞定————————图解图解图解图解 Setup TimeSetup TimeSetup TimeSetup Time 时序余量计算时序余量计算时序余量计算时序余量计算 一图胜千言。Quartus II 7.2 版的 TimeQuest Timing Analysis 工具中新添加了“波 形察看”功能,可以帮助设计者更直观地理解特定路径上寄存器之间的时序关系。 对于时序分析初学者来说,理解时序分析的公式与实际器件的物理特性之间的对应关 系是一大难点,这一难点也是掌握时序分析的关键点。借助 TimeQuest 的 Waveform 视 图,再结合 Quartus 的其他视图工具,理解这一难点就容易多了。 下面就是一个简单的 Setup Time 时序分析的图解: 图一:查看 RTL Viewer。 图中 start_sync 引脚是本设计的输入引脚。之所以命名为_sync,是因为在这个简化 了的局部的设计中,start_sync 虽然是 FPGA 的输入引脚,但是可以认为在 FPGA 外部驱动 这一引脚的电路是与本设计同步的。对于 start_sync 信号,只要设置适当的 input_delay 约束,就可以进行时序分析。另外,在图中还有一个引脚是 ack_async,之所以命名为_async, 是因为该引脚是一个异步输入引脚,在 FPGA 外部驱动这一引脚的电路与本设计的
/
本文档为【TimeQuest就一定要搞定完整版】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索