FPGA时序分析与时序约束(五)——使用Timing Analyzer进行时序分析与约束

2024-01-21 23:20

本文主要是介绍FPGA时序分析与时序约束(五)——使用Timing Analyzer进行时序分析与约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        Quartus的安装路径下会自带有例程,通过fir_filter进行学习如何使用Timing Analyzer进行时序分析与约束。

1.1 创建时序网表

        打开fir_filter并进行综合后可通过菜单栏Tool->Timing Analyzer或工具栏按钮运行Timing Analyzer。

        根据前面提到的,时序分析工具需要网表来执行时序分析,因此先创建Post-Map时序网表。在菜单栏Netlist->Create Timing Netlist,选择Post-Map会自动生成Tcl命令。

1.2  时钟约束

         时序约束可以分为四个主要步骤,即时钟约束(Create Clock)、输入/输出接口约束(Input/Ouput Delays,I/O约束)、时钟分组和跨时钟约束(Clock Groups and CDC)、时序例外约束(Timing Exceptions)。 

        因此对工程进行时钟约束,通过RTL图可以看出有两个时钟,clk是50%占空比的50MHz时钟,clkx2是60%占空比的100MHz时钟。

        在菜单栏Constraints->Create Clock,出现Create Clock对话框。在该对话框中设置时钟名称、时钟周期以及上升沿和下降沿的时刻,然后在Target栏选择对应的端口。当进行设置时,SDC ommand也会随之列出等效的SDC约束命令,也可以通过输入该命令来创建时钟约束。默认情况下,如果未使用 -Waveform egdes选项,那么create clock命令就会默认 50/50 的占空比。

        clk为50MHz时钟,时钟周期为1/50MHz=20ns。

        clkx2为100MHz时钟,时钟周期为1/100MHz=10ns,60%占空比则上升沿在0ns、下降沿在6ns。

        创建时序约束后,需要在菜单栏Netlist->Update Timing Netlist对时序网表进行更新(task工具栏也可以),将所有时序要求应用到时序网表。只要应用了新的时序约束,就必须对时序网表进行更新。

        在为设计指定时钟约束并更新时序网表后,需要创建SDC文件并将上面的约束保存到SDC文件中,约束不会自动保存,因此在菜单栏Constraints->Write SDC File,在Write SDC File对话框输入文件名称并保存。

        最后生成SDC约束报告(SDC Assignments Report),SDC约束报告了在指定设计中包含的所有时序约束,在菜单栏Report->Diagnostic->Report SDC;然后生成时钟总结报告( Clocks Summary Report),总结设计中所有的时钟,在菜单栏Report->Diagnostic->Report Clocks。

        生成时钟传输报告 (Clock Transfers Report),使用Report Clock Transfers命令生成一个报告来验证所有的时钟到时钟传输都是有效的。这种报告包含设计中所有的时钟到时钟传输。在菜单栏Report->Diagnostic->Report Clock Transfers。Clock Transfers报告表明在clk (源时钟) 和clkx2(目的时钟) 之间存在跨时钟域路径,共有16条路径,其中clk为源节点提供时钟,clkx2为目的节点提供时钟。 

1.3 伪路径约束

        在 fir filter 设计中,不必分析clk至clkx2的时钟传输,因为它们是忽略路径。通过以下方式声明 clk 至 clkx2 的路径为伪路径:

1.在 Clock Transfers 报告中,在 From Clock 列选择clk,右击并选择“Set FalsePaths”这个命令表明将所有由 clk 驱动的源寄存器到由 clkx2 驱动的目的寄存器之间的路径设为伪路径。

2.使用set_clock groups声明两个时钟域之间的路径为伪路径。例如,set clock groups -asynchronous -group [get clocks clk] -group [get clocks clkx2]该命令表明clk到clkx2以及clkx2到 clk的所有路径为伪路径。

        当完成该程序后,TimeQuest Timing Analyzer变成黄色(Out of Date)表明当前Clock Transfers报告是过时的,表明报告面板不包含反映Timing Analyzer中当前状态的约束的结果。

        而添加新的时序约束(设置伪路径),也需要UpdateTiming Netlist更新时序网表。然后更新报告面板,右击报告面板列表中任何过时(out-of-date)的报告,并选择 Regenerate all。

        重新生成报告后,可以看到在SDC Assignments报告栏多了一个“Set False Path”约束。同时打开 Clock Transfers 报告可以看到由clk到clkx2的路径被声明为伪路径,意味着时序分析工具将不再分析这些路径(例外约束)。

        在指定设计中所有的时钟约束和伪路径后,通过Write SDC File将时序约束和例外保存到 SDC 文件,然后将SDC文件添加到工程中。在Quartus->Assignments->Settings->Files->...,找到保存的sdc文件并添加。

        工程全编译后就能看到Timing Analyzer生成的报告。

