1.1. Precision RTL Synthesisのサポートについて
1.2. デザインフロー
1.3. インテル デバイスファミリーのサポート
1.4. Precision Synthesis生成ファイル
1.5. Precision Synthesisソフトウェアでのプロジェクトの作成およびコンパイル
1.6. Precision Synthesisデザインのマッピング
1.7. デザイン合成と結果の評価
1.8. インテルFPGA IPコアおよびアーキテクチャーに特有の機能のガイドライン
1.9. Mentor GraphicsPrecision*Synthesisサポート改訂履歴
1.8.1. IP Catalogによって生成されたVerilog HDLファイルを使用したIPコアのインスタンス化
1.8.2. IP Catalogによって生成されたVHDLファイルを使用したIPコアのインスタンス化
1.8.3. IP Catalogとパラメーター・エディターを使用した知的財産のインスタンス化
1.8.4. 生成されたVerilog HDLファイルを使用したブラックボックスIPファンクションのインスタンス化
1.8.5. 生成されたVHDLファイルを使用したブラックボックスIPファンクションのインスタンス化
1.8.6. HDLコードからのインテルFPGA IPコアの推測
2.10.1.1. IP Catalogによって生成されたVerilog HDLファイルを使用したインテル FPGA IPコアのインスタンス化
2.10.1.2. IP Catalogによって生成されたVHDLファイルを使用したインテル FPGA IPコアのインスタンス化
2.10.1.3. インスタンス化されたインテル FPGA IPコアに対するSynplifyのデフォルト動作の変更
2.10.1.4. IP Catalogとパラメーター・エディターを使用した知的財産のインスタンス化
2.10.1.5. 生成されたVerilog HDLファイルを使用したブラックボックス・コアのインスタンス化
2.10.1.6. 生成されたVerilogファイルを使用したブラックボックスIPコアのインスタンス化
2.10.1.7. ブラックボックスを作成するためのその他のSynplifyソフトウェアの属性
1.8.6.5. DSPブロック推測の制御
デフォルトでは、Precision Synthesisソフトウェアは、ALTMULT_ADDまたはALTMULT_ACCUM IPコアをデザインで適切に推測します。これらのIPコアにより、 インテル® Quartus® Prime開発ソフトウェアは、デバイスの利用率およびファンクションのサイズに応じて、ロジックブロックまたはDSPブロックのいずれかを選択します。
extract_mac属性を使用すると、特定のモジュールまたはエンティティー内のALTMULT_ADDまたはALTMULT_ACCUM IPコアの推測を防止できます。
| 値 | 説明 |
|---|---|
| TRUE | ALTMULT_ADDまたはALTMULT_ACCUM IPコアが推測されます。 |
| FALSE | ALTMULT_ADDまたはALTMULT_ACCUM IPコアが推測されません。 |
推測の制御には、extract_mac属性を使用し、次の例に示すようにHDLコードには適切な値を当てます。
Verilog HDLでのextract_mac属性の設定
//synthesis attribute <module name> extract_mac <value>
VHDLでのextract_mac属性の設定
ATTRIBUTE extract_mac: BOOLEAN;
ATTRIBUTE extract_mac OF <entity name>: ENTITY IS <value>;
Verilog HDLでのextract_mac、dedicated_mult、およびpreserve_signalの使用
乗算累算器または乗算加算器の乗算器部分の実装を制御するには、dedicated_mult属性を使用する必要があります。
extract_mac、dedicated_mult、およびpreserve_signal属性(Verilog HDLおよびVHDL)を使用して、 インテル® Quartus® Prime開発ソフトウェアのロジックで指定のDSPファンクションを実装することができます。
module unsig_altmult_accuml (dataout, dataa, datab, clk, aclr, clken);
input [7:0} dataa, datab;
input clk, aclr, clken;
output [31:0] dataout;
reg [31:0] dataout;
wire [15:0] multa;
wire [31:0] adder_out;
assign multa = dataa * datab;
//synthesis attribute multa preserve_signal TRUE
//synthesis attribute multa dedicated_mult OFF
assign adder_out = multa + dataout;
always @ (posedge clk or posedge aclr)
begin
if (aclr)
dataout <= 0;
else if (clken)
dataout <= adder_out;
end
//synthesis attribute unsig_altmult_accuml extract_mac FALSE
endmodule
Verilogでのextract_mac、dedicated_mult、およびpreserve_signalの使用
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_signed.all;
ENTITY signedmult_add IS
PORT(
a, b, c, d: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
result: OUT STD_LOGIC_VECTOR (15 DOWNTO 0));
ATTRIBUTE preserve_signal: BOOLEANS;
ATTRIBUTE dedicated_mult: STRING;
ATTRIBUTE extract_mac: BOOLEAN;
ATTRIBUTE extract_mac OF signedmult_add: ENTITY IS FALSE;
END signedmult_add;
ARCHITECTURE rtl OF signedmult_add IS
SIGNAL a_int, b_int, c_int, d_int : signed (7 DOWNTO 0);
SIGNAL pdt_int, pdt2_int : signed (15 DOWNTO 0);
SIGNAL result_int: signed (15 DOWNTO 0);
ATTRIBUTE preserve_signal OF pdt_int: SIGNAL IS TRUE;
ATTRIBUTE dedicated_mult OF pdt_int: SIGNAL IS "OFF";
ATTRIBUTE preserve_signal OF pdt2_int: SIGNAL IS TRUE;
ATTRIBUTE dedicated_mult OF pdt2_int: SIGNAL IS "OFF";
BEGIN
a_int <= signed (a);
b_int <= signed (b);
c_int <= signed (c);
d_int <= signed (d);
pdt_int <= a_int * b_int;
pdt2_int <= c_int * d_int;
result_int <= pdt_int + pdt2_int;
result <= STD_LOGIC_VECTOR(result_int);
END rtl;