1 I/O口时序约束
前面讲解了时序约束的理论知识FPGA时序约束理论篇,本章讲解时序约束实际使用。
I/O口时序约束是FPGA中最基本的约束,也是不可缺少的约束,I/O约束包括管脚约束、电平约束和延迟约束。
(资料图)
管脚约束和电平约束
管脚约束即是指管脚分配,将硬件PCB板的引脚与FPGA设计的功能引脚匹配。对于使用XILINX芯片的用户来说,使用5系列的用户所使用开发环境为ISE,使用7系列的用户所使用开发环境为Vivado。
ISE中,使用如下方式在UCF文件中对管脚进行约束:
NET "clk" LOC = AK18;
NET "clk" IOSTANDARD = LVTTL;
Vivado中,使用如下方式在xdc文件中对管脚进行约束:
set_property-dict{PACKAGE_PIN AK9 IOSTANDARD LVTTL}
[get_ports "SWITCH[0]"]
在Vivado里面,规定必须指定管脚电平,而ISE中可以不进行管脚电平定义。
延迟约束
延迟约束分为两种,一是输入延迟set_input_delay,一是输出延迟set_output_delay,分别用于input端和output端。
该约束所用的时钟源可以是时钟输入管脚,也可以是虚拟时钟(后续会讲到)。输入延迟set_input_delay
ISE中延迟约束设置为OFFSET=IN,Vivado中延迟约束设置为set_input_delay和set_output_delay。可以参考下图(注:该图引用于网络)。
从上图中可以得到:Tinputdelay = Tco + TD。
要满足图中的时序,则最大延迟为2ns,最小延迟为1ns。因此,时序约束为:
create_clock -name sysclk -period 10 [get_ports clk]set_input_delay 2 -max -clock sysclk [get_ports Data]set_input_delay 1 -min -clock sysclk [get_ports Data]
注:get_ports为IO口引脚;
set_output_delay
set_output_delay的用法跟set_input_delay相似,可以参照set_input_delay的描述。
NOTE:延迟约束是让Vivado获取到的输入信号和输入时钟之间的延迟关系,并不是延迟输入信号,是固有属性。
标签: