源同步輸入介面的約束方式與系統同步輸入介面類似。FPGA接收一個時鐘,並使用該時鐘來鎖存輸入數據。在居中對齊的源同步介面中,時鐘轉換發生在數據有效窗口的中間。圖1所示為源同步輸入介面示例。
使用以下步驟約束居中對齊的源同步輸入介面:
- 創建虛擬時鐘、基本時鐘和生成的時鐘
- 添加輸入延遲約束
- 添加虛假路徑例外,從時序分析和報告中排除無效路徑
有關這些步驟中的任意步驟或下面描述的計算和約束的更多詳細資訊,請參閱AN 433:約束和分析源同步介面 (PDF)。
時鐘
虛擬時鐘對外部器件中的時鐘進行建模,該時鐘驅動數據寄存器以將數據傳輸到FPGA。
FPGA的輸入埠上需要一個基頻時鐘。基準時鐘描述了FPGA時鐘輸入端的時鐘特性。如果輸入時鐘與數據居中對齊,則必須使用 -waveform 選項指定與時鐘相移相對應的上升和下降時鐘沿。
所有鎖相環 (PLL) 輸出都需要生成的時鐘。
輸入延遲約束
您可以使用最大偏斜規範來計算輸入延遲值。最大偏斜規格表示數據總線各個位到達FPGA時允許的時間變化。
輸入最大延遲值為最大偏斜值。
輸入最小延遲的值為-最大偏斜值。
錯誤路徑異常
在這個居中對齊的示例中,數據在上升-上升和下降-下降源和目標時鐘轉換時傳輸。使用假路徑異常來減少上升-下降和下降-上升時鐘轉換,因為數據不會在相對邊沿的時鐘轉換上傳輸。
範例 SDC 檔
# 建立虛擬時鐘以描述外部裝置 # 中的資料時鐘 。 create_clock -name virt_clk -period 10 # 在 FPGA 的輸入埠上創建一個基時鐘,具有 10 ns 的週期 # 和 90 度的相移,因為介面 create_clock -name input_clock -週期 10 -波形 { 2.5 7.5 } [get_ports clk_in] # 在 PLL 輸出上創建生成的時鐘 create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \ [get_pins pll|clk[0]] # 添加最大值和最小輸入延遲約束 # 假設偏差要求為 +/- 250ps # 使用上面列出的輸入延遲值的公式 set_input_delay -max -clock virt_clk 0.250 [get_ports data_in*] set_input_delay -min -clock virt_clk -0.250 [get_ports data_in*] set_input_delay -max -clock virt_clk -clock_fall \ 0.250 [get_ports data_in*] -add set_input_delay -min -clock virt_clk -clock_fall \ -0.250 [get_ports data_in*] -add # 為跨時鐘傳輸添加假路徑異常 set_false_path -setup -end -rise_from [get_clocks virt_clk] \ -fall_to [get_clocks data_clock] set_false_path -setup -end -fall_from [get_clocks virt_clk] \ -rise_to [get_clocks data_clock] set_false_path -hold -end -rise_from [get_clocks virt_clk] \ -rise_to [get_clocks data_clock] set_false_path -hold -end -fall_from [get_clocks virt_clk] \ -fall_to [get_clocks data_clock]