stimulus、stimuliはテストベンチからDUVへ与える信号、値のこと。
pp.556-557
↓ 左がDUVに与えるメッセージ。右がDUVから出力されるであろう期待値。
hartj09sq7shh60gxrupgwy2jus9mizc 11100001001001011001100011100101 e6aifwgcyf42f8yucde5j4xdh1a3byu6 01110000010011011000001101110101 qpreydipz0u9g8q6xgj6l5e8otuybxru 10010010100100100001000111111010 otqnk1oj0csdpxlar49uaim0o48e3m5y 00110111001011101101100011110110 azi7ucov41g0nhtve2x50sx88i8eeymb 10010100101100111110000110111010 y0birz6zjhvib9rsd4uuqavpcd7p8mkw 01001101011000001101101010011111 3l80y48tfpsm5jq5jmnj8t27erd8onnv 10100111000111101111010101010101 fdu4daduvujr6ttrf1ecyavq02gmi5ey 01110011100111000110000100111011 oxaf7665xunyd36b2jb6fe0cck2kmy5c 01101001101101111001100100000011 bjwvsqt1x9aot0orrt4eckp5srg61zhh 11100001000111110000000000101111
↓ これがテストベンチ。
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use std.textio.all; entity hash_calculator_tb is end; architecture testbench of hash_calculator_tb is constant DUV_DELAY: time := 10 ns; signal hash: std_logic_vector(31 downto 0); signal message: string(1 to 32); begin duv: entity work.hash_calculator port map ( message => message, hash => hash ); test_controller: process -- golden_dataというファイルオブジェクトとして、目的の.txtファイルを読み取り専用モードで開く。 file golden_data: text open read_mode is "golden.txt"; variable current_line: line; variable message_golden: string(1 to 32); variable hash_golden: std_logic_vector(31 downto 0); begin while not endfile(golden_data) loop -- Read input vector and expected respose -- golden_dataオブジェクトから1行読んでcurrent_line変数に代入し、 readline(golden_data, current_line); -- 1つ目のデータをmessage_golden変数に代入し、 read(current_line, message_golden); -- 2つ目のデータをhash_golden変数に代入する。 read(current_line, hash_golden); -- Apply stimuli -- 変換元のメッセージをDUVに与える。 message <= message_golden; wait for DUV_DELAY; -- Check DUV response -- DUVの出力hashと期待値hash_goldenとを照合する。 assert hash = hash_golden report "hash for message " & message_golden & " UNMATCHES golden output" severity failure; assert hash /= hash_golden report "hash for message " & message_golden & " MATCHES golden output" severity note; end loop; report "End of testbench. All tests passed."; std.env.finish; end process; end;