时序约束实例.pdf
《时序约束实例.pdf》由会员分享,可在线阅读,更多相关《时序约束实例.pdf(21页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、用 Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (一)(2012-06-21 10:25:54)转载标签:杂谈一,概述一,概述用 Altera 的话来讲,timequest timing analyzer 是一个功能强大的,ASIC-style 的时序分析工具。采用工业标准-SDCsynopsys designcontraints-的约束、分析和报告方法来验证你的设计是否满足时序设计的要求。在用户的角度,从我使用TimeQuest 的经验看,它与 IC 设计中经常用到的比方 prime time,time craft 等 STA 软件是比较
2、类似的。用过 prime time 或 time craft 的朋友是非常容易上手的。在这一系列的文章里, 我将会拿一个 DAC7512 控制器的 verilog 设计作为例子,详细讲解如何使用 TimeQuest 进行时序设计和分析。二,二,TimeQuestTimeQuest 的基本操作流程的基本操作流程做为 altera FPGA 开发流程中的一个组成部分, TimeQuest 执行从验证约束到时序仿真的所有工作。 Altera推荐使用下面的流程来完成TimeQuest的操作。1. 1. 建立项目并加入相关设计文件建立项目并加入相关设计文件不管做什么事情,都需要有一个目标或者说对象。我们
3、用TimeQuest做时序分析,当然也需要一个对象,这个对象实际上就是我们的设计。所以首先是要建立一个 Quartus II 的项目,并把所有需要的设计文件都加入到项目中去。需要注意的一点是,这里的设计文件,不仅仅包含逻辑设计相关的文件,也包含已经存在的时序约束文件,当然,需要以synopsys Design Constraints(.sdc)的格式存在的。2. 2. 对项目进行预编译对项目进行预编译initial compilationinitial compilation项目建立以后, 如果从来没有对项目进行过编译的话, 就需要对项目进行预编译。 这里的预编译是对应于全编译 full co
4、mpilation 来讲的,我们可以理解为预编译是对项目进行部分的编译, 而全编译是对项目进行完整的编译。做预编译的目的是为了生成一个initial design database,然后我们可以根据这个 database 用 Timequest 采用交互的模式生成时序约束。实际上,对于小的设计,编译时间并不是很长的话,完全可以不去区分预编译和全编译,需要编译的时候,直接做全编译就可以了,做全编译的话,可以生成一个post-fit 的 database,完全可以给 TimeQuest使用。3.3. 向设计中添加时序约束向设计中添加时序约束在用 TimeQuest 做时序分析之前,必须要指定出对时
5、序的要求,也就是我们通常所说的时序约束。这些约束包括时钟,时序例外timingexceptions和输入/输出延时等。默认情况下,Quartus II 软件会给所有没有被下约束的时钟都设定为1GHz。没有任何的时序例外,也就是说所有的timing path 都按 1T 去check。所有的输入/输出的延迟都按 0 来计算。这显然不符合绝大多数设计的时序要求,所以有必要根据设计的特性,添加必要的时序约束。如上所述,时序约束主要包括三类:时钟,时序例外和输入/输出延迟。其中时钟和输入/输出延迟可以认为是在某种程度上增强时序设计的要求。而时序例外可以认为是在某种程度上降低时序设计的要求。比方说,仅仅
6、设定一个时钟的频率为100MHz 的话,这个时钟域里所有timing path 都需要能工作在 100MHz 下。这显然是增强了时序设计的要求。可是如果在这个时钟域下面,有部分timing path 是不需要做 1T 的check 的, 那么就可以通过添加时序例外来防止对这些timing path 做 1T的 check,即降低了时序设计的要求。在用 TimeQuest 做时序分析时, 如果非常熟悉设计的构架和对时序的要求,又比较熟悉 sdc 的相关命令,那么可以直接在sdc 文件里输入时序约束的命令。而通常情况下,可以利用TimeQuest GUI 提供的设定时序约束的向导添加时序约束。 不
7、过要注意的是, 用向导生成的时序约束,并不会被直接写到 sdc 文件里,所以如果要保存这些时序约束,必须在TimeQuest 用 write sdc 的命令来保存所生成的时序约束。4. 4. 执行完整的编译执行完整的编译在设定好时序约束以后, 就需要对整个设计进行完整的编译。 在编译过程中,软件会优化设计的逻辑、布局布线等来尽可能满足所有的时序约束。如果没有添加时序约束, 那么软件在编译的时候, 会按照默认的时序约束对设计进行优化,对于绝大多数的设计,都会报出来时序的问题,但因为默认的时序约束与设计本身的要求在绝大多数情况下, 都是不同的,所以这些时序的问题也并不是设计本身的问题,并没有太多的
8、参考价值,而且很多初学者也不会注意到这个问题。这样就把设计中很多潜在的时序问题给隐藏起来了,最终带来的可能就是系统运行的不稳定,甚至是完全不能运行。5. 5. 验证时序验证时序当完成编译以后, 我们就可以用 TimeQuest 来验证时序了。 在时序分析的过程中,TimeQuest 会分析设计中所有的 timing path,计算每一条timing path 的延时,检查每一条timing path 是否满足时序约束,最后按照 positive slack 或 negative slack 来报告时序分析的结果。其中negativeslack 就表示对应的 timing path 不满足时序约
9、束的要求 timing violation 。如果遇到有不满足时序要求的情况, 则可以根据对应的时序报告分析设计, 确定如何优化设计使之满足时序约束。 时序约束有任何变化的话,都需要重新编译设计。 这个反复的过程可以让我们解决设计中的时序问题。三,三,DAC7512DAC7512控制器控制器DAC7512 是一个具有三线串行接口的DAC。我们基于 FPGA 用Verilog 语言实现了一个简单的 DAC7512 的控制器。下面是控制器的结构图:DAC7512 控制器由三个模块组成,PLL 用来生成控制器所要的时钟C0 25MHz 和 C1 50MHz , 其 lock 信号用来做为控制器的异步
10、 reset。da_data 模块生成要送往 DAC7512 的数据,其中 DA_DATA 为数据,DA_DATA_EN 为数据有效信号,该模块使用 C0 时钟,整个属于 C0时钟域。 DAC7512 模块用于将 DA_DATA 转换成符合 DAC7512 接口标准的串行数据并送给 DAC7512, 要用到 C1 50MHz 和 DA_SCLK C1二分频,25MHz两个时钟。DAC7512 控制器一共有四个输入输出端口。CLK_IN 为 PLL 的基准时钟,为 25MHz。DA_DIN,DA_SCLK 和 DA_SYNC 为三线串口,都为输出端口。由于 C0,C1 是由同一个 PLL 输出的
11、,DA_SCLK 是由 C1 经二分频得到的,三者之间是同步的,处于同一个clock group 中。DAC7512 模块的详细设计资料可参照本博客中 “FPGA 设计中DAC7512 控制的 Verilog 实现” 的文章。不过要注意一点的是,在串行总线上, DA_DIN 是在 DA_SCLK 的下降沿有效的。 把 DA_DIN 设计为C1 时钟域的信号,并控制其值只在DA_SCLK 为高电平的时候发生变化。 这样可以把 DA_DIN 与 DA_SCLK 之间的时序要求转换为 DA_DIN在 C1 时钟域的时序要求,细节我们会在下面介绍。四,用四,用TimeQuestTimeQuest 对对
12、 DAC7512DAC7512 控制器进行时序分析控制器进行时序分析在对某个对象下时序约束的时候,首先要能正确识别它,TimeQuest会对设计中各组成部分根据属性进行归类,我们在下时序约束的时候,可以通过命令查找对应类别的某个对象。TimeQuest对设计中各组成部分的归类主要有cells, pins, nets和ports几种。寄存器,门电路等为 cells;设计的输入输出端口为 ports;寄存器,门电路等的输入输出引脚为pins;ports 和 pins 之间的连线为 nets。具体可以参照下列图此图出自Altera Time Quest 的使用说明。下面我们按照本文第二部分用 Tim
13、eQuest 做时序分析的基本操作流程所描述的流程对 DAC7512 控制器进行时序分析。建立和预编译项目的部分相对简单,涉及到的也只是QuartusII 的一些基本操作,这里我们就不再做具体的表达。主要介绍如何向项目中添加时序约束和如何进行时序验证。首先建立一个名称与项目top 层名字一致的 sdc 文件,然后按照下面的步骤添加时序约束。1. 创建时钟添加时序约束的第一步就是创建时钟。 为了确保STA结果的准确性,必须定义设计中所有的时钟,并指定时钟所有相关参数。TimeQuest 支持下面的时钟类型:a) 基准时钟Base clocksb) 虚拟时钟Virtual clocksc) 多频率
14、时钟Multifrequency clocksd) 生成时钟Generated clocks我们在添加时序约束的时候, 首先创建时钟的原因是后面其它的时序约束都要参考相关的时钟的。基准时钟:基准时钟是输入到 FPGA 中的原始输入时钟。 与 PLLs 输出的时钟不同,基准时钟一般是由片外晶振产生的。定义基准时钟的原因是其他生成时钟和时序约束通常都以基准时钟为参照。很明显,在 DAC7512 控制器中,CLK_IN 是基准时钟。我们用下面的命令来创建这个基准时钟:create_clock -name CLK_IN -period 40 -waveform 0 20 get_portsCLK_IN
15、其中,create_clock 是创建时钟的命令,后面是命令的各种选项。其中-name CLK_IN 选项给出了时钟的名字,即 CLK_IN。-period 40 给出了时钟的周期, 即 40ns。 -waveform 0 20给出了时钟的占空比, 即 50/50。最后的get_ports CLK_IN 是嵌套的 tcl 命令, 给出了 CLK_IN 对应的port,实际上也就是 CLK_IN 的输入引脚。在sdc文件里添加上述命令后, 在quartusII里编译设计, 然后通过tools TimeQuest Time Aanlyzer命令打开TimeQuest。 在 TimeQuest的 T
16、asks窗口,找到 Report Clocks,双击之,TimeQuest 就会在右边主窗口给出设计中已成功添加的时钟信息。如下列图所示,可以看到CLK_IN,其类型为基准时钟,周期为 40ns,频率为 25MHz,targets 项为 CLK_IN,即表示这个时钟是连接在 CLK_IN 端口上的。这说明上面 create_clock的命令已经在设计中正确创建了时钟CLK_IN。实际上对于 create_clock 命令,我们可以通过 quartus II 的帮助系统/current/,查找它的语法。在 QuartusII 的帮助里,可以查找到:SyntaxSyntaxc create_clo
17、ckreate_clock -h | -help -long_help -add-name-period -waveform 另外, 帮助系统里有很详尽的关于该命令的描述, 并且给出了各种使用的范例。 不仅仅是这一个命令, 所有的命令都可以在帮助系统里找到。如果看到一个陌生的命令,或者不知道命令该如何使用,那么最好的方法就是在帮助系统里查找该命令。PLLPLL 时钟:时钟:上面我们创建了基准时钟。下面我们创建PLL 输出的时钟。在 Altera 的 FPGA 中, PLL 电路是通过 ALTPLL 的 IP 库被添加到设计中的。下列图是一个典型的ALTPLL 的结构图。从图上可以看到, 当我们
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时序 约束 实例
限制150内