インテル® Quartus® Prime プロ・エディション ユーザーガイド: サードパーティー合成

ID 683122
日付 9/24/2018
Public

インテルのみ表示可能 — GUID: mwh1409960071855

Ixiasoft

ドキュメント目次

1.8.6.3. dedicated_mult属性の設定

HDLコードで乗算器の実装を制御するには、次の例に示すように、適切な値を持つdedicated_mult属性を使用します。

Verilog HDLでのdedicated_mult属性の設定

//synthesis attribute <signal name> dedicated_mult <value>

HDLでのdedicated_mult属性の設定

ATTRIBUTE dedicated_mult: STRING;
ATTRIBUTE dedicated_mult OF <signal name>: SIGNAL IS <value>;

dedicated_mult属性は、信号とワイヤーに適用できますが、レジスターに適用すると機能しません。この属性は、a = b * cなどの単純な乗数コードにのみ適用できます。

dedicated_mult属性が設定されている信号は、デザイン最適化のためにPrecision Synthesisソフトウェアによる合成時に削除される場合があります。そのような場合に実装を強制したいときは、preserve_signal属性をTRUEに設定して信号を保持する必要があります。

Verilog HDLでのpreserve_signal属性の設定

//synthesis attribute <signal name> preserve_signal TRUE

VHDLでのpreserve_signal 属性の設定

ATTRIBUTE preserve_signal: BOOLEAN;
ATTRIBUTE preserve_signal OF <signal name>: SIGNAL IS TRUE;

ロジックに実装されたVerilog HDL乗算器

module unsigned_mult (result, a, b);
   output [15:0] result;
   input [7:0] a;
   input [7:0} b;
   assign result = a * b;
   //synthesis attribute result dedicated_mult OFF
endmodule

ロジックに実装されたVHDL乗算器

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_unsigned.ALL;

ENTITY unsigned_mult IS
   PORT(
      a: IN std_logic_vector (7 DOWNTO 0);
      b: IN std_logic_vector (7 DOWNTO 0);
      result: OUT std_logic_vector (15 DOWNTO 0));
ATTRIBUTE dedicated_mult: STRING;
END unsigned_mult;

ARCHITECTURE rtl OF unsigned_mult IS
   SIGNAL a_int, b_int: UNSIGNED (7 downto 0);
   SIGNAL pdt_int: UNSIGNED (15 downto 0);
ATTRIBUTE dedicated_mult OF pdt_int: SIGNAL IS "OFF;
BEGIN
   a_int <= UNSIGNED (a);
   b_int <= UNSIGNED (b);
   pdt_int <= a_int * b_int;
   result <= std_logic_vector(pdt_int);
END rtl;