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

4.1i UniSim - VHDL ROC (リセット オン コンフィギュレーション) コンポーネントの使用

説明

キーワード : ROC, VHDL, simulation, Reset On Configuration, GSR, GR, PRLD, STARTUP, power-up, Reset, シミュレーション, リセット オン コンフィギュレーション, パワーアップ

重要度 : 標準

概要 :
M1.4 リリースでは、ROC (リセット オン コンフィギュレーション) と呼ばれるコンポーネントが VHDL シミュレーションに採用されました。 このコンポーネントを使用すると、外部グローバル リセット ピンがない場合に、電源投入時にデバイスをグローバルにリセットするため、ビヘイビアのファンクション シミュレーションおよびタイミング シミュレーションが実行されます。 ROC では、シミュレーションの 0 時間から特定時間までの間、ONE SHOT リセット パルスが適用されます。これにより、FPGA/CPLD のコンフィギュレーションにおける電源投入時のリセット シーケンスがシミュレーションされます。

ここでは、VHDL シミュレーションにおける ROC の使用方法について説明します。ただし、特定のシミュレータについては言及しません。

メモ : 合成されたデザインをインプリメントする際、ROC コンポーネントは削除されます。

ソリューション

1

VHDL コードで ROC を使用するには、まずコンポーネントをデザインにインスタンシエートし、推測/インスタンシエートされた各レジスタ/ラッチの非同期プリセット/リセットに接続する必要があります。

ROC は次のようにインスタンシエートします。

architecture XILINX of roc_example is

signal GLOBAL_RESET: STD_LOGIC;
component ROC port (O: out STD_LOGIC);

begin

RESET_ON_CONFIG: roc port map (O=>GLOBAL_RESET);

end XILINX;


上記の例では、GLOBAL_RESET 信号がアクティブ High 極性ですべての推測/インスタンシエートされたレジスタに接続されます。 たとえば、カウンタは次のようにコード化できます。

COUNT4: process (GLOBAL_RESET, CLOCK, LOAD, CE)
begin
if (GLOBAL_RESET = '1') then
QOUT ns);
END FOR;
END FOR;
END FOR;
END FOR;
END RTL_simulation;

