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

6.2 SYNPLIFY - Virtex-II に対して VHDL および Verilog で双方向 LVDS (BLVDS) バッファをコード記述する方法

説明

キーワード : LVDS, BLVDS, code, buffers, VHDL, Verilog, Virtex-II, コード, バッファ

重要度 : 標準

概要 :
Virtex-II に対して、VHDL および Verilog で双方向 LVDS バッファをコードで記述する方法を教えてください。

ソリューション

1

Virtex-II アーキテクチャにおける双方向 LVDS ソリューションは、Virtex-E でのソリューションと同じです。 LVDS は point-to-point アプリケーション用であり、BLVDS (バス LVDS) は IEEE/EIA/TIA に準拠するインプリメンテーションではないため、I/O および PCB レイアウトのデザイン ルールに注意深く従う必要があります。

次に VHDL、Verilog および UCF の例を示します。

VHDL :

library IEEE;
use IEEE.std_logic_1164.all;
library unisim;
use unisim.vcomponents.all;

entity LVDS_IOBUFDS is
port (CLK_p, CLK_n, DATA_p, DATA_n, Tin_p, Tin_n: in STD_LOGIC;
IODATA_p, IODATA_n : inout STD_LOGIC;
Q_p, Q_n : out STD_LOGIC);
end LVDS_IOBUFDS;


architecture BEHAV of LVDS_IOBUFDS is

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

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

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

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

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

signal datain2 : std_logic;
signal odata_out: std_logic;
signal DATA_int : std_logic;
signal Q_int : std_logic;
signal CLK_int : std_logic;
signal CLK_ibufgout : std_logic;
signal Tin_int : std_logic;

attribute IOSTANDARD : string;
attribute IOSTANDARD of UI1 : label is "BLVDS_25";
attribute IOSTANDARD of UI3 : label is "BLVDS_25";
attribute IOSTANDARD of UO1 : label is "BLVDS_25";
attribute IOSTANDARD of UIO2 : label is "BLVDS_25";
attribute IOSTANDARD of UIBUFG : label is "BLVDS_25";

begin
UI1: IBUFDS port map (DATA_p, DATA_n, DATA_int);
UI3: IBUFDS port map (Tin_p, Tin_n, Tin_int);
UO1: OBUFDS port map (Q_int, Q_p, Q_n);
UIO2: IOBUFDS port map (odata_out, Tin_int, datain2, IODATA_p, IODATA_n);
UIBUFG : IBUFGDS port map (CLK_p, CLK_n, CLK_ibufgout);
UBUFG : BUFG port map (CLK_ibufgout, CLK_int);

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

odata_out <= DATA_int and datain2;


end BEHAV;

2

Verilog :

module LVDS_IOBUFDS (CLK_p, CLK_n, DATA_p, DATA_n, Tin_p, Tin_n, IODATA_p, IODATA_n, Q_p, Q_n) ;

input CLK_p, CLK_n, DATA_p, DATA_n, Tin_p, Tin_n;
inout IODATA_p, IODATA_n;
output Q_p, Q_n;

wire datain2;
wire odata_in;
wire odata_out;
wire DATA_int;
reg Q_int;
wire CLK_int;
wire CLK_ibufgout;
wire Tin_int;

IBUFDS UI1 ( .I(DATA_p), .IB(DATA_n), .O( DATA_int)) /* synthesis xc_props = "IOSTANDARD=BLVDS_25" */;
IBUFDS UI2 (.I(Tin_p), .IB(Tin_n), .O (Tin_int)) /* synthesis xc_props = "IOSTANDARD=BLVDS_25" */;
OBUFDS UO1 ( .I(Q_int), .O(Q_p), .OB(Q_n)) /* synthesis xc_props = "IOSTANDARD=BLVDS_25" */;
IOBUFDS UO2 ( .I(odata_out), .O(datain2), .T(Tin_int), .IO(IODATA_p),.IOB(IODATA_n)) /* synthesis xc_props = "IOSTANDARD=BLVDS_25" */;
IBUFGDS UIBUFG ( .I(CLK_p), .IB(CLK_n), .O(CLK_ibufgout)) /* synthesis xc_props = "IOSTANDARD=BLVDS_25" */;
BUFG UBUFG (.I(CLK_ibufgout), .O(CLK_int));

always @ (posedge CLK_int)
begin
Q_int <= datain2;
end

assign odata_out = DATA_int;

endmodule

3

UCF :

UCF を使用する場合は、VHDL または Verilog コードから属性に関する記述を削除し、次を追加します。

INST UI1 IOSTANDARD=BLVDS_25;
INST UI2 IOSTANDARD=BLVDS_25;
INST UO1 IOSTANDARD=BLVDS_25;
INST UO2 IOSTANDARD=BLVDS_25;
INST UIBUFG IOSTANDARD=BLVDS_25;
AR# 12761
日付 04/20/2007
ステータス アーカイブ
種類 一般
このページをブックマークに追加