テストパターン
AND回路用のテストパターン発生VHDLです
回路のイメージは以下のようになります
┏━━━━このテストパターン━━━━━┓
┃ ┃
┃ ┏━AND4━┓ ┃
┃ ┃ ┃ テスト回路 ┃
┃ ┗━━━━━━┛ ┃
┗━━━━━━━━━━━━━━━━━━┛
VHDLでは”−−”の後はコメント文と見なされます
つまり、以下の3行はコメント文になります
--------------------------------------------------
-- Test patern generate
--------------------------------------------------
以下の2行はメインの文でもでてきたお約束の呼び出しです
library ieee;
use ieee.std_logic_1164.all;
この行は数学的な演算も使いますという宣言です
今回の場合はInteger(整数型)のデータをstd_logic_vectorへ
変換する関数を使います
use ieee.std_logic_arith.all;
以下の3行もコメントです
--------------------------------------------------
-- Test pat entity
--------------------------------------------------
このプログラムはテストパターンで外とつながる信号がないので
entity(外部との繋がりを宣言する場所)には何も書かないです
entity TOP is
end;
以下の行以下にこのテストプログラムの本体を書きます
architecture arch_TOP of TOP is
テストプログラムで共通で使用する信号を宣言します
-- for CLK and RESET
signal CLK : std_logic := '0';
signal RST0 : std_logic := '0';
-- for Test Pat
signal INPUT : std_logic_vector(3 downto 0);
signal STOP : std_logic := '0';
signal RESULT : std_logic;
以下もコメントです
--------------------------------------
-- Entity of Yasu_00
--------------------------------------
このテストパターンから先ほど作ったAND4を呼び出します
component AND4
port(a : in std_logic;
b : in std_logic;
c : in std_logic;
d : in std_logic;
o : out std_logic
);
end component;
以下のbegin以降にテストプログラムの本文を書きます
begin
AND4を呼び出してその名前をTEST0にしますと言う宣言です
同じものを複数呼び出すときに識別する為にあります
TEST0 : AND4
先ほどのANDとここで使う信号をどう繋ぐかを宣言します
以下の場合'a'をINPUT(3)とつなぎ、oはRESULTと繋ぐことになります
port map(
a => INPUT(3),
b => INPUT(2),
c => INPUT(1),
d => INPUT(0),
o => RESULT
);
プロセス文だけで始まる文は常に実行されます
特定の信号が変化したときだけ実行させたいときは
プロセス文の後に"("+信号名+")"と書きます
例)CLKが変化したときだけ実行 process(CLK)
process
begin
CLkが0なら1へ変化、1なら0へ変化させます
if CLK = '0' then CLK <= '1';
else CLK <= '0';
end if;
STOP信号が1ならシミュレーション終了
if STOP = '1' then wait;
それ以外ならここで100ns待ちます
else wait for 100 ns;
end if;
プロセス分の終わりの宣言
end process;
また、もう1つのプロセス文を宣言します
ここではReset信号を作ります
process
begin
まず最初にResetを0にします
RST0 <= '0';
その後、200ns待った後で1に戻します
wait for 200 ns;
RST0 <= '1';
そして、その後はずっと変化させずに待ちます
wait;
end process;
以下のプロセスでメインのテストパターンを作ってます
process
begin
for文を使うと同じ内容の繰り返しができます
変数iを0〜15まで変化させて以下の内容を繰り返します
for i in 0 to 15 loop
変数iの内容を4ビットのstd_logic_vectorに直してINPUTへ代入
INPUT <= CONV_STD_LOGIC_VECTOR(i, 4);
CLKの立ち上がりまで待ちます
wait until CLK'event and CLK = '1';
ここまでの内容を繰り返します
end loop;
STOP信号に1を代入します
STOP <= '1';
wait;
end process;
end;
マクロの呼び出し関係を定義します
以下の内容はシミュレーション時だけ必要であり合成するときは必要ないです
configuration conf_TOP of TOP is
for arch_TOP
for TEST0 : AND4
use configuration work.conf_AND4;
end for;
end for;
end;
VHDLへ戻る
トップへ戻る