您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > Vivado集成开发环境时序约束介绍
1Vivado时序约束本文主要介绍如何在Vivado设计套件中进行时序约束,原文出自Xilinx中文社区。1TimingConstraintsinVivado-UCFtoXDCVivado软件相比于ISE的一大转变就是约束文件,ISE软件支持的是UCF(UserConstraintsFile),而Vivado软件转换到了XDC(XilinxDesignConstraints)。XDC主要基于SDC(SynopsysDesignConstraints)标准,另外集成了Xilinx的一些约束标准,可以说这一转变是Xilinx向业界标准的靠拢。Altera从TimeQuest开始就一直使用SDC标准,这一改变,相信对于很多工程师来说是好事,两个平台之间的转换会更加容易些。首先看一下业界标准SDC的原文介绍:Synopsys'widely-useddesignconstraintsformat,knownasSDC,describesthedesignintentandsurroundingconstraintsforsynthesis,clocking,timing,power,testandenvironmentalandoperatingconditions.SDChasbeeninuseandevolvingformorethan20years,makingitthemostpopularandprovenformatfordescribingdesignconstraints.EssentiallyallsynthesizeddesignsuseSDCandnumerousEDAcompanieshavetranslatorsthatcanreadandprocessSDC.Xilinx原先的自成一派(UCF)其实其实也算做的不错,相信使用过UCF的工程师也有同感,并没有什么不便。像Apple那样软件和硬件都自成一派而且能与其它所有派别抗衡的,背后需要有多强大的团队支持,可能Xilinx可是考虑到这点,不想花费过多的精力去维护。(个人见解)文归正题,如果有读者以前没有使用XDC/SDC的经验,这边讲解一下如何从UCF到XDC的转换。如图1所示为UCF与SDC的约束命令比较,可以发现常用的命令都能对应上。2图1下面简单举例说明:ClockPeriod:UCF:NETclkaTNM_NET=clka;TIMESPECTS_clka=PERIODclka13.330nsHIGH50.00%;XDC:create_clock-nameclka-period13.330-waveform{06.665}[get_portsclka]InputPort:UCF:OFFSET=IN8BEFOREclka;XDC:set_input_delay-clockclka2[all_inputs]注:clockperiod=10ns.OutputPort:UCF:OFFSET=OUT12AFTERclkc;XDC:set_output_delay-clockclkc8[all_outputs]注:clockperiod=20ns.除了以上约束命令的差别外,UCF和XDC间的主要差别如下:1.XDC是顺序执行约束,每个约束指令有优先级2.UCF一般约束nets对象,而XDC约束类型是pins,ports和cells对象3.UCF约束默认不对异步时钟间路径进行时序分析,而XDC约束默认所有时钟是相关的,会分析所有路径,可以通过设置时钟组(set_clock_groups)取消时3钟间的相关性。下面介绍一下在Vivado中添加XDC文件以及加入约束命令的方法:首先在ProjectManager中展开Constraints类,选择AddSources即可添加或者新建XDC约束文件,如图2所示。图2选择新建的XDC文件,双击打开,选择左侧的Templates,其中有XDC约束命令的实例,所有的约束命令都可以在其中找到,非常方便,如图3,4所示。4图35图4XDC约束文件可以在编译综合和实现过程中使用时,在综合和实现设置中都能选择需要的约束,如图5。通过创建约束文件集,如图6,设计者可以使能不同的约束集合测试FPGA设计的性能;在约束文件集中可以包含多个XDC约束文件,在FPGA设计比较复杂时,可以分模块或者IP核约束,相应的则有多个6XDC约束文件,这样设计和维护效率都能得到提高。图62TimingConstraintsinVivado--2.TimingBasics在深入讲解XDC约束前,先介绍一下基本的时序约束、分析的概念。2.1TimingPath:图1中包含了主要的时序分析路径:1.输入端口到FPGA内部时序单元的路径2.FPGA内部时序单元间的路径3.FPGA内部时序单元到输出端口的路径74.输入端口到输出端口的路径图1不管时序单元是在FPGA内部还是外部,除了第4条路径,它是从输入端口到输出端口,其间没有锁存,其它3条路径的时序分析都以2个时序单元间的路劲进行分析,如图2所示。第一个时序单元上的时钟称为sourceclock(启动时钟),第二个时序单元上的时钟称为destinationclock(锁存时钟),时序分析从sourceclock的上升沿开始,到之后的destinationclock的上升沿结束,时序分析的过程就是检验数据在两个上升沿时间差内经过数据路径传输后是否满足要求,数据到达时需要满足后一级时序单元的setup/hold要求,其本质上是需要数据在到达后一级时序单元时不发生亚稳态,数据能够被稳定地采集到并且稳定地输出。图22.2ClockSetupCheck:检验Setup是否满足要求,这边引入setupslack概念,只要setupslack的值大于零即Setup检查满足要求,其计算公式如下:setupslack=datarequiredtime–dataarrivaltime其中:8datarequiredtime=destinationclockedgetime+destinationclockpathdelay-clockuncertainty-setuptimedataarrivaltime=sourceclockedgetime+sourceclockpathdelay+clocktooutputtime+datapathdelay公式代入可得到:setupslack=(destinationclockedgetime-sourceedgetime)+(destinationclockpathdelay-sourceclockpathdelay)-clockuncertainty-setuptime-clocktooutputtime-datapathdelay=Tdestination_to_source+(Tclk-D2–Tclk-D1)–Tclk_uncertainty–Tsetup–uTco-Tdata_path_delay在Setup检查中sourceclock一定超前于destinationclock。其中第一部分Tdestination_to_source,当sourceclock和destinationclock为异步时钟时,如图3中实例,sourceclock的周期等于6ns,destinationclock的周期等于4ns,首先假定2个时钟的相位差为0,图中在这种情况下有2个setup关系,setup1下Tdestination_to_source=4ns,setup2下Tdestination_to_source=2ns,在实际分析中应该选取最严格的情况,即选取setup2这种。图3而当sourceclock和destinationclock为同一个时钟时,Tdestination_to_source的值很显然就是时钟周期Tclk_period,这也是时序分析最多的情况了,进一步推导setupslack=Tclk_period+(Tclk-D2–Tclk-D1)–Tclk_uncertainty-Tsetup–Tdata_path_delay0,可以得到:Tclk_periodTclk_uncertainty+Tsetup+Tdata_path_delay-(Tclk-D2–Tclk-D1)9Tclk_period、Tclk_uncertainty可以通过时序约束确定其值,uTco,Tsetup是时序单元的属性值,(Tclk-D2–Tclk-D1)在布局布线后其值也能确定,剩下Tdata_path_delay对T-clk_period影响最大,一个设计Setup检查中的关键路径往往是Tdata_path_delay值最大的一条路径,影响其值有很多原因,如逻辑级数过多,扇出导致布线延时过大…2.3ClockHoldCheck:对应Hold检查,也有holdslack,其计算公式如下:holdslack=dataarrivaltime–datarequiredtime其中datarequiredtime=destinationclockedgetime+destinationclockpathdelay+clockuncertainty+holdtimedataarrivaltime=sourceedgetime+sourceclockpathdelay+clocktooutputtime+datapathdelay代入公式得到:holdslack=(sourceclockedgetime-destinationedgetime)+(sourceclockpathdelay-destinationclockpathdelay)-clockuncertainty-holdtime+clocktooutputtime+datapathdelay=Tsource_to_destination+(Tclk-D1–Tclk-D2)–Tclk_uncertainty–Thold+uTco+Tdata_path_delay与Setup检查不同,在Hold检查下destinationclock超前于sourceclock。在Setup检查中,Tdestination_to_source的值选取destinationclock和sourceclock相差最小的情况下进行分析;而Hold检查中Tsource_to_destination的值选取所有Setup关系分别进行分析,每一种Setup关系对应有两种情况,然后选取所有情况中T-destination_to_source值大的计算对应的Tsource_to_destinationa.取Setup关系的前一个destinationclock沿,如图4中Hold1a和Hold2ab.取Setup关系的destinationclock沿,如图4中Hold1b和Hold2b10图4根据图4中实例计算得到:Hold1a:Tdestination_to_source=0nsHold1b:Tdestination_to_source=-2nsHold2a:Tdestination_to_source=-2nsHold2b:Tdestination_to_source=-4ns显然选取Hold1a,对应Tsource_to_destination值为0ns当sourceclock和destinationclock为同一个时钟时,可以计算得到:Tsource_to_destination值为0ns,进一步推导holdslack=Tsource_to_destination+(Tclk-D1–Tclk-D2)–Tclk_uncertainty–Thold+Tdata_path_delay0可以得到:Tdata_path_delayTclk_uncertainty+Thold+(Tclk-D2–Tclk-D1)由上得出数据路径的延时也不能过短,与Setup检查是矛盾
本文标题:Vivado集成开发环境时序约束介绍
链接地址:https://www.777doc.com/doc-6406091 .html