AR# 9462

EXEMPLAR、SYNPLIFY - LVPECL または LVDS を HDL でインスタンシエートする方法 (VHDL/Verilog - Virtex-E/Spartan-IIE のみ)

説明

キーワード : Leonardo, Spectrum, Synplicity, Virtex, Virtex-E, VirtexE, LVDS, differential, I/O, IO, standard, 差動, 規格

重要度 : 重要

概要 :
LVPECL または LVDS を HDL でインスタンシエートする方法を示します。

ソリューション

1

次に、V50ECS144 での LVDS I/O のインスタンシエーションおよびロケーション制約の例を示します。

LVPECL I/O 規格を使用するには、バッファをインスタンシエートする際に「LVDS」を「LVPECL」に置き換えます。 (たとえば、「IBUF_LVDS」を「IBUF_LVPECL」に置き換えます。)

LVPECL/LVDS の詳細については、アプリケーション ノート (Xilinx XAPP133) 『Virtex SelectIO リソースの使い方』を参照してください。

メモ :
- これは、どの合成ツールでも使用できる一般的な例です。 Synplify をご使用の場合は、ライブラリ unisim (VHDL) または unisim.v (Verilog) が HDL コード内に含まれていることを確認してください 詳細については、(Xilinx Solution 244) を参照してください。

- FPGA Express では IBUF_LVDS、IBUF_LVPECL、OBUF_LVDS、OBUF_LVPECL、IOBUF_LVDS、IOBUF_LVPECL は有効なプリミティブとして認識されません。 LVDS バッファをインスタンシエートしようとすると、I/O バッファが挿入されて、インプリメンテーション ツールでデザインを実行するときにエラーが発生します。 このフローを使用する場合は、(Xilinx Solution 9849) を参照してください。

- 双方向 LVPECL I/O は現在サポートされていません。 詳細については、(Xilinx Solution 8631) を参照してください。

Synplify 固有の属性については、(Xilinx Solution 1995) を参照してください。

LeonardoSpectrum 固有の属性については、(Xilinx Solution 8074) を参照してください。

VHDL の例
この例には、LVDS 入力、出力、および双方向 I/O が含まれています。

library IEEE;
use IEEE.std_logic_1164.all;
entity LVDSIO is
port (CLK, DATA, Tin : in STD_LOGIC;
IODATA_p, IODATA_n : inout STD_LOGIC;
Q_p, Q_n : out STD_LOGIC
);
end LVDSIO;


architecture BEHAV of LVDSIO is

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

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

component IOBUF_LVDS is port (I : in STD_LOGIC;
T : in STD_LOGIC;
IO : inout STD_LOGIC;
O : out STD_LOGIC);
end component;

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

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

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

signal iodata_in : std_logic;
signal iodata_n_out: std_logic;
signal iodata_out: std_logic;
signal DATA_int : std_logic;
signal Q_p_int : std_logic;
signal Q_n_int : std_logic;
signal CLK_int : std_logic;
signal CLK_ibufgout : std_logic;
signal Tin_int : std_logic;

begin
UI1: IBUF_LVDS port map ( I => DATA, O => DATA_int);
UI2: IBUF_LVDS port map (I => Tin, O => Tin_int);
UO_p: OBUF_LVDS port map ( I => Q_p_int, O => Q_p);
UO_n: OBUF_LVDS port map ( I => Q_n_int, O => Q_n);
UIO_p: IOBUF_LVDS port map ( I => iodata_out, T => Tin_int, IO => iodata_p,
O => iodata_in);
UIO_n: IOBUF_LVDS port map ( I => iodata_n_out, T => Tin_int, IO => iodata_n,
O => open);

UINV: INV port map ( I => iodata_out, O => iodata_n_out);
UIBUFG : IBUFG_LVDS port map ( I => CLK, O => CLK_ibufgout);
UBUFG : BUFG port map (I => CLK_ibufgout, O => CLK_int);

My_D_Reg: process (CLK_int, DATA_int)
begin
if (CLK_int'event and CLK_int='1') then
Q_p_int <= DATA_int;
end if;
end process; -- End My_D_Reg

iodata_out <= DATA_int and iodata_in;

Q_n_int <= not Q_p_int;

end BEHAV;

2

Verilog の例
この例には、LVDS 入力、出力、および双方向 I/O が含まれます。

module LVDSIOinst (CLK, DATA, Tin, IODATA_p, IODATA_n, Q_p, Q_n) ;
input CLK, DATA, Tin;
inout IODATA_p, IODATA_n;
output Q_p, Q_n;

wire iodata_in;
wire iodata_n_out;
wire iodata_out;
wire DATA_int;
reg Q_p_int;
wire Q_n_int;
wire CLK_int;
wire CLK_ibufgout;
wire Tin_int;


IBUF_LVDS UI1 ( .I(DATA), .O( DATA_int));
IBUF_LVDS UI2 (.I(Tin), .O (Tin_int));
OBUF_LVDS UO_p ( .I(Q_p_int), .O(Q_p));
OBUF_LVDS UO_n ( .I(Q_n_int), .O(Q_n));
IOBUF_LVDS UIO_p ( .I(iodata_out), .T(Tin_int), .IO(IODATA_p),
.O (iodata_in));
IOBUF_LVDS UIO_n ( .I (iodata_n_out), .T(Tin_int), .IO(IODATA_n),
.O ());

INV UINV ( .I(iodata_out), .O(iodata_n_out));
IBUFG_LVDS UIBUFG ( .I(CLK), .O(CLK_ibufgout));
BUFG UBUFG (.I(CLK_ibufgout), .O(CLK_int));

always @ (posedge CLK_int)
begin
Q_p_int <= DATA_int;
end

assign iodata_out = DATA_int && iodata_in;

assign Q_n_int = ~Q_p_int;

endmodule

3

V50ECS144 をターゲットとした UCF 構文例

NET CLK LOC = A6; #GCLK3
NET DATA LOC = A4; #IO_L0P_YY
NET Q_p LOC = A5; #IO_L1P_YY
NET Q_n LOC = B5; #IO_L1N_YY
NET iodata_p LOC = D8; #IO_L3P_yy
NET iodata_n LOC = C8; #IO_L3N_yy
NET Tin LOC = F13; #IO_L10P
AR# 9462
日付 11/23/2010
ステータス アーカイブ
種類 一般