以下 HPS 周邊頻率可路由至FPGA邏輯:
- emac0_md_clk
- emac0_gtx_clk
- emac1_md_clk
- emac1_gtx_clk
- qspi_sclk_out
- spim0_sclk_out
- spim1_sclk_out
- i2c0_clk
- i2c1_clk
- i2c2_clk
- i2c3_clk
由於 Quartus II 軟體版本 13.0 及更高版本存在問題,如果這些時鐘直接連接到外部 FPGA 引腳,Quartus® fit 可能會產生錯誤訊息。以下是連接到外部引腳的spim1_sclk_out信號示例:
錯誤 (14566):由於與現有約束衝突,無法放置 1 個週邊元件(1 個自動升級的頻率驅動程式)
錯誤 (175020):屬於 Arria V/Cyclone V 硬核處理器系統一部分的自動提升頻率驅動程式受到非法約束 ghrd_hps_0到區域 (92, 67) 到 (183, 137):區域中沒有有效位置
資訊 (14596): 有關故障元件的資訊:
資訊(175028):自動提升的時鐘驅動程式名稱:ghrd:soc_inst|ghrd_hps_0:hps_0|ghrd_hps_0_fpga_interfaces:fpga_interfaces|spim1_sclk_out[0]~CLKENA
有關這些時鐘的更多資訊,請參閱《Cyclone® V 或 Arria® V 裝置手冊,第 3 卷:硬核處理器系統技術參考手冊》(HTTP://www.altera.com/literature/hb/cyclone-v/cv_5v4.pdf,第 27-12 頁)的「外設FPGA頻率」部分。
為避免這些錯誤訊息,必須先通過LUT路由時鐘訊號。這可以通過具現化適用于您的設備系列的lcell_comb基元來實現。以下是 Arria® V SoC spim1_sclk_out 時鐘的lcell_comb Verilog 具現化示例:
arriav_lcell_comb wirelut( .dataa(spim1_sclk_from_hps), .combout(spim1_sclk_to_pin) );
defparam wirelut.lut_mask = 64\'hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
defparam wirelut.dont_touch = 「on」;
在上面的示例中,spim1_sclk_from_hps信號從 HPS 實例連接到 spim1_sclk_out 輸出埠。spim1_sclk_to_pin信號可以連接到頂層輸出埠並分配給FPGA引腳。
使用 lcell_comb 基元將最大限度地減少資源。使用一個小的推斷布林組合函數也將避免此錯誤。使用 Boolean 函數將避免具現化基元,但可能會導致資源使用率略高。
以下是顯示推斷布林值的示例 Verilog 代碼,該值還通過使用低電平有效重定信號對時鐘進行 AND來避免錯誤(導致推斷的 LUT 實例):
分配spim1_sclk_to_pin = spim1_sclk_from_hps & 重置;
此問題已從 Quartus® II 軟體的 15.1 版開始修復。