AR# 4508

Synplify - .ispad または black_box_pad_pin を使用して IBUF/OBUF 挿入をオフにする方法

説明

キーワード : VHDL, Verilog, Synplify

重要度 : 標準

概要 :
IBUF/OBUF 挿入をオフにする方法を教えてください。

Synplify は、IBUF/OBUF を、最上位モジュール/エンティティのポート リストにリストされているすべての信号に、自動的に挿入します。 IBUF、OBUF、OFD などの I/O セルを含む最適化前のネットリストが含まれている場合、これらのポートは、この機能をオフにするために、チェックしておく必要があります。

まず、ブラック ボックスとしてエンベデッド I/O セルを含むモジュール/エンティティを定義します。 次に、これらのポートに対し、「.ispad」(5.0.6 またはそれ以降) または「black_box_pad_pin」(5.0.7 またはそれ以降) と呼ばれる属性をつけます。これで、ポートはパッドとして宣言されます。 以上の設定で、Synplicity でポートにバッファが自動挿入されなくなります。

Sinplify 5.0.7 またはそれ以降のバージョンでは、black_box_pad_pin 属性が新しく導入されています。 この属性はすべてのザイリンクス ファミリで使用できます。 .ispad 属性は Virtex 以外のザイリンクス ファミリで使用できます。

メモ : .ispad および black_box_pad_pin は指示子で、HDL でのみ適用され、SDC ファイルでは使用できません。

ソリューション

1

.ispad 属性を使用した場合 (VHDL)

メモ :
- この方法は、Synplify 5.0.6 またはそれ以降のバージョンで使用できます。
- .ispad 属性は Virtex 以外のザイリンクス ファミリで使用できます。
- モデルのブラック ボックス エンティティおよびアーキテクチャを定義します。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity FOO1 is
port(A, B : in std_logic_vector(3 downto 0);
C : out std_logic_vector(3 downto 0);
WE : out std_logic);
end FOO1;

architecture BEHAVE of FOO1 is

begin

C <= A + B;
WE <= A(0) and A(1) and A(2) and A(3);

end BEHAVE;


library ieee;
use ieee.std_logic_1164.all;

entity FOO2 is
port(A, B : in std_logic_vector(3 downto 0);
WE : in std_logic;
D : out std_logic_vector(3 downto 0);
ACT : out std_logic);
-- The .ispad attribute is applied to the ports of the entity
-- that is declared as a black box.
attribute ?_.ispad?_ : boolean;
attribute ?_.ispad?_ of D : signal is true;
attribute ?_.ispad?_ of ACT : signal is true;
end FOO2;

architecture BEHAVE of foo2 is

attribute syn_black_box : boolean;
attribute syn_black_box of BEHAVE : architecture is true;

begin

end BEHAVE;


library ieee;
use ieee.std_logic_1164.all;

entity TOP is
port (A, B1, B2 : in std_logic_vector(3 downto 0);
C, D : out std_logic_vector(3 downto 0);
ACTIVE : out std_logic);
end TOP;

architecture BEAVE of top is

component FOO1
port(A, B : in std_logic_vector(3 downto 0);
C : out std_logic_vector(3 downto 0);
WE : out std_logic);
end component;

component FOO2
port(A, B : in std_logic_vector(3 downto 0);
WE : in std_logic;
D : out std_logic_vector(3 downto 0);
ACT : out std_logic);
end component;

signal WE : std_logic;

begin

U0 : FOO1 port map (A => A, B => B1, C => C, WE => WE);
U1 : FOO2 port map (A => A, B => B2, WE => WE, D => D, ACT => ACTIVE);

end BEAVE;

2

.ispad 属性を使用した場合 (Verilog)

メモ :
- この方法は、Synplify 5.0.6 またはそれ以降のバージョンで使用できます。
- .ispad 属性は Virtex 以外のザイリンクス ファミリで使用できます。

