Menu
CoddyTech

Display và Monitor

Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 75 trên 90.

$display và $monitor là các tác vụ hệ thống dùng để in ra thông tin từ mô phỏng của bạn. Chúng giúp bạn thấy những gì đang diễn ra bên trong thiết kế.

$display

$display in ra thông báo một lần tại thời điểm được thực thi.

Cú pháp:

$display("message", variables);

Ví dụ:

initial begin
  $display("Simulation started");
  #10;
  $display("Time 10");
  #10;
  $display("Time 20");
end

Đầu ra:

Simulation started
Time 10
Time 20

$monitor

$monitor tự động in ra thông báo mỗi khi bất kỳ biến nào của nó thay đổi.

Cú pháp:

$monitor("message", variables);

Ví dụ:

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

Đầu ra:

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
Khi in raMột lần khi được thực thiMỗi khi một biến thay đổi
Số lầnNhiều lần tùy theo số lần bạn gọiLiên tục cho đến khi có thay đổi
Dùng đểTiêu đề, thông báo kiểm thửTheo dõi các tín hiệu thay đổi

Các định dạng phổ biến

Định dạngÝ nghĩaVí dụ
%bNhị phân$display("%b", a);
%dThập phân$display("%d", count);
%hThập lục phân$display("%h", data);
%tThời gian$display("%t", $time);
%0tThời gian (không có khoảng trắng)$display("%0t", $time);
%sChuỗi$display("%s", "Hello");

Các quy tắc quan trọng

Quy tắcGiải thích
$display in ra một lầnPhù hợp để in tiêu đề và kết quả cuối cùng
$monitor in ra khi có thay đổiPhù hợp để theo dõi các tín hiệu
Chỉ một $monitor hoạt độngLệnh cuối cùng thay thế lệnh trước đó
Dùng $finish để dừngNếu không, mô phỏng có thể chạy mãi
challenge icon

Thử thách

Thêm các câu lệnh $display và $monitor còn thiếu vào testbench này.

Cần làm:

  1. Thêm $display để in tiêu đề: "Testing OR Gate"
  2. Thêm $monitor để in thời gian, x, y và z mỗi khi có tín hiệu thay đổi. Định dạng: "Time %0t: x=%b, y=%b, z=%b"
  3. Thêm $display ở cuối để in "Test complete"

Tự làm thử

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: Thêm $display để in tiêu đề "Testing OR Gate"
    
    
    // TODO: Thêm $monitor để theo dõi thời gian, x, y, z
    // Định dạng: "Time %0t: x=%b, y=%b, z=%b"
    
    
    // Áp dụng tín hiệu kích thích
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    // TODO: Thêm $display để in "Test complete"
    
    
    $finish;
  end
endmodule
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Verilog online