Using System Tasks
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 77 / 90.
Sistem görevleri, dolar işaretiyle ($) başlayan Verilog içindeki yerleşik komutlardır. Mesaj yazdırma, benzetimi sonlandırma ve dalga biçimi dosyaları oluşturma gibi yararlı işlevleri yerine getirirler.
Önceki derslerde $display, $monitor, $dumpfile ve $dumpvars konularını zaten ele aldık. Bu derste, testbench'lerde yararlı olan ek sistem görevlerine bakacağız.
Ek Sistem Görevleri
| Sistem Görevi | Amaç |
|---|---|
$time | Geçerli simulation zamanını döndür |
$finish | simulation'ı sonlandır |
$stop | simulation'ı duraklat |
$random | random number oluştur |
$time
Geçerli simülasyon zamanını döndürür. Olayların ne zaman gerçekleştiğini takip etmek için kullanışlıdır.
$display("Current time is %0t", $time);$finish
Simülasyonu sonlandırır. Testbench'inizin sonunda her zaman kullanın.
$finish;$stop
Simülasyonu duraklatır. Bir simülatör komutuyla sürdürülebilir. Hata ayıklama için kullanışlıdır.
$stop;$random
Rastgele bir sayı üretir. Rastgele test uyarımı oluşturmak için kullanışlıdır.
reg [7:0] rand_value;
rand_value = $random;Birden Fazla Sistem Görevi Kullanarak Örnek
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
endmoduleGörev
Bu testbench'e eksik sistem görevlerini ekleyin.
Yapılacaklar:
- Başlangıçta geçerli zamanı yazdırmak için
$displayekleyin - Sonda geçerli zamanı yazdırmak için
$displayekleyin - Simülasyonu sonlandırmak için
$finishekleyin
Kendin dene
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: Başlangıçta mevcut zaman ile $display ekle
// Biçim: "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: Sonda mevcut zaman ile $display ekle
// Biçim: "End time: %0t"
// TODO: $finish ekle
end
endmoduleBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
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 LogicKendi başına pratik yap: Online Verilog derleyicisi