时序分析的核心就是分析寄存器与寄存器之间时钟与数据的相位关系!
一、IO约束
IO约束包括管脚约束和延迟约束。
管脚约束
管脚约束就是指管脚分配,指定管脚的PACKAKE_PIN(管脚位置)和PACKAGE_IOSTARD(电平标准)两个属性的值。
dict应该是dictate的缩写,dictate:强行规定
代码语言:javascript复制set_property-dict { PACKAGE_PIN C8 IOSTANDARD LVCMOS15} [get_ports CLK_i]
[get_ports 信号名字]:可以有多种格式,可以直接是信号名,也可以是”信号名”,还可以是{信号名}。
延迟约束
延迟约束使用的是set_input_delay和set_output_delay,分别用于输入端和输出端,其时钟源可以是时钟输入管脚,也可以是虚拟时钟,这两个约束并非延时作用。
set_input_delay:
在数据从输入端口到触发器FF,即从上游器件到FPGA内部DFF时,需要使用set_input_delay延时,在设计输入延时时,vivado在编译时会根据设置的延时大小调用延时模块,完成对输入数据延时的设置:
在上图中,数据从上游器件的DFF发出,经过一段时间(Tco Trouting)后传送到FPGA内部的DFF,对于从上游器件输入的数据进行约束时使用set_input_delay:
突然想问一下?为什么设置set_input_delay???既然设置就是有用吧,有什么用呢?应该是在需要严格保证建立时间的要求时对上游器件的输入数据进行延迟约束。
在上图中:
当满足上图中时序时,最大延迟为2ns,最小延迟为1ns。
因此,需要添加的时序为:
代码语言:javascript复制create_clock -name sysclk -period 10 -waveform {0.000 5.000} [get_ports clkin]
set_input_delay -2 -max -clock sysclk [get_ports Datain]
set_input_delay -1 -min -clock sysyclk [get_ports Datain]
二、时钟周期约束
create_clock
在vivado中使用
代码语言:javascript复制create_clock-name <name> -period <period> -waveform{edge}
或者
代码语言:javascript复制create_clock[-add] [-name <clock_name>]-period <value> [-waveform<edge_list>] <targets>
解释:
-name:表示要生成的时钟的名称,
-period:表示时钟周期,单位为ns
-waveform:可以详细的描述时钟占空比和上升沿与下降沿位置
<target>:端口列表
-add:用于为一个端口添加多个时钟约束。
example:
代码语言:javascript复制create_clock -period 10.000 -name lxs-waveform {0.000 5.000} [get_ports sys_clk_i]
生成一个周期为10ns,占空比50%的时钟,其名为lxs,其端口名为sys_clk_i。
代码语言:javascript复制create_clock -period 10 -nameclk_100 [get_ports clk]
生成一个周期为10ns,占空比为50%,名为clk_100的时钟,其端口名为clk
代码语言:javascript复制create_clock -period 10 -waveform{0.000 8.000} -name clk [get_ports clk]
生成一个周期为10ns,上升沿为0ns,下降沿8ns的时钟
代码语言:javascript复制create_clock -period 10 -name clk_100 [get_ports clk]
代码语言:javascript复制create_clock-perioid 6.6 -name clk_150 -add [get_ports clk]
在clk一个端口上生成两个时钟,其周期分别为10ns和6.6ns。如果一个系统中同一个端口在不同时刻会有多种时钟输入,可以使用-add参数。否则,如果不添加-add参数,后面定义的时钟无效。
上例中设置好时钟约束,在打开综合文件,输入Tcl指令report_clocks可以看到:
表示约束成功!
时序分析到此break,基本都是一些入门的知识,在这个系列中参考了多位前辈的资料,感谢各位前辈的精心指导。之后积累的时序知识点多了的话会延续更新...
祝大家五一假期快乐!
bye~^~