1.4 输入输出约束 

        编译完成后,运行 TimeQuest Timing Analyzer,Create Timing Netlist、 Read SDC和 Update Timing Netlist命令依次在Tasks面板中执行,自动生成时序网表,读取 SDC 文件并更新时序网表。

        点击Report Setup Summary生成建立总结报告 (Summary Setup),对设计中的所有时钟进行检查,来验证没有出现违规。时钟建立检查确保每个寄存器至寄存器的传输不违反 SDC 指定的时序约束。 clkx2时钟没有出现在 Summary(Setup)报告中,因为clk 和 clkx2之间所有的时钟路径已经声明是伪路径。此外,fir filter设计不包含任何由 clkx2 来驱动的寄存器到寄存器的路径。 Summary(Setup) 报告中的Slack列表明clk能满足约束,并有10.989ns的余量。End Point TNS列是指定时钟域中所有的总负裕量 (TNS,Total Negative Slack) 的总和。使用这个值来测量指定时钟域中失败路径的总数。

        点击 Report Hold Summary,在设计中生成一个时钟保持检查总结。Summary (Hold) 报告表明 clk 时钟节点符合时序约束,并有0.326ns的余量。

        在执行全编译之前,指定所有的时序约束和例外,这样可以确保Fitter优化设计中的关键路径,使用Report Unconstrained Paths命令验证已经约束fir filter设计中的所有路径。 如下图所示,Unconstrained Paths 总结报告表明有大量的未约束路径,并详细介绍了这些路径的类型。要充分约束此设计,需要利用由Timing Analyzer所提供的整套SDC约束。

        总结报告中的未约束路径集中在Input/0utput Ports上,因此可以使用Set Input Delay和Set Output Delay需要约束所有的输入和输出端口。

        在菜单栏Constraints->Set Input Delay

        在菜单栏Constraints->Set Output Delay

        通过Write SDC File将输入输出延迟约束保存到 SDC 文件中,更新时序网表,重新生成Unconstrained Paths Summary,验证所有设计中的端口都已经加上了约束。

        Timimg Analyzer还可以对设计的时钟或节点生成特定的时序检查报告。在Tasks面板中,双击 Report Timing,出现Report Timing对话框。

        对话框设置完成后点击“Report Timing”,会生成一个报告。报告会列出10条最差路径,这些路径均由clk驱动目的寄存器,并且目的寄存器为 acc:inst3 result。

        在“Summary of Paths”一栏列出了这些路径的起点和终点,以及启动时钟和锁存时钟等信息,其中第一列“Slack”指示了这些路径是否满足时序要求,以及满足或违反时序要求的程度。当Slack 为正时,表示满足时序要求:Slack为负时表明该路径不满足时序要求,那么就需要针对该路径进行修复。
        点击 Summary of Paths 中的任意一个时序路径可以在下方看到它的详细信息,比如在“Data Path”中列出了该路径中信号到达各个节点的延迟信息。时序分析工具通过比较数据到达时间(Data Arrival Times) 和数据要求时间 (Data Require Times) 来验证电路性能并检测可能出现的时序违规。“Waveform”一列给出了时序路径的波形图,从图中可以更直观
的比较各个时序参数。
        Report Timing 默认分析的是建立时间,同样可以选择分析其他类型(Analysis Type),比如保持时间、恢复/移除时间等。

参考文献:

正点原子FPGA静态时序分析与时序约束_V2.3
Intel Quartus Prime Standard Edition 用户指南: Timing Analyzer

这篇关于FPGA时序分析与时序约束(五)——使用Timing Analyzer进行时序分析与约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/631148

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca