虛擬時鐘
虛擬時鐘,指的是在設計中不存在的時鐘,因此設計中定義虛擬時鐘滿足以下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。