Menu
CoddyTech

Dumpfile và Dumpvars

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 76 trên 90.

Dạng sóng là cách biểu diễn trực quan sự thay đổi của tín hiệu theo thời gian. Dạng sóng cho thấy các tín hiệu (như clk, a, b, out) thay đổi như thế nào trong quá trình mô phỏng. Trục ngang biểu thị thời gian, còn trục dọc biểu thị giá trị tín hiệu (0, 1, X, Z).
 

$dumpfile và $dumpvars là các tác vụ hệ thống dùng để tạo tệp dạng sóng (tệp VCD) mà bạn có thể xem trong trình xem dạng sóng như GTKWave. VCD là viết tắt của Value Change Dump. Đây là tệp ghi lại mọi thay đổi tín hiệu trong quá trình mô phỏng. Bạn có thể mở tệp này trong trình xem dạng sóng để xem các tín hiệu một cách trực quan.

$dumpfile

$dumpfile chỉ định tên tệp dạng sóng cần tạo.

Cú pháp:

$dumpfile("filename.vcd");

Ví dụ:

$dumpfile("my_waveform.vcd");

Lệnh này tạo một tệp có tên my_waveform.vcd.

$dumpvars

$dumpvars chỉ định những tín hiệu cần ghi vào tệp dạng sóng.

Cú pháp:

$dumpvars(level, module_name);
Tham sốÝ nghĩa
levelSố cấp phân cấp cần kết xuất (0 = tất cả các cấp)
module_nameModule cần kết xuất tín hiệu

Lưu ý: Thứ bậc nghĩa là các module nằm bên trong module khác. Dùng 0 để ghi lại tất cả tín hiệu từ module cấp cao nhất và mọi module bên trong nó, còn dùng 1 để chỉ ghi lại tín hiệu từ module cấp cao nhất.

Cách dùng phổ biến

initial begin
  $dumpfile("dump.vcd");
  $dumpvars(0, testbench);
end
  • $dumpfile("dump.vcd") → tạo tệp có tên dump.vcd
  • $dumpvars(0, testbench) → ghi lại tất cả tín hiệu trong module testbench và tất cả module con

Ví dụ với testbench

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
    $dumpfile("dump.vcd");
    $dumpvars(0, testbench);
    
    $display("Creating waveform file...");
    
    x = 0; y = 0; #10;
    x = 0; y = 1; #10;
    x = 1; y = 0; #10;
    x = 1; y = 1; #10;
    
    $finish;
  end
endmodule

Ví dụ về mức dumpvars

MứcDữ liệu được ghi
0Tất cả tín hiệu trong module và mọi module con
1Chỉ các tín hiệu trong module được chỉ định, không gồm module con
challenge icon

Thử thách

Thêm các câu lệnh $dumpfile và $dumpvars còn thiếu để tạo tệp dạng sóng.

Cần làm:

  1. Thêm $dumpfile để tạo tệp có tên waveform.vcd
  2. Thêm $dumpvars để ghi lại tất cả tín hiệu trong module testbench

Tự làm thử

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: Thêm $dumpfile để tạo "waveform.vcd"
    
    
    // TODO: Thêm $dumpvars để ghi tất cả tín hiệu trong testbench
    // Gợi ý: $dumpvars(0, testbench);
    
    if ($test$plusargs("vcd")) begin
        $display("VCD file created successfully");
    end
    
    $display("Simulation running...");
    
    a = 0; b = 0; #10;
    a = 0; b = 1; #10;
    a = 1; b = 0; #10;
    a = 1; b = 1; #10;
    
    $display("Simulation complete. Open waveform.vcd");
    $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