了解Verilog和SystemVerilog中的$monitor系统任务

科技   2024-10-19 07:40   美国  

今天,我们将深入研究SystemVerilog中一个非常有用的功能——$monitor系统任务。如果你曾经想知道如何在仿真过程中持续关注你的变量,那么就了解下$monitor吧。

$monitor系统任务是什么?

$monitor系统任务类似于有一个对变量保持关注的监视者。它会监视指定变量的更改,并在发生这些更改时打印消息。它在仿真time step结束时运行。

要记住的要点

  • 持续监控:$monitor跟踪指定变量的变化,并在发生变化时打印消息。
  • 仿真时间结束:它在postponed events region运行,这是仿真时间的最后一个区域,因此在所有阻塞/非阻塞更新后,它会打印出最终值。
  • 控制任务:你可以使用$monitoron$monitoroff任务来控制监控。默认情况下,监控在仿真开始时打开。
  • 监视器列表异常:$time$stime$realtime的更改不会触发监视器事件。

简单的测试平台示例

让我们仔细看看$monitor系统任务是如何与简单的测试台一起工作的。

`timescale 1ns/1ns

module MonitorTB;
logic clk;
logic [3:0] count;

// Initialize the variables
initial begin
clk = 0;
count = 0;
end

// Generate clock signal
always #5 clk = ~clk;

// Increment count on the positive edge of the clock
always @(posedge clk) begin
count <= count + 1;
end

// Monitor changes in count and clk
initial begin
$monitor("At time %0t, count = %0d", $time, count);
#30 $monitoroff; // Disable monitoring after 30 time units
#40 $monitoron; // Re-enable monitoring after 70 time units
end

// Stop the simulation after a certain time
initial begin
#100 $finish;
end
endmodule


  1. 初始化:每当count发生变化时,$monitor任务都会打印count和当前仿真时间。
  2. 监控控制$monitoroff在30个时间单位后被调用以停止监控。
  3. 恢复监控$monitoron在70个时间单位后调用以恢复监控。

结果

以下是仿真期间的输出:

At time 0, count = 0
At time 5000, count = 1
At time 15000, count = 2
At time 25000, count = 3
At time 70000, count = 7
At time 75000, count = 8
At time 85000, count = 9
At time 95000, count = 10

$monitor任务跟踪count的变化,每次更新时打印其值。监控在30个时间单位时关闭,在70个时间单位时重新打开。



结论:$monitor系统任务是SystemVerilog中用于持续监控变量变化的重要工具。无论您是在调试还是只是关注事物。

数字芯片实验室
前瞻性的眼光,和持之以恒的学习。
 最新文章