しきい値アラームを発生させる
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 35/38。
チャレンジ
難しい5つのステップで1つの Sample Monitor を構築します。total が符号なしの limit 以上(等しい場合を含む)のとき、組み合わせ論理によって alarm を high にします。alarm は各エッジ後に更新された total を反映し、limit の変更にも追従します。limit=0 の場合、total=0 であっても alarm は high になります。すべての累積、イネーブル、クリア、カウントの動作を維持してください。テストベンチと以前の出力動作を含め、前のステップの内容をすべて保持してください。すべての入力値は既知です。シナリオは最大40エッジまでなので、total は16ビットに収まります。固定テストベンチは、シナリオ1~9では total を、シナリオ10~12では total と count を、シナリオ13~15では total、count、alarm を出力します。このステップで有効になっているシナリオのみが採点対象です。
design.v を完成させ、モジュール名とポートを維持してください。ロックされた testbench.v は入力を変更し、安定した後の出力を表示します。+CASE=1 のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。設計に出力、遅延、シミュレーション終了処理を追加しないでください。期待される出力は、観測ごとに10進値を1行にまとめ、値同士を1つの空白で区切り、改行で終わる形式です。
自分で試してみよう
module dut(input clk,rst,en,clear, input [7:0] data, input [15:0] limit, output reg [15:0] total, output reg [3:0] count, output alarm);
always @(posedge clk)begin
if(rst || clear)begin total<=0;count<=0;end
else if(en)begin
total<=total+data;
if(count!=15)count<=count+4'd1;
end
end
assign alarm=0;
endmoduleRTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