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
日付 11/23/2011
ステータス アーカイブ
種類 一般