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
日付 08/11/2003
ステータス アーカイブ
種類 一般