在FPGA 做系统同步输入接口的情况下,很多时候上游器件送入的数据并不是跟某个FPGA 中已经存在的真实的时钟相关,而是来自于一个不同的时钟,这时就要用到虚拟时钟(Virtual Clock)。
举例来说,上游器件用一个100MHz 的时钟送出数据到FPGA,实际上这个数据每两个时钟周期才变化一次,所以可以用50MHz 的时钟来采样。FPGA 有个100MHz 的输入时钟,经过MMCM 产生一个50MHz 的衍生时钟,并用其来采样上游器件送来的同步数据。当然,系统级的设计上,必须有一定的机制来保证上游器件中的发送时钟和FPGA 中的接收时钟的时钟沿对齐。
此时,我们可以借助虚拟时钟的帮助来完成相应的Input 接口约束。
create_clock -period 10 -name clk_100 [get_ports i_clk_100MHz] ;
create_clock -period 20 -name clk_50_virtual ;
set_input_delay -max 5.2 -clock clk_50_virtual [get_ports i_data_50] ;
set_input_delay -min 2.0 -clock clk_50_virtual [get_ports i_data_50] ;