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

FPGA Express 3.3: Virtex-E I/O 標準 (LVDS、LVPECL) のインスタンシエート方法

説明

キーワード:Foundation, Express, FPGA, Virtex-E, LVDS, LVPECL, 3.1, 3.2, 3.3

重要度 :重要

概要:
バージョン 3.3.1 以前の FPGA Express には、Virtex I/O 標準バッファがすべて含まれています。 これらのバッファはどのポートに対してもインスタンシエート可能で、FPGA Express はこれらが入力バッファなのか出力バッファなのか認識します。

ただし、バージョン 3.3.1 以前の FPGA Express には、新しい Virtex-E の I/O バッファは含まれていないため、合成時に特別な操作が必要です。

Virtex-E の I/O バッファを使用する場合の詳細については <a href=8187.htm>(ザイリンクス アンサー #8187)</a> を参照してください。
また<a href=9849.htm>ザイリンクス アンサー #9849</a> も参照してください。

ソリューション

1

デザイン内のいくつかのポートでしか Virtex-E の I/O 標準を使用しない場合は、FPGA Express で Virtex-E 標準を使用しているポートを除くすべてのポートに対し、パッドが追加されるように設定することができます。 FPGA Express は、これらのバッファを認識しないので、これらのポートに余分な IBUF または OBUF を配置し、これがインプリメンテーション中にエラーを引き起こします。

この場合、次の 3 つの操作を行ってください。

1. Virtex-E のバッファおよびそのパッドをインスタンシエートします。
2. 最上位のポート宣言には、これらの I/O ポートを含めません。
3. FPGA Express で、Virtex-E を除く Virtex シリーズのインスタンシエートされたバッファを含めた、ほかのポートのパッドが追加されるようにします。Foundation の場合は [Insert I/O Pads] チェックボックスをオンに、また FPGA の場合は [Do Not Insert I/O Pads] チェックボックスをオフにします。

ソリューション 1 で示したコード記述例に、ロジックを追加し、clk、rst、ce がデフォルトの LVTTL 標準を使用し、din、dout_p、dout_n が LVDS 標準を使用するようにします。

Verilog:

module lvds_v_pads (clk, rst, ce); // NOTE: din, dout_p, and dout_n are not listed input clk, rst, ce; reg data_int, dout_p, dout_n; wire din, din_int, data_n_int;

always @(posedge clk or posedge rst)
begin
if (rst)
data_int = 1'b0;
else if(ce)
data_int = din_int;
end

IBUF_LVDS data0 (.I(din), .O(din_int));
IPAD data0_pad (.PAD(din)); // NOTE: pads are instantiated along with the VirtexE buffers

OBUF_LVDS data1_p (.I(data_int), .O(dout_p)); OPAD data1_p_pad (.PAD(dout_p)); assign data_n_int = !data_int;
OBUF_LVDS data1_n (.I(data_n_int), .O(dout_n)); OPAD data1_n_pad (.PAD(dout_n));

endmodule
VHDL:

library IEEE;
use IEEE.std_logic_1164.all;

entity lvds_vhdl_pads is
port (clk, rst, ce: in STD_LOGIC); -- NOTE: din, dout_p, and dout_n are not listed
end lvds_vhdl_pads;

architecture lvds_vhdl_pads_arch of lvds_vhdl_pads is
signal din_int, data_int, data_n_int: STD_LOGIC;
signal din, dout_p, dout_n: STD_LOGIC;

component IBUF_LVDS port
(I: in STD_LOGIC; O: out STD_LOGIC);
end component;

component IPAD port
(PAD: out STD_LOGIC);
end component;

component OBUF_LVDS port
(I: in STD_LOGIC; O: out STD_LOGIC);
end component;

component OPAD port
(PAD: in STD_LOGIC);
end component;

begin

process (clk, rst)
begin
if rst='1' then
data_int <= '0';
elsif (clk'event and clk='1') then
if (ce='1') then
data_int <= din_int;
end if;
end if;
end process;

data0: IBUF_LVDS port map (I=>din, O=>din_int);
data0_pad: IPAD port map (PAD=>din); -- NOTE: pads are instantiated along with the VirtexE buffers

data1_p: OBUF_LVDS port map (I=>data_int, O=>dout_p);
data1_p_pad: OPAD port map (PAD=>dout_p);
data_n_int <= not data_int;
data1_n: OBUF_LVDS port map (I=>data_n_int, O=>dout_n);
data1_n_pad: OPAD port map (PAD=>dout_n);

end lvds_vhdl_pads_arch;


上述の HDL コードのサンプル UCF は Virtex 100E-CS144 のものです。

NET "data0" LOC = F2; # IO_L26P, in bank0
NET "data1_p" LOC = A5; # IO_L1P_YY, in bank0
NET "data1_n" LOC = B5; # IO_L1N_YY, in bank0
NET "clk" LOC = B7; # in bank1
NET "ce" LOC = C8; # in bank1
NET "rst" LOC = D8; # in bank1

2

デザイン内のすべて、または大半のポートで Virtex-E の I/O 標準を使用する場合は、すべての I/O バッファをインスタンシエートします。I/O バッファは、HDL コードにすべて存在しているため、FPGA Express が I/O バッファを追加してしまわないようにする必要があります。[Insert I/O Pads] チェックボックスをオフにするか、または [Do Not Insert I/O Pads] チェックボックスをオンにします。

この場合、次の 3 つの操作を行ってください。

1. すべての Virtex、Virtex-E の標準 I/O バッファをインスタンシエートします (パッドは除く)。
2. 最上位のポート宣言にすべての I/O ポートを含めます。
3. FPGA Express がパッドを追加してしまわないようにします。

次はコードの記述例です。


Verilog:

module lvds_v_nopads (din, dout_p, dout_n); // NOTE: All ports in the design are listed input din; output dout_p, dout_n; wire data_int, data_n_int;

IBUF_LVDS data0 (.I(din), .O(data_int)); // NOTE: only the buffers are instantiated

OBUF_LVDS data1_p (.I(data_int), .O(dout_p)); assign data_n_int = !data_int; OBUF_LVDS data1_n (.I(data_n_int), .O(dout_n));

endmodule
VHDL:

library IEEE;
use IEEE.std_logic_1164.all;

entity lvds_vhdl_nopads is
port (din: in STD_LOGIC; -- NOTE: All ports in the design are listed
dout_p: out STD_LOGIC;
dout_n: out STD_LOGIC);
end lvds_vhdl_nopads;

architecture lvds_vhdl_nopads_arch of lvds_vhdl_nopads is
signal data_int, data_n_int: STD_LOGIC;

component IBUF_LVDS port
(I: in STD_LOGIC; O: out STD_LOGIC);
end component;

component OBUF_LVDS port
(I: in STD_LOGIC; O: out STD_LOGIC);
end component;

begin

data0: IBUF_LVDS port map (I=>din, O=>data_int); -- NOTE: only the buffers are instantiated

data1_p: OBUF_LVDS port map (I=>data_int, O=>dout_p);
data_n_int <= not data_int;
data1_n: OBUF_LVDS port map (I=>data_n_int, O=>dout_n);

end lvds_vhdl_nopads_arch;
Sample UCF for the above HDL code for use with a Virtex 100E-CS144:

NET din LOC = F2; # IO_L26P, in bank0
NET dout_p LOC = A5; # IO_L1P_YY, in bank0
NET dout_n LOC = B5; # IO_L1N_YY, in bank0
AR# 8202
作成日 12/02/1999
最終更新日 08/11/2003
ステータス アーカイブ
タイプ 一般