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# 2145

Synplify - HDL (Verilog/VHDL) でのプルアップ/プルダウンのインスタンシエート方法

説明

キーワード : Synplify, Synplicity, Verilog, VHDL, PULLUP, PULLDOWN, プルアップ, プルダウン

重要度 : 標準

概要 :
Synplify を使用して HDL (Verilog/VHDL) でプルアップまたはプルダウンをインスタンシエートする方法を示します。

メモ :
- CPLD デバイスでは、IOB 内のプルアップは通常の操作では制御できません。 これらのプルアップ抵抗は、デバイスのプログラム、電源投入時、および消去サイクルでのみアクティブになります。

- Virtex の場合、Synplify 5.1.4 以前のバージョンに関する詳細については、(Xilinx Answer 948) を参照してください。

- PULLUP セルまたは PULLDOWN セルをインスタンシエーションするには、Synplify に含まれている Xilinx ファミリのライブラリを使用します。 ザイリンクス用セルのインスタンシエーション方法の詳細については、(Xilinx Answer 244) を参照してください。

- Synplify 5.0.7 では、プルアップおよびプルダウンのインプリメンテーションに使用する xc_pullup および xc_pulldown という新しい属性が追加されています。

ソリューション

1

VHDL
インスタンシエートされたセルを使用したレジスタ付き双方向 I/O での IOB プルアップ/プルダウン


library ieee, xc4000;
use ieee.std_logic_1164.all;
use xc4000.components.all; -- Include Synplify Xilinx Macro Library

entity BIDIR_EX1 is
port (SIGA, SIGB : inout std_logic;
INA, INB, EN, CLK : in std_logic);
end BIDIR_EX1;

architecture XILINX of BIDIR_EX1 is

component PULLUP
PORT ( O: out std_logic );
end component;

component PULLDOWN
PORT ( O: out std_logic );
end component;

signal INA_INT, OUTA_INT : std_logic;
signal INB_INT, OUTB_INT : std_logic;

begin

U0 : PULLUP port map (O => SIGA);
U1 : PULLDOWN port map (O => SIGB);

-- Registered Input path
process (CLK)
begin
if rising_edge(CLK) then
INA_INT <= SIGA;
INB_INT <= SIGB;
end if;
end process;

-- Registered Output path with tri-state
SIGA <= OUTA_INT when (EN = '0') else 'Z';
SIGB <= OUTB_INT when (EN = '0') else 'Z';

process (CLK)
begin
if rising_edge(CLK) then
OUTA_INT <= INA_INT and INA;
OUTB_INT <= INB_INT and INB;
end if;
end process;

2

Verilog
- プルアップをロング ラインに設定する必要がある
- 内部プルダウン接続は不正
- 使用可能なプルダウンは I/O パッド内のみ
// Include Synplify Xilinx Macro Libraries
`include "/products/synplify/lib/xilinx/xc4000.v"

module LONG_LINE_EX1 (INBUSA, EN, SIGA, OUT_SIG);
input [2:0] INBUSA, EN;
input [1:0] SIGA;
output OUT_SIG;

wire INT_SIG;

PULLUP U0 (.O (INT_SIG));

// Infer tri-state buffers
assign INT_SIG = (EN[0] == 1'b1) ? INBUSA[0] & SIGA[0] : 1'bz;
assign INT_SIG = (EN[1] == 1'b1) ? INBUSA[1] & SIGA[0] : 1'bz;
assign INT_SIG = (EN[2] == 1'b1) ? INBUSA[2] & SIGA[0] : 1'bz;

// glue logic
assign OUT_SIG = SIGA[1] ^ INT_SIG;

endmodule

3

VHDL
- プルアップをロング ラインに設定する必要がある
- 内部プルダウン接続は不正
- 使用可能なプルダウンは I/O パッド内のみ


library ieee, xc4000;
use ieee.std_logic_1164.all;
use xc4000.components.all; -- Include Synplify Xilinx Macro Libraries

entity LONG_LINE_EX1 is
port (INBUSA, EN : in std_logic_vector(2 downto 0);
SIGA : in std_logic_vector(1 downto 0);
OUT_SIG : out std_logic);
end LONG_LINE_EX1;

architecture XILINX of LONG_LINE_EX1 is

component PULLUP
PORT (O : out std_logic);
end component;

signal INT_SIG : std_logic;

begin

U0 : PULLUP port map (O => INT_SIG);

-- Infer tri-state buffers
INT_SIG <= INBUSA(0) and SIGA(0) when (EN(0) = '1') else 'Z';
INT_SIG <= INBUSA(1) and SIGA(0) when (EN(1) = '1') else 'Z';
INT_SIG <= INBUSA(2) and SIGA(0) when (EN(2) = '1') else 'Z';

-- glue logic
OUT_SIG <= SIGA(1) xor INT_SIG;

end XILINX;

4

Verilog
インスタンシエートされたセルを使用したレジスタ付き双方向 I/O での IOB プルアップ/プルダウン


// Include Synplify Xilinx Macro Libraries
`include "/products/synplify/lib/xilinx/xc4000.v"