-----------------------------------------------------------------------------
Us<= "0000";
elsif (CE = '1') then
if (CLOCK'event and CLOCK = '1') then
if (LOAD = '1') then
QOUT <=DATA;
else QOUT <= QOUT + 1;
end if;
end if;
end if;
end process COUNT4;


ONE SHOT パルスが適用される値または周期は、デザインのテストベンチ ファイルで VHDL コンフィギュレーション文を使用して指定できます。 ザイリンクス ソフトウェア バージョン 1.5 以降をご使用の場合、ROC の周期はデフォルトで 100ns です。 ザイリンクス FTP サイトから入手した NGD2VHDL パッチ 1.4 をご使用の場合は、コマンド ラインで -rpw オプションを使用して周期を指定する必要があります。 (NGD2VHDL の 1.4 バージョンでは、デフォルト値が設定されておらず、ROC コンポーネントを初期化するためコンフィギュレーションが必要です。)

ROC 値を指定/上書きするには、デザインのテストベンチ ファイルに次のコンフィギュレーション文を追加します。

---------------------------------------------------------------------
RTL シミュレーションのコンフィギュレーション文
---------------------------------------------------------------------

CONFIGURATION RTL_simulation OF <testbench_entity_name> IS
FOR <testbench_architecture_name>
FOR <design_instance_name>:<design_entity_name>
FOR <design_architecture_name>
FOR <roc_instance_name>:ROC USE ENTITY UNISIM.ROC(ROC_V)
generic map (WIDTH =>e this configurati<period>on for Post M1 simulation
-----------------------------------------------------------------------------

--CONFIGURATION Post_M1_simulation OF <testbench_entity_name> IS
-- FOR <testbench_architecture_name>
-- FOR <design_instance_name>:<design_entity_name>
-- FOR STRUCTURE
-- FOR ROC_NGD2VHDL:ROC USE ENTITY WORK.ROC(ROC_V)
-- generic map (WIDTH => <period> ns);
-- END FOR;
-- END FOR;
-- END FOR;
-- END FOR;
--END Post_M1_simulation;

<> で囲まれた部分は、テストベンチ/デザインから得られる名前や周期の値です。<>ソリューション 2 および 3 には、テストベンチおよび VHDL デザイン ファイルの例が記載されています。

2

--------------------------------------------------------------------------------
-- TESTBENCH_ROC.VHD
-- Testbench file for testing ROC_EXAMPLE.VHD
-- Example code using the ROC buffer
--------------------------------------------------------------------------------


LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE std.textio.ALL;

ENTITY testbench IS
END testbench;

ARCHITECTURE tutorial OF testbench IS


-- Component Declaration of the Top-Level of Design

COMPONENT roc_example
PORT ( LOAD : in STD_LOGIC;
CLOCK : in STD_LOGIC;
CE : in STD_LOGIC;
DATA : in STD_LOGIC_VECTOR (3 downto 0);
COUT : out STD_LOGIC_VECTOR (3 downto 0));
END COMPONENT;


-- Signals Used to Connect the Design's Ports to Testbench

SIGNAL load_signal: STD_LOGIC;
SIGNAL clock_signal: STD_LOGIC;
SIGNAL ce_signal: STD_LOGIC;
SIGNAL data_signal: STD_LOGIC_VECTOR (3 downto 0);
SIGNAL cout_signal: STD_LOGIC_VECTOR (3 downto 0);

BEGIN


-- Instantiatation of the Design

uut : roc_example PORT MAP (LOAD => load_signal,
CLOCK => clock_signal,
CE => ce_signal,
DATA => data_signal,
COUT => cout_signal);


-- Start the Simulation

stimulus : PROCESS

BEGIN


-- Initialize All Input Ports

load_signal <= '0';
clock_signal <= '0';
ce_signal <= '0';
data_signal <= "0000";


-- Wait untill Global Reset is Finished

WAIT FOR 200 ns;


-- Apply Design Stimulus

ce_signal <= '1';

LOOP
WAIT FOR 25 ns;
clock_signal <= not (clock_signal);
END LOOP;


-- Proccessed Finished!

END PROCESS stimulus;

END tutorial;


-- Use this configuration for RTL simulation

CONFIGURATION RTL_simulation OF testbench IS
FOR tutorial
FOR uut:roc_example
FOR xilinx
FOR RESET_ON_CONFIG:ROC USE ENTITY UNISIM.ROC(ROC_V)
generic map (WIDTH => 200 ns);
END FOR;
END FOR;
END FOR;
END FOR;
END RTL_simulation;


-- Use this configuration for Post M1 simulation

--CONFIGURATION Post_M1_simulation OF testbench IS
-- FOR tutorial
-- FOR uut:roc_example
-- FOR STRUCTURE
-- FOR ROC_NGD2VHDL:ROC USE ENTITY WORK.ROC(ROC_V)
-- generic map (WIDTH => 200 ns);
-- END FOR;
-- END FOR;
-- END FOR;
-- END FOR;
--END Post_M1_simulation;

3

----------------------------------------------------------------------------------------------
-- ROC_EXAMPLE.VHD Version 1.1
-- Example code using the ROC model to reset 4-bit counter
-----------------------------------------------------------------------------------------------

-- pragma translate_off

Library UNISIM;
use UNISIM.Vcomponents.all;

-- pragma translate_on

LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
USE IEEE.std_logic_unsigned.all;

entity roc_example is
port (LOAD, CLOCK: in STD_LOGIC;
CE: in STD_LOGIC;
DATA: in STD_LOGIC_VECTOR (3 downto 0);
COUT: out STD_LOGIC_VECTOR (3 downto 0));
end roc_example;

architecture XILINX of roc_example is

signal QOUT: STD_LOGIC_VECTOR (3 downto 0);
signal GLOBAL_RESET: STD_ULOGIC;

COMPONENT roc port (O: out STD_LOGIC);
END COMPONENT;

begin


-- Reset On Configuration (ROC) Buffer Instantiation

RESET_ON_CONFIG: roc port map (O=>GLOBAL_RESET);


-- Behavioral description of a 4-bit Loadable Counter with Asnchronous Reset
and Clock Enable


COUNT4: process (GLOBAL_RESET, CLOCK, LOAD, CE)
begin
if (GLOBAL_RESET = '1') then
QOUT <= "0000";
elsif (CE = '1') then
if (CLOCK'event and CLOCK = '1') then
if (LOAD = '1') then
QOUT <=DATA;
else QOUT <= QOUT + 1;
end if;
end if;
end if;
end process COUNT4;

COUT <= QOUT;

end XILINX;
AR# 4686
作成日 08/31/2007
最終更新日 11/23/2011
ステータス アーカイブ
タイプ 一般