源同步輸入介面的約束方式與系統同步輸入介面類似。FPGA接收一個時鐘,並使用該時鐘來鎖存輸入數據。在邊緣對齊的源同步介面中,時鐘轉換與數據轉換同時發生。圖1所示為源同步輸入介面示例。
使用以下步驟約束邊緣對齊的源同步輸入介面:
-
創建虛擬時鐘、基本時鐘和生成的時鐘
-
添加輸入延遲約束
-
添加虛假路徑例外,從時序分析和報告中排除無效路徑
有關這些步驟中的任何一個或下面描述的計算和約束的更多詳細資訊,請參閱 href="/literature/an/an433.pdf">AN 433:約束和分析源同步介面 (PDF)。
時鐘
虛擬時鐘對外部器件中的時鐘進行建模,該時鐘驅動數據寄存器以將數據傳輸到FPGA。
FPGA的輸入埠上需要一個基頻時鐘。基準時鐘描述了FPGA時鐘輸入端的時鐘特性。
所有鎖相環 (PLL) 輸出都需要生成的時鐘。在邊沿對齊的源同步輸入介面中,PLL必須將接收到的時鐘相移90度,以滿足數據採集寄存器的內部時序要求。
輸入延遲約束
您可以使用最大偏斜規範來計算輸入延遲值。最大偏斜規格表示數據總線各個位到達FPGA時允許的時間變化。
輸入最大延遲值為最大偏斜值。
輸入最小延遲的值為-最大偏斜值。
錯誤路徑異常
在這個邊緣對齊的示例中,數據在上升-上升和下降-下降源和目標時鐘轉換時傳輸。使用假路徑異常來減少上升-下降和下降-上升時鐘轉換,因為數據不會在相對邊沿的時鐘轉換上傳輸。
範例 SDC 檔
# 創建虛擬時鐘以描述數據時鐘 # 外部設備 create_clock -name virt_clk -period 10 # 在 FPGA 的輸入埠上創建一個基本時鐘,create_clock -name input_clock -period 10 [get_ports clk_in] # 在 PLL 輸出上創建生成的時鐘 create_generated_clock -name data_clock -source [get_pins pll|inclk[0]] \ 相位 90 [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]