以下の 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): リージョン (92, 67) から (183, 137) への ghrd_hps_0 Arria V/Cyclone V ハード プロセッサ システムの一部である自動昇格されたクロック ドライバーの制約が無効です: リージョンに有効な場所がありません
情報 (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) );
デフパラム wirelut.lut_mask = 64\'hAAAAAAAAAAAAAAAA;
defparam wirelut.dont_touch = "on";
上記の例では、spim1_sclk_from_hps 信号は HPS インスタンスから spim1_sclk_out 出力ポートに接続されています。spim1_sclk_to_pin信号をトップレベルの出力ポートに接続し、FPGAピンに割り当てることができます。
lcell_combプリミティブを使用すると、リソースが最小限に抑えられます。小さな推論ブール組み合わせ関数を使用すると、このエラーも回避されます。Boolean 関数を使用すると、プリミティブをインスタンス化する必要がなくなりますが、リソース使用量が若干増加する可能性があります。
以下は、アクティブな Low リセット信号でクロックを AND 処理することでエラーを回避する (LUT インスタンスの推論を引き起こす) 推論されたブール値を示す Verilog コードの例です。
assign spim1_sclk_to_pin = spim1_sclk_from_hps & resetn;
この問題は、Quartus® II ソフトウェアのリリース 15.1 以降で修正されています。