4in And テストパターン

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;

上のソース

-----------------------------------
ballVHDLへ戻る
ballトップへ戻る