インテルのみ表示可能 — GUID: mwh1409960073579
Ixiasoft
インテルのみ表示可能 — GUID: mwh1409960073579
Ixiasoft
1.8.6.5. 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;