Display And Monitor
جزء من قسم الأساسيات في رحلة Verilog على Coddy. الدرس 75 من 90.
$display و$monitor هما مهمتا نظام تُستخدمان لطباعة المعلومات من محاكاتك. تساعدانك على رؤية ما يحدث داخل تصميمك.
$display
تطبع $display رسالة message مرة واحدة في اللحظة التي يتم فيها تنفيذها.
الصيغة:
$display("message", variables);مثال:
initial begin
$display("Simulation started");
#10;
$display("Time 10");
#10;
$display("Time 20");
endالمخرجات:
Simulation started
Time 10
Time 20$monitor
تطبع $monitor رسالة تلقائيًا كلما تغيّر أيّ من متغيراتها.
الصياغة:
$monitor("message", variables);مثال:
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المخرجات:
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 مقابل $monitor
| $display | $monitor | |
|---|---|---|
| متى تتم الطباعة | مرة واحدة عند التنفيذ | في كل مرة يتغير فيها متغير |
| عدد المرات | بعدد المرات التي تستدعيه فيها | باستمرار (حتى يتغير) |
| يُستخدم من أجل | header، test message | track الإشارات المتغيرة |
محدِّدات Format الشائعة
| المحدِّد | المعنى | مثال |
|---|---|---|
%b | Binary | $display("%b", a); |
%d | عشري | $display("%d", count); |
%h | سداسي عشري | $display("%h", data); |
%t | Time | $display("%t", $time); |
%0t | Time (من دون مسافات) | $display("%0t", $time); |
%s | سلسلة نصية | $display("%s", "Hello"); |
القواعد المهمة
| القاعدة | الشرح |
|---|---|
تطبع $display مرة واحدة | مناسب للعناوين والنتائج النهائية |
تطبع $monitor عند حدوث تغيير | مناسب لمراقبة الإشارات |
لا يُفعَّل سوى $monitor واحد | يتجاوز الأخير ما سبقه |
استخدم $finish للإيقاف | وإلا فقد تستمر المحاكاة إلى ما لا نهاية |
التحدي
أضف عبارتي $display و$monitor المفقودتين إلى testbench هذا.
ما يجب فعله:
- Add
$displayلطباعة ترويسة: "Testing OR Gate" - أضف
$monitorلطباعة time وx وy وz عند تغيّر أي إشارة. Format: "Time %0t: x=%b, y=%b, z=%b" - أضف
$displayفي النهاية لطباعة "Test complete"
جرّب بنفسك
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 "Testing OR Gate"
// TODO: أضف $monitor لتتبع الوقت، x، y، z
// التنسيق: "Time %0t: x=%b, y=%b, z=%b"
// تطبيق المحفزات
x = 0; y = 0; #10;
x = 0; y = 1; #10;
x = 1; y = 0; #10;
x = 1; y = 1; #10;
// TODO: أضف $display "Test complete"
$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 عبر الإنترنت