Display And Monitor
Coddy'nin Verilog Journey'sinin Temeller bölümünün bir parçası. Ders 75 / 90.
$display ve $monitor, simülasyonunuzdan bilgileri yazdırmak için kullanılan sistem görevleridir. Tasarımınızın içinde neler olduğunu görmenize yardımcı olurlar.
$display
$display, yürütüldüğü anda bir mesajı bir kez yazdırır.
Sözdizimi:
$display("message", variables);Örnek:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endÇıktı:
Simulation started
Time 10
Time 20$monitor
$monitor, değişkenlerinden herhangi biri değiştiğinde bir mesajı otomatik olarak yazdırır.
Sözdizimi:
$monitor("message", variables);Örnek:
initial begin
a = 0; b = 0;
$monitor("Time %0t: a=%b, b=%b", $time, a, b);
#10 a = 1;
#10 b = 1;
#10 a = 0;
endÇıktı:
Time 0: a=0, b=0
Time 10: a=1, b=0
Time 20: a=1, b=1
Time 30: a=0, b=1$display vs $monitor
| $display | $monitor | |
|---|---|---|
| Ne zaman yazdırır | Yürütüldüğünde bir kez | Bir değişken her değiştiğinde |
| Kaç kez | Çağırdığınız kadar | Sürekli (değiştirilene kadar) |
| Şunun için kullanılır | header'lar, test mesajları | Değişen sinyalleri izleme |
Yaygın Biçim Belirteçleri
| Belirteç | Anlamı | Örnek |
|---|---|---|
%b | Binary | $display("%b", a); |
%d | Ondalık | $display("%d", count); |
%h | Onaltılık | $display("%h", data); |
%t | Time | $display("%t", $time); |
%0t | Time (boşluksuz) | $display("%0t", $time); |
%s | Dize | $display("%s", "Hello"); |
Önemli Kurallar
| Kural | Açıklama |
|---|---|
$display bir kez yazdırır | Başlıklar ve son sonuçlar için uygundur |
$monitor değişiklik olduğunda yazdırır | Sinyalleri izlemek için uygundur |
Yalnızca bir $monitor etkin olabilir | Sonuncusu öncekini geçersiz kılar |
Durdurmak için $finish kullanın | Aksi takdirde simülasyon sonsuza kadar çalışabilir |
Görev
Eksik $display ve $monitor ifadelerini bu testbench'e ekleyin.
Yapılacaklar:
- Add
$displayile bir başlık yazdırın: "Testing OR Gate" - Add
$monitorile herhangi bir sinyal değiştiğinde time, x, y ve z değerlerini yazdırın. Format: "Time %0t: x=%b, y=%b, z=%b" - Sona bir
$displayekleyerek "Test complete" yazdırın
Kendin dene
module or_gate (
input x,
input y,
output z
);
assign z = x | y;
endmodule
module testbench;
reg x, y;
wire z;
or_gate dut (
.x(x),
.y(y),
.z(z)
);
initial begin
// TODO: $display başlığı ekle "Testing OR Gate"
// TODO: zamanı, x, y, z'yi izlemek için $monitor ekle
// Biçim: "Time %0t: x=%b, y=%b, z=%b"
// Uyaran uygula
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: $display ekle "Test complete"
$finish;
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