input delay
input delay是针对芯片内部的采样寄存器的,假定芯片内部采样寄存器的D端为DFF0D,采样寄存器的CK端时钟为CLK0,与DFF0D对应的PAD为A。设置input delay为set_input_delay X -clock CLK1 [get_ports A],时钟CLK1和CLK0一定为同步同频时钟。
CLK1的为create_generated_clock -name CLK1 -edges {1 2 3} -master CLK [get_pins C]
CLK0的为create_generated_clock -name CLK0 -edges {1 2 3} -master CLK [get_pins B]
CLK1输出PAD为D,input delay X为C->D的时延+D->外部器件时钟pin的时延+外部器件时钟pin->外部器件数据输出pin的时延+外部数据输出pin到A的时延。因为A到DFF0D的时延是内部已知的,C点到采样寄存器CK端即B点的时延是内部已知的,所以设置input delay能保证输入芯片的数据信号能满足芯片内部采样寄存器的时序需求。
output delay
output delay是针对外部器件的,保证输出到外部器件的时钟和数据信号满足外部器件的时序要求。如果在内部C点create一个参考时钟
create_generated_clock -name CLK1 -edges {1 2 3} -master CLK [get _pins C]
芯片输出数据的PAD为A,输出时钟的PAD为B
set_output_delay X1 -clock CLK1 [get_ports A]
set_output_delay X2 -clock CLK1 [get_ports B]
这样就能保证输出数据在A上变化时间点相对于CLK1的上升沿的delay X1和输出时钟在B上的上升沿时间点对于CLK1的上升沿的delay X2是一致的。外部器件如果是用下降沿对芯片输出的数据进行采样,就不会有任何问题。如果外部器件要使用上升沿对芯片输出数据进行采样,那就要使得X1-X2为半个时钟周期