时间:2024-07-27 来源:网络搜集 关于我们 0
欢迎FPGA工程师加入官方微信技术群
点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群
注:零基础学会FPGA时序约束。本期推送配套相关独家教学视频,关注公众号,后台回复“时序分析培训”或留下您的邮箱,即可获取视频链接。视频内容是由团队郑圆圆同学讲解,欢迎批评指正。以下是节选的视频片段。
时序分析基础知识
No.1
什么是时序分析?
时序分析本质上就是一种时序检查,目的是检查设计中所有的D触发器是否能够正常工作,也就是检查D触发器的同步端口(数据输入端口)的变化是否满足建立时间要求(Setup)和保持时间要求(Hold);检查D触发器的异步端口(异步复位端口)的变化是否满足恢复时间要求(Recovery)和移除时间要求(Removal)。No.2
时序分析有哪些类型?
时序分析包括静态时序分析(STA)和动态时序分析。 动态时序分析:将布局布线生成的布线延迟信息反标注到门级网表中进行仿真,检查是否存在时序违例。此时的仿真包括门延迟和布线延迟信息,能够较好反应芯片的实际工作情况。因为不可能产生完备的测试向量,覆盖门级网表中的每一条路径。因此在动态时序分析中,无法暴露一些路径上可能存在的时序问题。静态时序分析:采用穷尽分析方法来提取出整个电路存在的所有时序路径,计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足时序要求,通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。它不需要输入向量就能穷尽所有的路径,且运行速度很快、占用内存较少,不仅可以对芯片设计进行全面的时序功能检查,而且还可利用时序分析的结果来优化设计,因此静态时序分析已经越来越多地被用到数字集成电路设计的验证中。No.3
时序分析使用的工具有哪些?
> 静态时序分析使用的工具:①Xilinx Vivado Intergreated Design Environment Time Engine②Altera Quartus II Timequest③DC等> 动态时序分析使用的工具:①Mentor Modelsim ②Cadence NC-Verilog ③Sysnopsys VCSNo.4
静态时序分析之前的准备工作
撰写基本的时序约束文件,告知时序引擎一些必要的信息(比如时钟,输入输出延时等)。若没有正确的时序约束,那么时序分析的结果是没有意义的。No.5
时序分析中的常用术语
> 源时钟(Source Clock/Launch Clock,也称为发起时钟)> 目的时钟(Destination Clock/Capture Clock,也称为捕获时钟)> 发起沿(launch edge,源时钟产生数据的有效时钟沿)> 捕获沿(capture edge,目的时钟捕获数据的有效时钟沿)发起沿通常在0ns,捕获沿通常在下一个发起沿,发起沿和捕获沿通常相差一个时钟周期。No.6
一条普通时序路径的三要素
源时钟路径:从源时钟的源节点(通常是FPGA的时钟输入引脚)到源寄存器的时钟端口的路径。当时序路径的起点是FPGA输入端口时,该时序路径是没有源时钟路径的。
数据路径:从时序路径的起点到时序路径的终点之间的数据传播路径。时序路径的起点可以是源寄存器的时钟端口或FPGA的输入端口,时序路径的终点可以是目的寄存器的输入端口或FPGA的输出端口。目的时钟路径:从目的时钟的源节点(通常是FPGA的时钟输入引脚)到目的寄存器的时钟端口的路径。当时序路径的终点是FPGA的输出端口时,该时序路径是没有目的时钟路径的。No.7
FPGA中常见的四种时序路径
第一种,从FPGA的输入端口到目的寄存器的数据输入端口 。> 数据由Board clock发起并在FPGA外部产生;> 数据经过Input Delay的延迟后到达FPGA的输入端口;> 数据经过FPGA的Internal Delay后到达由目的时钟驱动的目的寄存器。这种路径是没有源时钟路径的,用户需要约束Input Delay和时钟来告知时序引擎必要信息,时序引擎才能正确的分析这种路径。第二种,从源寄存器的时钟端口到目的寄存器的数据输入端口。> 数据由源时钟发起并在FPGA内部产生;> 数据经过Data Path Delay后到达由目的时钟驱动的目的寄存器。这种时序路径是最常见的,用户需要约束源时钟和目的时钟告知时序引擎必要的信息,时序引擎才能正确的分析这种时序路径。第三种,从源寄存器的时钟端口到FPGA的输出端口。> 数据由源时钟发起并在FPGA内部产生;> 数据经过Internal Delay后到达输出端口;> 数据经过Output Delay后被Board Clock捕获到。这种路径是没有目的时钟路径的,用户需要约束Output Delay和时钟来告知时序引擎必要信息,时序引擎才能正确的分析这种路径。第四种,从FPGA的输入端口到FPGA的输出端口。> 数据横穿FPGA,没有经过任何触发器,这种路径也叫in-to-out path,约束输入和输出延时的参考时钟可以使用虚拟时钟。这种路径中只有数据路径,用户需要约束Input Delay和Output Delay,告知时序引擎必要的信息,时序引擎才能正确的分析这种时序路径。Setup检查
No.1
时序引擎如何进行Setup检查?
①确定建立时间要求(确定用于建立时间分析的发起沿和捕获沿)时序引擎会找出发起时钟和捕获时钟的最小公共周期,然后在最小公共周期内找到所有发起时钟沿和捕获时钟沿的所有可能的情况,并在所有可能的情况中挑选出最小的建立时间需求(大于0),从而确定了Launch edge和Capture edge。No.2
Setup分析实例
> Data Arrival time = lauch edge + Tclka + Tco + Tdata(Tlogic+Tnet)No.3
根据公式分析哪些因素会导致Setup Slack为负呢?
> Setup Slack = (Capture edge – Launch edge)+ (destination clk delay – source clk delay)- Setup time - clk uncertainty – datapath delay > Setup Slack = Setup Requirement(一定大于0) + clk skew – Tsu – Tclk uncertainty – Tlogic – Tnet - Tco① Setup Requirement 与实际情况不符建立时间需求过小,这种情况通常会在同步跨时钟域路径中出现,在同步跨时钟域路径中的源时钟频率与目的时钟频率的相位关系虽然是已知的,但是时序引擎默认选择的捕获沿通常都是错误的,需要用户通过多周期路径约束的方式手动修正建立时间需求。比如下图中,两个同频不同相的同步时钟,时序引擎默认选择的捕获沿是目的时钟第二个上升沿,导致建立时间需求非常小,最终肯定会导致时序违例。Holdup检查
No.1
时序引擎如何进行Holdup检查?
①确定保持时间要求(确定发起时钟沿和捕获时钟沿)保持时间要求是以建立时间要求为基础的,保持时间要求有两种: > 当前建立时间的发起沿产生的数据不能被当前建立时间的捕获沿的前一个有效沿捕获>当前建立时间发起沿的下一个有效沿产生的数据不能被当前建立时间的捕获沿捕获No.2
Holdup分析实例
> Data Arrival time(new data) = lauch edge + Tclka + Tco + Tdata(Tlogic+Tnet) > Data Require time = capture edge + Tclkb + Th > Hold up slack = Data Arrival time - Data Require timeNo.3
根据公式分析哪些因素会导致Holdup Slack为负呢?
> Holdup Slack = (lauch edge - capture edge) + (Tclka – Tclkb) + Tco + Tdata(Tlogic+Tnet) -Th > Holdup Slack = Tco + Tdata(Tlogic+Tnet) -Th - Holdup Requirement - clk skew Hold up Slack为负的情况比较少见,当Setup Slack有较大裕量时,通常工具会自动插入延时来增加Hold up Slack。①保持时间需求大于0(通常由时序引擎选择错误的捕获沿导致)②时钟歪斜大于300ps(通常由时钟路径上的组合逻辑导致) ③Th过大(通常由时序路径终点为Block导致)Recovery检查
No.1
时序引擎如何进行Recovery检查?
No.2
时序引擎如何进行Removal检查?
时序约束
时序引擎能够正确分析4种时序路径的前提是,用户已经进行了正确的时序约束。时序约束本质上就是告知时序引擎一些进行时序分析所必要的信息,这些信息只能由用户主动告知,时序引擎对有些信息可以自动推断,但是推断得到的信息不一定正确。> 第一种路径需要约束Input_delay;> 第二种路径需要约束时钟;> 第三种路径需要约束output_delay;> 第四种路径需要约束Max_delay/Min_delay;时钟约束
No.1
时钟约束类型首先用户必须要正确的约束时钟,时序引擎才能根据时钟信息进行各种时序检查。用户约束时钟时,一般有两种类型的时钟需要约束。 > 主时钟(Primary Clock)主时钟(Primary Clock)有两种类型:第一种是从FPGA的全局时钟输入引脚输入的时钟;第二种是从高速收发器输出给用户的恢复时钟> 生成时钟(Generated Clock)生成时钟(Generated Clock)有两种类型:第一种是由FPGA的专用时钟管理模块(PLL/MMCM)产生的时钟(这种时钟可以由时序引擎自动推断出来);第二种是由用户通过LUT或寄存器产生的时钟(这种时钟必须由用户手动约束)。①主时钟(Primary Clock)约束使用Create_clock进行时序约束> 第一种是从FPGA的全局时钟输入引脚输入的时钟:全局时钟输入引脚是sysclk,时钟周期10ns,占空比50%,相移0度。No.2
两个时钟的关系①同步时钟(synchronous clock) 两个时钟之间的相对相位关系是固定的(两个时钟来源于同一个Primary clock),并且这两个时钟的频率的最小公共周期是个整数。比如一个生成时钟(200M)和该生成时钟的Master_clk(100M)之间就属于同步时钟关系,因为这两个时钟的相位关系肯定是确定的,并且可以找到两个时钟的最小公共周期。通常情况下,一个Primary Clock和它产生的生成时钟之间都属于同步时钟关系,除非找不到最小公共周期。属于同步时钟关系的两个时钟之间的路径是可以进行时序分析的。②异步时钟( asynchronous clock ) 两个时钟之间的相对相位关系不确定。比如FPGA上两个晶振分别产生两个Primary clock(相对相位关系不固定),这两个Primary clock分别从FPGA的两个全局时钟引脚输入给两个MMCM,由两个MMCM分别产生的生成时钟之间属于异步时钟。一般情况下,不同的Primary clock之间都属于异步时钟,这些Primary clock分别产生的生成时钟之间也属于异步时钟关系。 属于异步时钟关系的两个时钟之间的路径无法进行正确的时序分析。一般情况下,如果用户不通过时钟分组对时钟之间的关系进行约束,时序引擎会默认所有的时钟之间都属于同步时钟关系。③不可扩宽的时钟(unexpandable clock)对于这类时钟,时序引擎无法在1000个时钟周期内找到两个时钟的公共周期,时序引擎就会从这1000个时钟周期中找到建立时间需求最差的情况,并进行时序分析,然而它不一定FPGA实际允许过程中建立时间需求最差的情况,因为在1000个时钟周期外可能还会有建立时间需求更差的情况,这样一来,时序引擎的分析结果就无法保证该路径一定不会出现问题,所以时序引擎的分析结果也就变的无意义。比如说由同一个Primary Clock驱动的两个MMCM的生成时钟分别是clk0(5.125ns)和clk1(6.666ns),虽然它们的相对相位关系是固定的,但是时序引擎无法保证对两个时钟之间路径的分析属于最差情况,这种情况和异步时钟之间的时序分析类似,时序分析的结果都看起来正常,但是这个结果确是不可信的。所以对这种时钟的处理方式与处理异步时钟是相同的,用户都需要进行跨时钟域的操作。总结:异步时钟和不可扩展的时钟之间的路径都无法进行正确的时序分析,所以在时序分析之前,需要使用set_clock_group对时钟进行分组,从而将这些无法进行正确时序分析的路径忽略掉。No.3
时钟分组实例> 第一个Primary clock clk0从FPGA的全局时钟引脚进入了一个MMCM,MMCM生成了两个生成时钟userclk,itfclk > 第二个Primary clock clk1是一个高速收发器输出的恢复时钟,将该恢复时钟输入进一个MMCM,MMCM生成了两个生成时钟gtxclkrx, gtxclktxInput延时约束
Output延时约束
No.1
什么是Input delay?如何计算它?如何约束它?
Input delay概念No.2
什么是Output delay?如何计算它?如何约束它?
Output delay概念Multicycle约束
No.1
为什么要进行Multicycle约束?时序引擎默认情况下会在建立时间需求/保持时间需求最差的情况下进行时序分析,而时序引擎选择的这种需求不一定是用户真正希望的,而且时序引擎默认选择的这种需求是非常严苛的,甚至是根本无法满足的。此时就需要用户进行Multicycle约束,手动修改建立时间需求/保持时间需求。用户希望放松某些路径的约束力度,就可以通过Multicycle约束调整建立时间需求/保持时间需求。 使用set_multicycle_path命令进行约束No.2
如何进行正确Multicycle约束?注:使用set_multicycle_path命令①在源时钟和目的时钟相同的情况下进行Multicycle约束Falsepath约束
No.1
什么样的路径属于FalsePath?注:使用set_false_path命令FalsePath路径是指该路径在拓扑结构中的确存在,但是满足以下任一条件的路径:①在实际运行过程中,该路径不工作。②该路径不需要进行时序分析。比如:已经做了两级触发器同步的跨时钟域路径 只在上电时工作一次的寄存器异步复位路径或用于测试的路径注意:如果用户的目的只是放松某条路径的时序约束,可以用set_multicycle_path命令进行约束,不要使用set_false_path。设置FalsePath的好处:①减小综合/实现/时序分析的时间。②极大的提升工具对设计的综合/实现/优化的结果。No.2
FalsePath约束举例?注:使用set_false_path命令①将异步复位信号设置为伪路径视频文件截图
欢迎FPGA、嵌入式、信号处理等工程师关注公众号
全国第一大FPGA微信技术群
欢迎大家加入全国FPGA微信技术群,这个群体拥有数万工程师、一群热爱技术的工程师,这里的FPGA工程师相互帮助,相互分享,技术氛围浓厚!赶紧叫上小伙伴一起加入吧!!
用手指按住就可以加入FPGA全国技术群哦
FPGA之家元器件芯城
优势元器件服务,有需求请扫码联系群主:金娟 邮箱:293580331@qq.com 欢迎推荐给采购
ACTEL、AD部分优势订货(经营全系列):
XILINX、ALTERA优势现货或订货(经营全系列):
(以上器件为部分型号,更多型号请咨询群主金娟)
服务理念:FPGA之家元器件自营芯城,旨在方便工程师快速方便购买器件服务,经过数年竭诚服务,我们的客服遍布国内大型上市公司、军工科研单位、中小企业、最大的优势是强调服务至上的理念、并且做到快速交货、价格优惠!
直营品牌:Xilinx ALTERA ADI TI NXP ST E2V、镁光 等百余元器件品牌,尤其擅长欧美对华禁运器件,欢迎工程师朋友把我们推荐给采购或者亲自咨询我们!
我们将一如既往提供业内最佳服务!
FPGA技术群官方鸣谢品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等