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
日付 01/22/2013
ステータス アクティブ
種類 一般