クリティカルな問題
FIR コンパイラー II が生成する FIR フィルターの一部にエラーが生じる を選択して、適切な DSP ブロック入力レジスターをすべて使用します。Time彼方 これらの FIR フィルターが正しく分析されない場合、これらのフィルターは タイミングを満たす。実際には、未解決のパスのタイミングは次のとおりです。 これらの FIR フィルターはタイミング関連の原因となる可能性があります。 ハードウェアに実装されている場合のエラー。この問題は、Stratix V、 Arria V (GX および GZ の両方)、およびCyclone V デバイス。この問題は影響を受ける FIR フィルター:systolic mode を使用する奇数の乗算器を必要とします。この 問題は、偶数のフィルターを必要とする FIR フィルターに影響を与えません。 乗算 器。奇数、偶数は物理乗算器の数を参照 最初に設定したタップ数ではなく、FIR フィルターを実装している 指定。偶数タップの FIR フィルターには奇数のタップが必要な場合があります。 物理乗算器数またはその逆。かどうかを確認するには FIR フィルターが影響を受けます。以下の手順に従ってください:生成された VHDL コードがスチル乗算器を含んでいるかどうかを判断します。A systolic FIR フィルターには、CHAINMULTADD コメントが多数含まれています。 FIR フィルターに次のようなコメントが含まれていない場合 次のコメントでは、FIR フィルターが systolic FIR フィルターではありません。 影響はありません。 --u0_m0_wo0_cma0(CHAINMULTADD,33)@13
FIR に 1 つ以上の CHAINMULTADD コメントが含まれている場合は、 そのような各コメントに続く VHDL コード。次の数行 CHAINMULTADD コメントに、次のような chainmultadd プロセスを見つけます。 次のコード:u0_m0_wo0_cma0_chainmultadd: PROCESS (clk、areset) BEGIN IF (areset = '1') なら、u0_m0_wo0_cma0_a <= (その他 => (その他 =>'0'); u0_m0_wo0_cma0_b <= (その他 => (その他 =>'0'); u0_m0_wo0_cma0_c <= (その他 => (その他 =>'0'); u0_m0_wo0_cma0_anl < = '0'; u0_m0_wo0_cma0_s <= (その他 => (その他 =>'0'); ELSIF (clk'EVENT and clk = '1') 次に IF (d_u0_m0_wo0_compute_q_13_q = "1") 次にu0_m0_wo0_cma0_a(0) <= 署名 (RESIZE (署名(u0_m0_wo0_wi0_delayr0_q)、17)) ; u0_m0_wo0_cma0_a(1) < = 署名 (RESIZE (署名 (u0_m0_wo0_wi0_split1_b)、17)); u0_m0_wo0_cma0_a(2) <= 署名 (RESIZE (署名 (u0_m0_wo0_wi0_split1_c)、17)); u0_m0_wo0_cma0_a(3) <= (その他 =>'0') u0_m0_wo0_cma0_b(0) < = 署名 (RESIZE (署名 (u0_m0_wo0_wi0_split4_c)、17)); u0_m0_wo0_cma0_b(1) < = 署名 (RESIZE (署名 (u0_m0_wo0_wi0_split4_b)、17)); u0_m0_wo0_cma0_b(2) <= 署名 (RESIZE (SIGNED(u0_m0_wo0_cma0_mux_2_q)、17); u0_m0_wo0_cma0_b(3) <= (その他 =>'0') u0_m0_wo0_cma0_c(0) <= 「」を「」と入力します(RESIZEED(U0_M0_WO0_CA2_Q)、3); u0_m0_wo0_cma0_c(1) <= 「」を「」と入力します(RESIZEED(U0_M0_WO0_CA2_Q)、3); u0_m0_wo0_cma0_c (2) < = 「」を「」と入力します(RESIZEED(U0_M0_WO0_CA2_Q)、3); u0_m0_wo0_cma0_c(3) <= (その他 =>'0') u0_m0_wo0_cma0_anl <= not (u0_m0_wo0_aseq_q(0)); END IF; IF (d_u0_m0_wo0_compute_q_14_q = 「1」) u0_m0_wo0_cma0_s(0) <= u0_m0_wo0_cma0_z(0) u0_m0_wo0_cma0_y(0); u0_m0_wo0_cma0_s(1) <= u0_m0_wo0_cma0_y(1); u0_m0_wo0_cma0_s(2) < = u0_m0_wo0_cma0_y(2); u0_m0_wo0_cma0_s(3) < = u0_m0_wo0_cma0_y(3); END IF; END IF; エンドプロセス。太字のライン 同じ乗算器からゼロまでの入力 (スプライヤーの乗算器) の両方 FIR フィルターが影響を受けます。chainmultadd プロセスが存在しない場合 ストライバー・マルチプライヤーが含まれている場合、FIR は影響を受けません。
この問題を回避するには、指定した長さを長くしてください。 FIR フィルターの場合。適切な長さを選択すると、実装 スのマルチプライヤーは必要ありません。または、手動で編集する インテル® FIR コンパイラー II によって生成された VHDL により、Quartus® II の保存を追加 DSP 入力レジスターに属性を入力します。Quartus® II 合成は、 スート・マルチプライヤー入力レジスターと Quartus を取り外さないでください。 II フィッターは、すべての DSP ブロック入力レジスターを正しくパックします。宛先 VHDL を手動で編集し、次の手順に従います:宣言を見つける 次のような入力レジスターの種類: u0_m0_wo0_cma0_a_typeは、SIGNED (16 downto 0) の配列 (0 ~ 3) です。信号 u0_m0_wo0_cma0_a: u0_m0_wo0_cma0_a_type;u0_m0_wo0_cma0_b_type と入力します。 is array (0 ~ 3) の SIGNED(16 downto 0);シグナル・u0_m0_wo0_cma0_b : u0_m0_wo0_cma0_b_type;type u0_m0_wo0_cma0_c_type is array(0 to 3) 3) のs-ト(2 downto 0);シグナル・u0_m0_wo0_cma0_c: u0_m0_wo0_cma0_c_type;If FIR フィルターは DSP ブロックのプリアダー (\b\' 信号) を使用しません。 が存在しません。次のコードを追加します。属性 u0_m0_wo0_cma0_aの保存: シグナルは真です。属性保持 u0_m0_wo0_cma0_bの数: シグナルが当てはまります。u0_m0_wo0_cma0_cの属性保持 : シグナルが true です。preserve 属性を追加するだけで宣言する必要があります 1 回のみ。
この問題は DSP Builder v13.1 で修正されています。