set_input_delay与set_out_delay理解
set_input_delay
当fpga 外部送入fpga内部寄存器数据时,会有时钟launch clk以及latch clock,前者负责将数据从外部寄存器中送出,后者要在setup和hold都满足的情况下将数据锁入fpga内部寄存器,在这个过程中,如果launch clk将数据送出到达fpga内部寄存器端口,上一次的数据hold time(当前launch clk相当于上一个latch clk)没有满足,上一个数据就不能被正确锁存,而采用set_input_delay就是在数据到达时间上加延时,让latch时钟可以将数据正确锁存。(一般为hold time)
set_out_delay
当fpga 内部送入fpga外部寄存器数据时,也应该会有时钟launch clk以及latch clock,前者负责将数据从内部寄存器中送出,后者要在setup和hold都满足的情况下将数据锁入fpga外部寄存器,在这个过程中,如果latch clk已经到来,由于板级延时之类的关系,导致数据不能及时到达fpga外部寄存器端口,从而setup time不够,导致采样数据出错,这个时候在数据到达set_output_delay一个负值,或者对latch时钟延时一个正值,即可使得满足建立时间。
注意:
在设置约束的过程中,set_input_delay时launch clk应该为外部器件的数据发送时钟,如果没有,可以设置一个虚拟时钟,latch clk应该为fpga内部采样时钟;set_output_delay时launch clk应该为fpag内部的数据发送时钟,latch clk应该为fpga外部数据锁存时钟,如果没有,可以设置一个虚拟时钟;
就是描述时钟与数据的相位
set_input_delay 为了满足latch的建立时间而有一个最大延时,为了满足保持时间有个最小延迟
set_output_delay