TimeQuest就一定要搞定-完整版

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一一一一、、、、为什么一定要搞定为什么一定要搞定为什么一定要搞定为什么一定要搞定时序分析在ASIC设计中的重要性毋须多说(我也不甚了解)。在FPGA设计中,很少进行细致全面的时序约束和分析,Fmax是最常见也往往是一个设计唯一的约束。这一方面是由FPGA的特殊结构决定的,另一方面也是由于缺乏好用的工具造成的。好的时序约束可以指导布局布线工具进行权衡,获得最优的器件性能,使设计代码最大可能的反映设计者的设计意图。花些功夫在静态时序分析上既可以保证设计质量,也可以促使设计者再认识自己的代码。这后一点,对于我们这些逻辑设计初学者来说,尤为重要。从门级(在Altera的FPGA器件中是LE级)再认识自己的代码,可以更深入地体会语言的特点,也可以更深入地理解综合工具对语言的处理,对于设计能力的提高帮助很大。TimeQuest是Altera在6.0版的软件中加入的具备ASIC设计风格的静态时序分析(STA)工具。通过初步试用和观看网络教程,我感觉TimeQuest确实比TimngAnalyzer功能强大一些,而且使用界面比较友好,易于进行深入的时序约束和结果分析。TimeQuest采用SynopsysDesignConstraints(SDC)文件格式作为时序约束输入,不同于TimingAnalyzer采用的QuartusSettingsFile(QSF)约束文件。这正是TimeQuest的优点:采用行业通用的约束语言而不是专有语言,有利于设计约束从FPGA向ASIC设计流程迁移;有利于创建更细致深入的约束条件。二二二二、、、、时序分析基本概念时序分析基本概念时序分析基本概念时序分析基本概念以下内容译自QuartusIIVersion10.0Handbook,Volume3:Verification的SectionII7.3:TimingAnalysisOverview部分。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:范围更大的一个概念,可能是上述几种类型的组合,还可能不能穷尽上述几种类型。下面这幅图给出了一个时序网表的示例,展示了基本单元中的一部分。有了网表的基本单元,我们就可以描述TimeQuest进行时序分析的对象:Edges。Edges:Port-Pin,Pin-Pin,Pin-Port的连接关系都是Edges。注意,这里的Pin-Pin连接关系既包括Cell内部的连接(Net),也包括相邻Cell外部的Pin-Pin连接。Edges根据起止路径分为三类。1.Clockpaths:从ClockPort或内部生成的clockPin到寄存器Cell的时钟输入Pin。2.Datapaths:从输入Port到寄存器Cell的数据输入Pin,或从寄存器Cell的数据输出Pin到另一个寄存器Cell的数据输入Pin。3.Asynchronouspaths:从输入Port到寄存器Cell的异步输入Pin,或从寄存器Cell的数据输出Pin到另一个寄存器Cell的异步输入Pin。下面这幅图给出了三种不同的Edges。还要注意这样一组概念,这里的edge指的是时钟沿:1.LaunchEdge:前级寄存器发送数据对应的时钟沿,是时序分析的起点。2.LatchEdge:后级寄存器捕获数据对应的时钟沿,是时序分析的终点。下面这幅图给出了发送、捕获时钟沿的示意图。本例在launchedge(0ns)时寄存器reg1发送数据,在latch(5ns)时寄存器reg2捕获数据。时序分析公式的基本公式:内部寄存器到寄存器的路径内部寄存器到寄存器的路径内部寄存器到寄存器的路径内部寄存器到寄存器的路径((((internalregisteinternalregisteinternalregisteinternalregisterrrr----totototo----registerpathsregisterpathsregisterpathsregisterpaths))))(1)DataArrivalTime:LaunchEdge+前级寄存器Clockpath的延时+前级寄存器Cell从时钟Pin到数据输出Pin的Net延时(uTco)+Datapath的延时。(2)DataRequiredTime:LatchEdge+后级寄存器Clockpath的延时(+uTh)或(-uTsu)。(3)ClockArrivalTime:LatchEdge+后级寄存器Clockpath的延时。(4)ClockSetupSlack=DataRequiredTime–DataArrivalTime从外部输入引脚到内部寄存器从外部输入引脚到内部寄存器从外部输入引脚到内部寄存器从外部输入引脚到内部寄存器((((pathfromaninputporttoainternalregisterpathfromaninputporttoainternalregisterpathfromaninputporttoainternalregisterpathfromaninputporttoainternalregister))))(1)ClockSetupSlack=DataRequiredTime–DataArrivalTime(2)DataArrivalTime=LaunchEdge+ClockNetworkDelay+InputMaximumDelay+Pin-to-RegisterDelay(3)DataRequiredTime=LatchEdge+ClockNetworkDelaytoDestinationRegister–μtSU.从内部寄存器到从内部寄存器到从内部寄存器到从内部寄存器到输出输出输出输出引脚引脚引脚引脚((((pathpathpathpathfromfromfromfromaninternalregistertoanoutputportaninternalregistertoanoutputportaninternalregistertoanoutputportaninternalregistertoanoutputport))))(1)ClockSetupSlack=DataRequiredTime–DataArrivalTime(2)DataArrivalTime=LaunchEdge+ClockNetworkDelaytoSourceRegister+μtCO+Register-to-PinDelay(3)DataRequiredTime=LatchEdge+ClockNetworkDelay–OutputMaximumDelayofPin在下一篇分析建立时间和保持时间时,就必须用到上述三个概念。三三三三、、、、时序分析基本公式时序分析基本公式时序分析基本公式时序分析基本公式以下内容译自QuartusIIVersion7.0Handbook,Volume3:Verification的6-28:ClockAnalysis部分。TimeQuest静态时序分析的对象包括:寄存器和寄存器之间的路径、I/O之间、I/O和寄存器之间的路径、异步复位和寄存器之间的路径。TimeQuest根据DataArrivalTime和DataRequiredTime计算出时序余量(Slack)。当时序余量为负值时,就发生了时序违规(TimingViolation)。需要特别指出的一点是:由于时序分析是针对时钟驱动的电路进行的,所以分析的对象一定是“寄存器-寄存器”对。在分析涉及到I/O的时序关系对时,看似缺少一个寄存器分析对象,构不成“寄存器-寄存器”对,其实是穿过FPGA的I/O引脚,在FPGA外部虚拟了一个寄存器作为分析对象。一、建立时间(SetupTime)检查:遵循的原则是信号从Launchedge开始计时,经过一系列的时序路径,到达后级寄存器的数据输入Pin的速度不能太慢,时间不能太长,否则会侵占后级寄存器数据输入Pin相对于Latchedge的建立时间。刚好满足后级寄存器建立时间的数据到达时间是DataRequiredTime(相对于Latchedge计算),实际的数据到达时间是DataArrivalTime(相对于Launchedge计算)。显然,在建立时间检查中,DataArrivalTime要小于DataRequiredTime,否则就会造成建立时间违规。也就是说,DataRequiredTime是DataArrivalTime的最大值。二者之差就是建立时间的时序余量。1)寄存器-寄存器(Register-to-Register)路径检查:ClockSetupSlack=DataRequiredTime–DataArrivalTimeDataArrivalTime=LaunchEdge+ClockNetworkDelaySourceRegister+μtco+Register-to-RegisterDelayDataRequiredTime=ClockArrivalTime–μtsu–SetupUncertaintyClockArrivalTime=LatchEdge+ClockNetworkDelaytoDestinationRegister2)输入引脚-寄存器(Pin-to-Register)路径检查:ClockSetupSlackTime=DataRequiredTime–DataArrivalTimeDataArrivalTime=LaunchEdge+ClockNetworkDelaytoSourceRegister+InputMaximumDelayofPin+Pin-to-RegisterDelayDataRequiredTime=ClockArrivalTime–μtsuClockArrivalTime=LatchEdge+ClockNetworkDelaytoDestinationRegister3)寄存器-输出引脚(Register-to-Pin)路径检查:ClockSetupSlackTime=DataRequiredTime–DataArrivalTimeDataArrivalTime=LaunchEdge+ClockNetworkDelaytoSourceRegister+μtco+Register-to-PinDelayDataRequiredTime=ClockArrivalTime–OutputMaximumDelayofPinClockArrivalTime=LatchEdge+ClockNetworkDelaytoDestinationRegister从上面三组公式可以看出:DataArrivalTime的前两项是相同的;DataRequiredTime的第一项是相同的;ClockArrivalTime的公式是相同的。所以,第一组公式可以归纳如下:ClockSetupSlackTime=DataRequiredTime–DataAr

1 / 40
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功