原创 TimeQuest User Guide 翻译1

2015-3-27 16:04 1990 15 15 分类: FPGA/CPLD
这个手册是国外坛子http://www.alteraforum.com 上一个比较好的时序约束的使用指导手册。
Section 1: Getting Started
 
Core Timing
在编译工程以后,调用Timequest。如果SDC文件没有创建,那么可以到 File->New 选项创建一个新的SDC文件。
Constraining the Core with Four Commands
每个 .sdc文件都应当以下面四个命令作为开头:
  • - create_clock
  • - derive_pll_clocks
  • - derive_clock_uncertainty
  • - set_clock_group
前三个命令是重要的。命令的细节描述可以通过-long_help帮助显示出来:
  • create_clock -long_help
  • derive_pll_clocks -long_help
  • derive_clock_uncertainty -long_help
  • set_clock_groups -long_help
     create_clock

当我们创建一个新的SDC文件,首先要做的就是约束输入FPGA端口的时钟信号,通过使用create_clock命令。基本的格式如下:
     create_clock -name sys_clk -period 8.0 [get_ports fpga_clk]
     注意:
     1.上面的命令创建了一个周期为8ns的系统时钟sys_clk,并将该时钟连接到我们FPGA的时钟输入端口 fpga_clk;
     2.Tcl和SDC是 case-sensitive的,所以请确认fpga_clk 和我们设计的时钟参数相符合;
     3.该时钟在0ns时刻产生一个上升沿,具有50%的占空比,因而其下降沿在4ns处。如果我们想产生不同占空比,或者添加一个时钟偏移offset,可以使用-waveform选项。 但很少需要这么做。
     4.我们经常会去创建一个与端口port同名的时钟信号,这种做法是不合法的。下面的例子:
          create_clock -name fpga_clk -period 8.0 [get_ports fpga_clk]
     现在有两个单元都有name叫做fpga_clk,一个是端口,一个我们定义的时钟。
     5.在Tcl 语法中,方括号[ ] 将会执行在其内部的命令,所以[ get_ports fpga_clk ] 会执行搜索命令,找到一个名交fpga_clk的端口,并return其值。这部分在章节Tcl syntax section部分有详细的讨论。虽然该命令经常被使用,但仍有一部分设计人员只是简单的把端口名字写在命令后面:
     create_clock -name sys_clk -period 8.0 fpga_clk (Wrong)
     6.重复上面的步骤,添加设计中所有的时钟信号。(如果你不确定有哪些时钟,那么就把所有你知道的时钟输入进来,之后我们将会展示Report Unconstrained Paths 是怎样指定一个没有约束的时钟的。)
 
     建议:除了可以输入约束命令,我们还可以通过GUI的方式输入约束。在打开Timequest之后,再打开,sdc文件,将光标定位在需要加入约束命令的地方,然后使用Edit->Insert Constraint,选择相对应的约束。
20150327154559774.jpg
     需要注意的是,不要通过TimeQuest GUI的 Constraint下拉菜单添加约束。
20150327154856240.jpg
     虽然二者看起来是一样的,但是上面方式添加的约束,将会直接作用到timing database中,而不会写入到.sdc 文件中,有经验的users可能会用上面的方式,但是初学者不推荐。还是安心的使用Edit->Insert Constraint命令。
 
     derive_pll_clocks
     
     接下来,在我们的 .sdc文件中添加如下命令:
          derive_pll_clocks
     就这样,加上这句话就好了!
 
     注意:
     1. 每一个PLL输出信号都需要被 create_generated_clock 约束。
     2. 当PLL信号被创建的时候,设计者会指定每个PLL输出是怎样配置的。所以,TImequest 能够自动的去对它们创建约束,这就是derive_pll_clocks 命令做的事情。
     3. 这个命令同时还做了其他的工作:它会约束 transceiver clocks(这个是什么时钟),同时会在LVDS SERDES和user logic之间添加多周期。
     4. 想要查看 derive_pll_clocks 命令在底层的具体实现,可以看TimeQuest 的messages窗口,它会单独的列出derive_pll_clocks  实现的每一条命令
20150327154914412.jpg
     5. 新手经常不会去添加derive_pll_clocks 命令,而是一条条的将 create_generated_clock 命令输入 .sdc文件中。理论上来说,这并没有错,但问题是,一旦我们PLL设计修改了,那么 相应的 .sdc文件和PLL 相关的命令就需要重新编辑。所以还是建议使用derive_pll_clocks命令去自动创建pll约束。
 
   derive_clock_uncertainty
     在.sdc文件中添加如下命令:
     derive_clock_uncertainty
     先不用管为什么,加上去就好了。
     注意:
     1. 这个命令应当在所有的 SDC文件中都存在。
     2. 它的存在不会影响早期的设计,顶多不起作用。
     3. 这个命令会计算FPGA里面时钟之间的uncertainties,根据各种参数(诸如PLL 波动,时钟树抖动.etc)
     4. 如果用户不添加该命令,则会有一个报警。
     
     以上就是时序约束要先完成的三个步骤。对于一个有两个时钟输入的简单设计,它的 SDC文件如下:
20150327160344206.jpg

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
15
关闭 站长推荐上一条 /3 下一条