AR# 8187

Virtex-E、Spartan-IIE LVDS/LVPECL - I/O 規格 LVDS/LVPECL を使用する方法

説明

Virtex-E/Spartan-IIE に LVDS または LVPECL を使用する方法を教えてください。

ソリューション

LVDS を使用する場合、完全なピン固定情報が含まれた UCF または NCF ファイルを作成して、I/O バンク規則に違反しないようにする必要があります。UCF または NCF ファイルを使用しないと、PAR でエラーが発生します。LVDS を使用する方法は 2 種類あります。

1. UCF ファイルで IOSTANDARD 属性を設定します。
2. LVDS 入力および出力バッファーをインスタンシエートします。

LVDS 入力バッファー

LVDS 入力バッファーは、広範な IOB 位置に配置できます。正確な位置は、ご使用のパッケージによって異なります。Virtex-E/Spartan-IIE のパッケージ情報には、可能な位置が IO_L#P (P 側) および IO_L#N (N 側) としてリストされています (# はペア番号)。

UCF ファイルの使用

I/O 規格を LVDS に設定するには、UCF ファイルに次のような構文を記述します。

NET <input net name> IOSTANDARD = LVDS;
NET <input net name> LOC=P(pin name);

上記の構文は、1 つの LVDS 入力ピンの例です。実際のデザインでは、UCF ファイルですべての I/O ピンを固定する必要があります。固定しておかないと、PAR でエラーが発生します。

HDL インスタンシエーション

デザインでは入力バッファーは 1 つだけをインスタンシエートし、これを正しい IO_L#P 位置に配置する必要があります。N 側のバッファーが予約され、その他の IOB はこの位置に配置できなくなります。

物理的なデバイスでは、コンフィギュレーション オプションがオンになっており、パッド ワイヤーが IO_L#N IOB から IO_L#P IOB に配置されている差動入力バッファーへ配線されます。このバッファーの出力は、IO_L#P セルの出力か、IO_L#P IOB の入力レジスタを駆動します。FPGA Editor では 2 番目のバッファーが使用されていないように見えますが、別の用途にこの位置を使用しようとすると、DRC エラーが発生します。

-- VHDL インスタンシエーション :
data0_p : IBUF_LVDS port map (I=>data(0), O=>data_int(0));

-- Verilog インスタンシエーション :
IBUF_LVDS data0_p (.I(data[0]), .O(data_int[0]));

ロケーション制約

すべての LVDS バッファーは、デバイスに明示的に配置する必要があります。入力バッファーの場合、UCF または NCF ファイルに次の制約を設定します。

NET data<0> LOC = D28; # IO_L0P

LVDS 出力バッファーの作成

LVDS 出力バッファーは、広範な IOB 位置に配置できます。正確な位置は、ご使用のパッケージによって異なります。Virtex-E/Spartan-IIE のパッケージ情報には、可能な位置が IO_L#P (P 側) および IO_L#N (N 側) としてリストされています (# はペア番号)。

UCF ファイルの使用

出力の I/O 規格を LVDS に設定するには、UCF ファイルに次のような構文を記述します。

注記 : 両方の出力を UCF ファイルで指定し、正および負の出力ピンに固定する必要があります。

NET <output pad net name_positive> IOSTANDARD=LVDS;
NET <output pad net name_negative> IOSTANDARD=LVDS;
NET <output pad net name_positive> LOC=P22;
NET <output pad net name_negative> LOC=P23;

上記の構文は、1 つの LVDS 出力ペアの例です。実際のデザインでは、すべての I/O ピンを固定する必要があります。固定しておかないと、PAR でエラーが発生します。

HDL インスタンシエーション

両方の出力バッファーをデザインにインスタンシエートし、正しい IO_L#P および IO_L#N 位置に配置する必要があります。さらに、出力 (O) ピンは、互いに反転させる必要があります (1 つは High、もう 1 つは Low)。このルールに従わないと、DRC エラーが発生します。

-- VHDL インスタンシエーション

data0_p : OBUF_LVDS port map (I=>data_int(0), O=>data_p(0));
data0_inv: INV port map (I=>data_int(0), O=>data_n_int(0));
data0_n : OBUF_LVDS port map (I=>data_n_int(0), O=>data_n(0));

-- Verilog インスタンシエーション

