在我之前寫的FPGA時序約束教程中,有一篇中講到了虛擬時鐘:
FPGA時序約束理論篇之時鐘周期約束
但文中對虛擬時鐘的應用介紹的還不夠詳細,因此這里我們再對虛擬時鐘做一個更加細致的介紹。
首先,虛擬時鐘用于什么地方?
虛擬時鐘通常用于設定輸入和輸出的延時,即set_input_delay和set_output_delay??赡苡型瑢W忘記這兩個約束的用法了,這里我們再展示一下:
set_input_delay 0.5 -clock clkA [get_ports A] set_output_delay 1 -clock clkB [get_ports B]
其中clkA和clkB就是我們使用create_clock創建的主時鐘或者虛擬時鐘。
主時鐘在創建的時候需要指定時鐘輸入端口,虛擬時鐘不需要指定端口,所以稱之為虛擬時鐘。那什么場景下要用到虛擬時鐘呢?
1. 外部IO的參考時鐘并不是設計中的時鐘
下圖中,外部IO的參考時鐘比設計中主時鐘的路徑上多了一個BUFFER,因此我們需要使用虛擬時鐘來進行約束。
create_clock -name sysclk -period 10 [get_ports clkin] create_clock -name virtclk -period 10 set_clock_latency -source 1 [get_clock virtclk] set_input_delay -clock virtclk -max 4 [get_ports dina] set_input_delay -clock virtclk -min 2 [get_ports dina]
2. FPGA I/O路徑參考時鐘來源于內部衍生時鐘,但與主時鐘的頻率關系并不是整數倍
如果I/O路徑參考時鐘源于內部的衍生時鐘,那set_input_delay和set_output_delay約束中-clock參數后的時鐘不能是衍生時鐘,比如下圖的例子中,輸入10MHz時鐘經過了MMCM后去采輸入的數據。
a) 如果MMCM沒有負的相移而且輸出的頻率也是10MHz,那么直接使用主時鐘來約束input delay。
create_clock -period 100.000 -name clk [get_ports clk] set_input_delay -clock clk -max 2.000 [get_ports datain] set_input_delay -clock clk -min 1.000 [get_ports datain]
b) 如果MMCM輸出頻率是60MHz,那么這個衍生時鐘跟主時鐘并不是整數倍關系,這時就需要用到虛擬時鐘了
create_clock -period 100.000 -name clk [get_ports clk] create_clock -name clk_port_vclk -period 16.67 set_input_delay -clock clk_port_vclk -max 2 [get_ports datain] set_input_delay -clock clk_port_vclk -min 1 [get_ports datain]
3. 在不修改時鐘特性的情況下針對I/O指定不同的jitter和latency
在設置完成后,可以看到Tcl Command Preview中提示的約束指令。
審核編輯:湯梓紅
-
FPGA
+關注
關注
1629文章
21748瀏覽量
603865 -
端口
+關注
關注
4文章
971瀏覽量
32092 -
虛擬時鐘
+關注
關注
0文章
5瀏覽量
6599
發布評論請先 登錄
相關推薦
評論