module FOO1 (A, B, C, WE);
input [3:0] A, B;
output [3:0] C;
output WE;

assign C = A + B;
assign WE = A[0] & A[1] & A[2] & A[3];

endmodule

// The ".ispad" is applied to the ports of the module that
// are declared as a black_box.
module FOO2 (A, B, WE, D, ACT) /* synthesis syn_black_box */;
input [3:0] A, B;
input WE;
output [3:0] D /* synthesis .ispad = 1 */;
output ACT /* synthesis .ispad = 1 */;

endmodule

module TOP (A, B1, B2, C, D, ACTIVE);
input [3:0] A, B1, B2;
output [3:0] C, D;
output ACTIVE;

wire WE;

FOO1 U0 (.A (A), .B (B1), .C (C), .WE (WE));
FOO2 U1 (.A (A), .B (B2), .WE (WE), .D (D), .ACT (ACTIVE));

endmodule

3

black_box_pad_pin 属性を使用した場合 (VHDL)

メモ :
- この方法は、Synplify 5.0.7 またはそれ以降のバージョンで使用できます。
- black_box_pad_pin 属性はすべてのデバイス ファミリで使用できます。
- ブラック ボックス コンポーネントを定義します。 ブラック ボックス エンティティおよびアーキテクチャをインスタンシエートする必要はありません。

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity FOO1 is
port(A, B : in std_logic_vector(3 downto 0);
C : out std_logic_vector(3 downto 0);
WE : out std_logic);
end FOO1;

architecture BEHAVE of FOO1 is

begin

C <= A + B;
WE <= A(0) and A(1) and A(2) and A(3);

end BEHAVE;

library ieee, synplify;
use ieee.std_logic_1164.all;
use synplify.attributes.all; -- Define Synplify attributes

entity TOP is
port (A, B1, B2 : in std_logic_vector(3 downto 0);
C, D : out std_logic_vector(3 downto 0);
ACTIVE : out std_logic);
end TOP;

architecture BEAVE of top is

component FOO1
port(A, B : in std_logic_vector(3 downto 0);
C : out std_logic_vector(3 downto 0);
WE : out std_logic);
end component;

component FOO2
port(A, B : in std_logic_vector(3 downto 0);
WE : in std_logic;
D : out std_logic_vector(3 downto 0);
ACT : out std_logic);
end component;
attribute syn_black_box of FOO2 : component is true;
attribute black_box_pad_pin of FOO2 : component is "D(3:0), ACT";

signal WE : std_logic;

begin

U0 : FOO1 port map (A => A, B => B1, C => C, WE => WE);
U1 : FOO2 port map (A => A, B => B2, WE => WE, D => D, ACT => ACTIVE);

end BEAVE;

4

black_box_pad_pin 属性を使用した場合 (Verilog)

メモ :
- この方法は、Synplify 5.0.7 またはそれ以降のバージョンで使用できます。
- black_box_pad_pin 属性はすべてのデバイス ファミリで使用できます。

module FOO1 (A, B, C, WE);
input [3:0] A, B;
output [3:0] C;
output WE;

assign C = A + B;
assign WE = A[0] & A[1] & A[2] & A[3];

endmodule

module FOO2 (A, B, WE, D, ACT)
/* synthesis syn_black_box black_box_pad_pin="D[3:0],ACT" */;
input [3:0] A, B;
input WE;
output [3:0] D;
output ACT;

endmodule

module TOP (A, B1, B2, C, D, ACTIVE);
input [3:0] A, B1, B2;
output [3:0] C, D;
output ACTIVE;

wire WE;

FOO1 U0 (.A (A), .B (B1), .C (C), .WE (WE));
FOO2 U1 (.A (A), .B (B2), .WE (WE), .D (D), .ACT (ACTIVE));

endmodule

アンサー レコード リファレンス

関連アンサー レコード

AR# 4508
日付 12/15/2012
ステータス アクティブ
種類 一般