Using System Tasks
CoddyのVerilogジャーニー「基礎」セクションの一部。レッスン 77/90。
System tasksは、ドル記号($)で始まるVerilog組み込みコマンドです。メッセージの出力、シミュレーションの終了、波形ファイルの作成など、便利な機能を実行します。
これまでのレッスンで、$display、$monitor、$dumpfile、$dumpvarsについてはすでに学びました。このレッスンでは、testbenchで役立つその他のシステムタスクを見ていきます。
追加のシステムタスク
| システムタスク | 目的 |
|---|---|
$time | 現在のシミュレーション時間を返す |
$finish | シミュレーションを終了する |
$stop | シミュレーションを一時停止する |
$random | ランダムな数値を生成する |
$time
現在のシミュレーション時間を返します。イベントがいつ発生したかを追跡するのに便利です。
$display("Current time is %0t", $time);$finish
シミュレーションを終了します。testbench の最後には必ず使用してください。
$finish;$stop
simulationを一時停止します。シミュレーターコマンドで再開できます。デバッグに便利です。
$stop;$random
乱数を生成します。ランダムなテスト刺激の作成に役立ちます。
reg [7:0] rand_value;
rand_value = $random;複数のシステムタスクを使用した例
module system_tasks_demo;
reg [7:0] data;
integer i;
initial begin
$display("Simulation started at time %0t", $time);
for (i = 0; i < 5; i = i + 1) begin
data = $random;
$display("Random value %d: %b", i, data);
end
$stop;
#10 $display("Resumed at time %0t", $time);
$display("Simulation finished at time %0t", $time);
$finish;
end
endmoduleチャレンジ
この testbench に不足している system tasks を追加してください。
実行内容:
- Add
$displayを使用して start に current time を出力する - Add
$displayを使用して end に current time を出力する - Add
$finishを使用して simulation を終了する
自分で試してみよう
module and_gate (
input a,
input b,
output c
);
assign c = a & b;
endmodule
module testbench;
reg a, b;
wire c;
and_gate dut (
.a(a),
.b(b),
.c(c)
);
initial begin
// TODO: 開始時に現在時刻付きの $display を追加
// フォーマット: "Start time: %0t"
$monitor("Time %0t: a=%b, b=%b, c=%b", $time, a, b, c);
a = 0; b = 0; #10;
a = 0; b = 1; #10;
a = 1; b = 0; #10;
a = 1; b = 1; #10;
// TODO: 終了時に現在時刻付きの $display を追加
// フォーマット: "End time: %0t"
// TODO: $finish を追加
end
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge14Testbench Basics
What Is A TestbenchCreating StimulusDisplay And MonitorDumpfile And DumpvarsUsing System TasksRecap - Full Testbench3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic自分で練習してみよう: Verilogオンラインコンパイラ