Visible to Intel only — GUID: mwh1409960073579
Ixiasoft
Visible to Intel only — GUID: mwh1409960073579
Ixiasoft
2.9.6.5. Controlling DSP Block Inference
You can use the extract_mac attribute to prevent inference of an ALTMULT_ADD or ALTMULT_ACCUM IP cores in a certain module or entity.
Value | Description |
---|---|
TRUE | The ALTMULT_ADD or ALTMULT_ACCUM IP core is inferred. |
FALSE | The ALTMULT_ADD or ALTMULT_ACCUM IP core is not inferred. |
To control inference, use the extract_mac attribute with the appropriate value from the examples below in your HDL code.
Setting the extract_mac Attribute in Verilog HDL
//synthesis attribute <module name> extract_mac <value>
Setting the extract_mac Attribute in VHDL
ATTRIBUTE extract_mac: BOOLEAN;
ATTRIBUTE extract_mac OF <entity name>: ENTITY IS <value>;
Using extract_mac, dedicated_mult, and preserve_signal in Verilog HDL
To control the implementation of the multiplier portion of a multiply-accumulator or multiply-adder, you must use the dedicated_mult attribute.
You can use the extract_mac, dedicated_mult, and preserve_signal attributes (in Verilog HDL and VHDL) to implement the given DSP function in logic in the Intel® Quartus® Prime software.
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
Using extract_mac, dedicated_mult, and preserve_signal in VHDL
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;
Did you find the information on this page useful?
Feedback Message
Characters remaining: