虛拟時鐘
虛拟時鐘,指的是在設計中不存在的時鐘,是以設計中定義虛拟時鐘滿足以下3個特點:
1.設計中的某個時鐘是一個現實存在的,但是其時鐘源不是來自設計中任何的引腳和端口,即設計中的時序單元都不是由該時鐘觸發,然而設計中部分時序路徑的輸入輸出端口又與該時鐘相關。如下圖所示,由于時鐘1并不直接在設計裡起作用,時鐘1即為虛拟時鐘。
2.由于虛拟時鐘與設計中的任何引腳和端口沒有直接關系,是以定義虛拟時鐘的指令中不指定時鐘的端口。
通過SDC指令create_clock來建立虛拟時鐘,比如通過該指令定義一個周期為10、占空比為50%的虛拟時鐘信号。
create_clock -name virtual_clk -period 10 -waveform {0 5}
3.虛拟時鐘在設計中的實際應用是用于作為輸入輸出端口延時限制的時鐘源,主要分為以下3種情況。
(1)設計的輸入端口信号來自外部某個時鐘控制下的時序路徑輸出端,如下圖所示。
根據以上情況,設計本身的時鐘為CLK1,但是其輸入端口core_in是來自外部基于CLK2時鐘域下的時序路徑的輸出,其指令如下:
create_clock -name CLK2 -period 10 -waveform {0 5}
create_clock -name CLK1 -period 10 [get_ports core_ck]
set_input_delay -clock CLK2 -max 2.7 [get_ports core_in]
以上指令定義設計本身的時鐘CLK1和定義虛拟時鐘CLK2,同時基于虛拟時鐘來定義輸入端口core_in的時序限制,其輸入延時為2.7ns
(2)設計的輸出端口信号進入外部某個時鐘控制下的時序路徑輸入端,如下圖所示。
根據以上情況,設計本身的時鐘為CLK1,但是其輸出端口core_out是到一個外部基于CLK2時鐘域下的時序路徑的輸入,其指令如下:
create_clock -name CLK2 -period 10 -waveform {0 5}
create_clock -name CLK1 -period 10 [get_ports core_ck]
set_output_delay -clock CLK2 -max 2.7 [get_ports core_out]
以上指令定義設計本身的時鐘CLK1和定義虛拟時鐘CLK2,同時基于虛拟時鐘來定義輸出端口core_out的時序限制,其輸出延時為2.7ns。
(3)設計的輸入、輸出端口信号都是外部某個時鐘控制下的時序路徑,如下圖所示。
設計本身的時鐘為CLK1,但是其輸入、輸出端口是自外部基于CLK2時鐘域下的時序路徑,指令如下:
create_clock -name CLK2 -period 10 -waveform {0 5}
create_clock -name CLK1 -period 10 [get_ports core_ck] set_input_delay -clock CLK2 -max 2.7 [get_ports core_in]
set_output_delay -clock CLK2 -max 2.7 [get_ports core_out]
以上指令定義設計本身的時鐘CLK1和定義虛拟時鐘CLK2,同時基于虛拟時鐘來定義輸入、輸出端口的時序限制,其輸入、輸出延時都定義為2.7ns。