AR# 8074

EXEMPLAR 1999.1x - HDL 属性を使用した I/O 標準 (IOSTANDARD 属性) のポートへのコンフィギュレーション方法 (VHDL/Verilog)

説明

キーワード : PCI_33_GTL, I/O, IO standards, buffers, TCL script, LVDS, LVPECL, IOSTANDARD, 標準, バッファ, スクリプト

重要度 : 標準

概要 :
特定の I/O 標準をデザインに使用する場合の Exemplar の TCL スクリプト (コマンド ライン) または HDL コードを使用した I/O 標準のバッファの使用方法

ソリューション

1

非差動 I/O 標準の TCL スクリプトを使用するには、最上位ポートの名前を認知していないと、コマンド ラインまたはスクリプトから属性を使用できません。

例 :
次は、data_in という最上位ポート名が含まれる例です。

set part v50ecs144

- Virtex の場合 xcv ライブラリ、Virtex-E の場合 xcve を使用 :
load_library xcve


- VHDL/Verilog ファイルの読み込み :
read d_register.v

- data_in ポートに PAD 属性を設定 :
PAD IBUF_PCI_33_GTL data_in

optimize -target xcve
auto_write ff_example.edf

2

VHDL 属性を使用した LVDS I/O 標準の使用
- LVPECL を使用するには、LVDS を LVPECL に変更します。
- この例で TCL スクリプトを使用するには、コードから PAD 属性を削除し、これを TCL ファイルで設定します。

例 :
次は、入力、出力、双方向 I/O の例です。

library IEEE, exemplar;
use IEEE.std_logic_1164.all;
use exemplar.exemplar_1164.all;

entity LVDSIO_att is
port (CLK, DATA, Tin : in STD_LOGIC;
IODATA_p, IODATA_n : inout STD_LOGIC;
Q_p, Q_n : buffer STD_LOGIC
);
attribute pad: string;
attribute pad of clk : signal is "IBUFG_LVDS";
attribute pad of DATA: signal is "IBUF_LVDS";
attribute pad of Tin : signal is "IBUF_LVDS";
attribute pad of Q_p : signal is "OBUF_LVDS";
attribute pad of Q_n : signal is "OBUF_LVDS";
attribute pad of IODATA_p: signal is "IOBUF_LVDS";
attribute pad of IODATA_n: signal is "OBUFT_LVDS";
attribute buffer_sig of clk: signal is "BUFG";
end LVDSIO_att;


architecture BEHAV of LVDSIO_att is
signal iodata_in: std_logic;
signal iodata_out : std_logic;
signal iodata_n_out: std_logic;

begin
My_D_Reg: process (CLK, DATA)
begin
if (CLK'event and CLK='1') then
Q_p <= DATA;
end if;
end process; -- End My_D_Reg

Q_n <= not Q_p;
iodata_out <= DATA and iodata_in;
iodata_in <= iodata_p;
iodata_n_out <= not iodata_out;

io_p:process (Tin)
begin
if (Tin = '0') then
iodata_p <= iodata_out;
else
iodata_p <= 'Z';
end if;
end process;

io_n:process (Tin)
begin
if (Tin = '0') then
iodata_n <= iodata_n_out;
else
iodata_n <= 'Z';
end if;
end process;
end BEHAV;

3

Verilog 属性を使用した LVDS I/O 標準の使用
- LVPECL を使用するには、LVDS を LVPECL に変更します。
- この例で TCL スクリプトを使用するには、コードから PAD 属性を削除し、これを TCL ファイルで設定します。

例 :
次は、入力、出力、双方向 I/O の例です。

module LVDSIO_att (CLK, DATA, Tin, IODATA_p, IODATA_n, Q_p, Q_n);
input CLK; // exemplar attribute CLK PAD IBUFG_LVDS
/* I want to add another attribute for CLK to infer BUFG */

input DATA; //exemplar attribute DATA PAD IBUF_LVDS
input Tin; // exemplar attribute Tin PAD IBUF_LVDS
inout IODATA_p; // exemplar attribute IODATA_p PAD IOBUF_LVDS
inout IODATA_n; //exemplar attribute IODATA_n PAD OBUFT_LVDS
output Q_p; //exemplar attribute Q_p PAD OBUF_LVDS
output Q_n; // exemplar attribute Q_n PAD OBUF_LVDS

wire iodata_in;
wire iodata_out;
wire iodata_n_out;
reg Q_p;

always @(posedge CLK)
begin
Q_p <= DATA;
end

assign Q_n = ~Q_p;
assign iodata_out = DATA && iodata_in;
assign iodata_in = IODATA_p;
assign iodata_n_out = ~iodata_out;

assign IODATA_p = (Tin== 1'b0)? iodata_out: 1'bZ;
assign IODATA_n = (Tin == 1'b0)? iodata_n_out: 1'bZ;

endmodule
AR# 8074
日付 04/24/2007
ステータス アーカイブ
種類 一般