受け入れたサンプルを数える
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 34/38。
チャレンジ
難しい5つのステップで1つのSample Monitorを構築します。countで受理されたサンプルを追跡し、リセットまたはクリア中でない各enエッジでインクリメントし、15で飽和させます。rstまたはclearにより、countとtotalの両方をリセットします。値が0の受理されたサンプルでもcountをインクリメントします。テストベンチと、それ以前の出力動作を含め、前のステップの内容をすべて維持してください。すべての入力値は既知です。シナリオに含まれるエッジは最大40個なので、totalは16ビットに収まります。固定テストベンチは、シナリオ1〜9ではtotalを、シナリオ10〜12ではtotalとcountを、シナリオ13〜15ではtotal、count、alarmを出力します。このステップで有効になっているシナリオのみが採点対象です。
design.vを完成させ、モジュール名とポートを維持してください。ロックされたtestbench.vは入力の変化を供給し、安定した後に出力を表示します。+CASE=1のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。designに出力、遅延、またはシミュレーション終了処理を追加しないでください。期待される出力は、観測ごとに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)total<=0;else if(clear)total<=0;else if(en)total<=total+data;
count<=0;
end
assign alarm=0;
endmoduleRTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