end DSELS;
with select 文
library IEEE;
use IEEE.std_logic_1164.all;
entity M_BEHAVIOR is
port (SELS : in std_logic_vector(0 to 1);
A,B,C,D : in bit; M : out bit);
end;
architecture DSELS of M_BEHAVIOR begin
with SELS select
M <= A when ”00”,
B when ”01”, C when ”10”, D when ”11”;
end DSELS;
この記述を、
D when others;
M
SELS D
A B C
この宣言のとき、
SELSは、9x9=81値となり,, 左の記述ではエラー
テストベンチの記述
シミュレーションとテストベンチ
シミュレーション: 設計した回路が正しく動作するかを検証するために、
実装前に、コンピュータ上でシミュレータを実行すること。
- 論理シミュレーション: (遅延を無限小として)論理動作のみ検証 - 遅延シミュレーション: 回路の遅延情報を考慮して動作を検証
◇ 設計した回路記述: VHDLファイル(DUT; Device Under Test)
◇ シミュレータ:
◇ テストベンチ: 必要な信号を生成したり、検証を効率よく行うための 結果表示などを記述したVHDLファイル。
論理合成しないので、効率良く記述することを優先。
クロック、リセット等 の生成
入力パタンの生成
設計した回路
(DUT)
[論理合成可能]
結果表示等
テストベンチ
テストベンチの構造
「パッケージ」の指定 entity エンティティ名 is end エンティティ名;
architecture アーキテクチャ名 is
bigin
end アーキテクチャ名;
- DUTの宣言 -
入出力の宣言- DUTの呼び出し -
波形記述configuration
コンフィグレーション名is for アーキテクチャ名
end for;
end コンフィグレーション名;
ライブラリ記述
ポートリストの無いエンティティ記述
アーキテクチャ名 of エンティティ名
テストモジュール(DUT)のコンポーネント宣言
DUTの入出力信号宣言
整数の定義(クロック周期等)
DUTの呼び出し宣言(インスタンス)
入力信号の入力波形記述
(期待値照合も可能)
コンフィグレーション名を定義
→ コンフィグレーション名 of エンティティ名
⇓
このコンフィグレーション名でシミュレーターの
テストベンチでの入力波形記述例
constant STEP: time := 100 ns ; begin
U0: COUNT4LD port map( CLK, RST, LD, D, Q );
-- 入力;CLK、RST、LD、D process begin -- クロックの記述
CLK <=‘0’; wait for STEP/2; -- STEP/2毎に“01”を繰り返す CLK <=‘1’; wait for STEP/2; -- 無限にループする
end process ; process begin
D <=“0000”; -- 入力Dに”0000”をセット wait for STEP; RST <=‘1’; -- 1クロック後、リセットをon wait for STEP; RST <=‘0’; -- 1クロック後、リセットをoff wait for STEP*20; -- 20クロック進める
D <=“1001”; LD <=‘1’; -- ロードをonして、Dに9をロード wait for STEP; LD <=‘0’; -- ロードをoff
wait for STEP*8; -- 8クロック進める
D <=“0110”; LD <=‘1’; -- ロードをonして、Dに6をロード wait for STEP; LD <=‘0’; -- ロードをoff
wait for STEP*12 ; -- 12クロック進める
assert false severity failure; -- シミュレーションの強制終了
☆ count4ld (ロード機能付き4ビットバイナリカウンター)の入力J波形の記述例:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity CNT10 is port ( count_in, reset : in std_logic; count_up, dot : out std_logic;
count_LED : out std_logic_vector(4 downto 0) );
end CNT10;
architecture RTL of CNT10 is
signal count10 : std_logic_vector(4 downto 0); signal count_sig : std_logic;
begin
process(count_in,reset) begin
if reset = '1' then count10 <= "00000"; count_sig <= '0';
elsif (count_in'event and count_in='1') then
if (count10 = "01001") then count_sig <= '1'; count10 <= "00000";
else count_sig <= '0'; count10 <= count10 + '1';
end if; end if; end process;
count_LED <= count10;
count_up <= count_sig;
dot <= '0';
10進カウンタのテストベンチ記述例①
ドキュメント内
論理回路設計
(ページ 56-61)