UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

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
作成日 08/21/2007
最終更新日 12/15/2012
ステータス アクティブ
タイプ 一般