OBUF_LVDS data0_p (.I(data_int[0]), .O(data_p[0]));
INV data0_inv (.I(data_int[0], .O(data_n_int[0]);
OBUF_LVDS data0_n (.I(data_n_int[0]), .O(data_n[0]));

ロケーション制約

すべての LVDS バッファーは、デバイスに明示的に配置する必要があります。出力バッファーの場合、UCF または NCF ファイルに次の制約を設定します。

NET data_p<0> LOC = D28; # IO_L0P
NET data_n<0> LOC = B29; # IO_L0N

同期出力と非同期出力

出力が同期の (IOB にレジスタを付ける) 場合、IO_L#P|N ペアが使用されます。出力が非同期 (出力レジスタなし) の場合、デバイスの行または列の端で同じ IOB グループの一部となっているペアの片方を使用する必要があります。

非同期出力として使用される LVDS ぺアは、Virtex-E/Spartan-IIE ピン配置表にリストされています。ペアには、そのパッケージのすべてのデバイスで非同期にできる出力として示されているもの、パッケージの特定デバイスのみで使用可能と示されているものがあります。製品寿命のある時点でデバイスのサイズが変更される可能性がある場合は、すべてのパッケージに共通のペアのみを使用する必要があります。

出力レジスタの追加 (同期出力)

すべての LVDS バッファーには、IOB に出力レジスタがあります。出力レジスタは、IOB の P 側と N 側にあります。標準の IOB レジスタ オプション (FD、FDE、FDC、FDCE、FDP、FDPE、FDR、FDRE、FDS、FDSE、LD、LDE、LDC、LDCE、LDP、LDPE) は、すべて使用できます。レジスタ エレメントは、推論されるか、HDL で明示的にインスタンシエートできます。

特に、レジスタの D ピンが反転され、INIT ステートのレジスタが向かい合わせに配置されていることを確認してください。クロック ピン (C)、クロック イネーブル ピン (CE)、セット/リセット ピン (CLR/PRE または S/R) は同じソースに接続する必要があります。同じソースに接続しないと、DRC エラーが発生します。

レジスタ エレメントは、IOB プロパティが TRUE のレジスタを使用するか、map -pr [i|o|b] オプション (i は入力のみ、o は出力のみ、b は入力と出力) を使用して IOB にパックされます。

次に、v100epq240 をターゲットとして LVDS レジスタ出力と LVDS 入力 a を使用した VHDL コード例を示します。LVDS インスタンシエーションと UCF の IOSTANDARD 制約の両方を使用しています。

library ieee;
use ieee.std_logic_1164.all;

entity mux is

port (a,b,c,d,e,f,g,h, clk, reset : in std_logic;
S : in std_logic_vector (2 downto 0);
q, q_n : out std_logic);
end entity;

architecture mux_arch of mux is

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

signal a_int, q_int, mux_out, mux_out_n, muxout_n_reg : std_logic;

begin

process (a,b,c,d,e,f,g,h,s)
begin

case S is
when "000" =>
q_int<=a;
when "001"=>
q_int<=b;
when "010" =>
q_int<=c;
when "011" =>
q_int<=d;
when "100" =>
q_int<=e;
when "101" =>
q_int<=f;
when "110" =>
q_int<=g;
when "111" =>
q_int<=h;
when others =>
q_int<='X';
end case;
end process;

process (clk, reset)
begin
if (reset='1') then
mux_out<='0';
elsif (clk'event and clk='1') then
mux_out<=q_int;
end if;
end process;
mux_out_n <= not q_int;

process (clk, reset)
begin
if (reset='1') then
muxout_n_reg<='1';
elsif (clk'event and clk='1') then
muxout_n_reg<=mux_out_n;
end if;
end process;

U1 : OBUF_LVDS port map(I=>mux_out, O=>q);
U2 : OBUF_LVDS port map(I=>muxout_n_reg, O=>q_n);

end mux_arch;

UCF 構文は次のとおりです。

net q LOC=P20;
net q_n loc=P21;
net a IOSTANDARD=LVDS;
net a LOC=P27;
net b LOC=P168;
net c LOC=P167;
net d LOC=p163;
net e LOC=p162;
net f loc=p161;
net g loc=p160;
net h loc=p159;
net clk loc=p210;
net reset loc=P157;
net s(0) loc=p156;
net s(1) loc=p155;
net s(2) loc=p154;

map -pr o オプションを使用して、フリップフロップを I/O ブロックに挿入してください。

LVPECL の使用法は、LVDS の場合と同じです。HDL コードで I/O バッファー名をインスタンシエートする必要があります。

詳細はザイリンクスの Virtex-E データシートを参照してください。
http://www.support.xilinx.com/xlnx/xweb/xil_publications_display.jsp?sGlobalNavPick=&sSecondaryNavPick=&category=-18776&iLanguageID=1

または

ザイリンクス アプリケーション ノート 「Using the Virtex SelectI/O Resource」(Xilinx XAPP133) を参照してください。
http://japan.xilinx.com/support/documentation/application_notes/xapp133.pdf


詳細はザイリンクスの Spartan-IIE データシートを参照してください。
http://www.support.xilinx.com/xlnx/xweb/xil_publications_display.jsp?sGlobalNavPick=&sSecondaryNavPick=&category=-18778&iLanguageID=1

または

ザイリンクス アプリケーション ノート 「Using SelectI/O Interfaces in Spartan-II and Spartan-IIE FPGAs」(Xilinx XAPP179) を参照してください。
http://japan.xilinx.com/support/documentation/application_notes/xapp179.pdf
AR# 8187
日付 12/15/2012
ステータス アクティブ
種類 一般