module BIDIR_EX1 (SIGA, SIGB, INA, INB, EN, CLK);
inout SIGA, SIGB;
input INA, INB, EN, CLK;

reg INA_INT, OUTA_INT;
reg INB_INT, OUTB_INT;

PULLUP U0 (.O (SIGA));
PULLDOWN U1 (.O (SIGB));

// Registered Input path
always @(posedge CLK)
begin
INA_INT = SIGA;
INB_INT = SIGB;
end

// Registered Output path with tri-state
assign SIGA = !EN ? OUTA_INT : 1'bz;
assign SIGB = !EN ? OUTB_INT : 1'bz;

always @(posedge CLK)
begin
OUTA_INT = INA_INT & INA;
OUTB_INT = INB_INT & INB;
end

endmodule

5

VHDL
xc_pulldown/xc_pullup を使用したレジスタ付き双方向 I/O での IOB プルアップ/プルダウン
(Snplify バージョン 5.0.7 以降でのみ使用可能)


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

entity BIDIR_EX1 is
port (SIGA, SIGB : inout std_logic;
INA, INB, EN, CLK : in std_logic);

attribute xc_pullup of SIGA : signal is true;
attribute xc_pulldown of SIGB : signal is true;

end BIDIR_EX1;

architecture XILINX of BIDIR_EX1 is

signal INA_INT, OUTA_INT : std_logic;
signal INB_INT, OUTB_INT : std_logic;

begin

-- Registered Input path
process (CLK)
begin
if rising_edge(CLK) then
INA_INT <= SIGA;
INB_INT <= SIGB;
end if;
end process;

-- Registered Output path with tri-state
SIGA <= OUTA_INT when (EN = '0') else 'Z';
SIGB <= OUTB_INT when (EN = '0') else 'Z';

process (CLK)
begin
if rising_edge(CLK) then
OUTA_INT <= INA_INT and INA;
OUTB_INT <= INB_INT and INB;
end if;
end process;

end XILINX;

6

Verilog
xc_pulldown/xc_pullup を使用したレジスタ付き双方向 I/O での IOB プルアップ/プルダウン
(Snplify バージョン 5.0.7 以降でのみ使用可能)


module BIDIR_EX2 (SIGA, SIGB, INA, INB, EN, CLK);
inout SIGA /* synthesis xc_pullup = 1 */;
inout SIGB /* synthesis xc_pulldown = 1 */;
input INA, INB, EN, CLK;

reg INA_INT, OUTA_INT;
reg INB_INT, OUTB_INT;

// Registered Input path
always @(posedge CLK)
begin
INA_INT = SIGA;
INB_INT = SIGB;
end

// Registered Output path with tri-state
assign SIGA = !EN ? OUTA_INT : 1'bz;
assign SIGB = !EN ? OUTB_INT : 1'bz;

always @(posedge CLK)
begin
OUTA_INT = INA_INT & INA;
OUTB_INT = INB_INT & INB;
end

endmodule
AR# 2145
作成日 08/21/2007
最終更新日 01/22/2013
ステータス アクティブ
タイプ 一般