Cocotb のEndian Swapper の例を拡張して、テスト対象デバイス (DUT) によって出力されたパッケージの内容もチェックできるようにしたいと考えています。提供されているコード例では、予想される出力を生成するmodel関数が、変更されていない入力トランザクションを予想される出力のリストに追加します。このリストは、スコアボードへのパラメータとして与えられます。
スコアボードがどのように機能するか、および関数がバイト スワップされたトランザクションをmodel追加しなかった理由を理解するために、DUT に設計エラーを導入しました。endian_swapper.vhdlの次のコード ブロック内
if (byteswapping = '0') then
stream_out_data <= stream_in_data;
else
stream_out_data <= byteswap(stream_in_data);
end if;
if最初の行の条件を次のように反転しただけです(byteswapping /= '0')。
テストベンチを再実行した後、テストが失敗すると予想していましたが、それでも成功します。
# 62345.03ns INFO cocotb.regression regression.py:209 in handle_result Test Passed: wavedrom_test
# 62345.03ns INFO cocotb.regression regression.py:170 in tear_down Passed 33 tests (0 skipped)
# 62345.03ns INFO cocotb.regression regression.py:176 in tear_down Shutting down...
スコアボードの作成で比較機能が欠落しているようです:
self.scoreboard = Scoreboard(dut)
self.scoreboard.add_interface(self.stream_out, self.expected_output)
の呼び出しには 3 番目のパラメーターが必要ですがadd_interface、このパラメーターは文書化されていません。
では、この比較関数を指定して、パッケージの内容もチェックするにはどうすればよいでしょうか?
シミュレーションに QuestaSim を使用し、 でテストベンチを実行しましたmake SIM=questa。また、実行の間にビルド ディレクトリをクリーンアップしました。