二部曲——时序约束
其实具体进行时序约束的数值通常应该算在时序分析这一步中,之所以特权同学要放到这一步骤来谈,是因为不同的时序约束工具尤其对于IO口的约束方式稍微有些区别,甚至相同的工具也可以有不同的约束方法。因此,约束值的计算也通常视特定约束方法而定。换个角度看,一种方式分析通了,其实其它方式也都是换汤不换药的。
在Quartus II工程中,默认的时序分析工具可能不是TimeQuest,因此需要在菜单栏中点击进入AssignmentsàSetting…,然后如图5.11所示,勾选Use TimeQuest Timing Analyzer during compilation。
图5.11
此为,最好如图5.12指定以.sdc为后缀名的约束文件。在SOPC系统生成后,通常也会自动产生一个cpu.sdc的系统约束文件,它主要对SOPC架构的处理器以及外设进行约束。因为这些组件都是使用官方提供的或者第三方的IP核,它们一般也都能够集成时序约束文件。
图5.12
下面我们开始大家期待已久的TimeQuest之旅。点击任务栏上闹钟模样的按钮即可进入TimeQuest。
图5.13
因为我们已经有了一个名为cpu.sdc的约束文件,所以可以在TimeQuest主界面的右下方的Tasks面板直接点击Read SDC File即可。若是还没有任何的约束文件产生,需要用户点击FileàNew SDC File自己新建一个新的.sdc文件。
图5.14
全局时钟约束
对于系统产生的cpu.sdc文件里本身有一些约束语句,我们不用理会,可以在此基础上添加必要的约束语句。首先要做的是全局约束,主要是指系统时钟的约束。FPGA器件外部输入时钟的clk是25MHz,并且它也作为PLL的输入时钟,由PLL产生了多个时钟作为FPGA内部工作的时钟。因此,我们首先约束clk,然后约束PLL输出时钟。
一种简单的方法是点击菜单栏上的ConstrainsàCreat Clock…选项,弹出了傻瓜式的GUI界面,我们对系统输入时钟做如图5.15的约束即可。
图5.15
点击Run后对话框消失,此时我们可以观察工具视窗下方的Console窗口中出现了create_clock -period 40 -name EXTIN_CLK [get_ports {clk}]的语句,这就是最终写入.sdc文件中的约束脚本。用户也可以在Console中直接输入该语句然后回车,或者干脆打开.sdc文件,找个空白处输入该语句然后保存。总之,手段是多样的,就看用户习惯。约束完这个时钟,我们使用最直接的方法在.sdc文件中输入derive_pll_clocks -use_tan_name语句,即可让系统自动产生clk作为输入的PLL的所有输出时钟的约束,系统能够根据配置PLL时的相关信息来约束输出时钟的频率。
先提醒大家注意,在每次使用GUI进行约束后,需要以下两个步骤才能够确保所执行的约束写入了.sdc文件中。首先如图5.16所示点击Tasks下的Updata Timing Netlist,然后点击Tasks面板最下方的Write SDC File,在弹出的保存文件窗口中覆盖原来的.sdc文件。
图5.16
huotingtu_505472073 2010-11-5 00:56
用户1584993 2010-11-1 15:04