Verilog常用显示任务函数有哪些?

文章来源: FPGA入门到精通

在FPGA设计和仿真的征途上,调试信息的实时显示是我们不可或缺的导航工具。

本文将深入剖析Verilog中的显示任务函数,结合丰富的实例,让大家迅速掌握这些强大的调试助手。

一、Verilog显示任务概览

Verilog提供了四种主要的系统任务函数来打印调试信息: 

$display 、 $write 、 $strobe 和 $monitor 

这些任务函数是FPGA开发者在进行仿真和调试时的得力助手。

二、$display 任务:多功能的显示能手

 $display 类似于C语言中的 printf 函数,支持丰富的格式化输出。

它可以直接打印字符串,也可以在字符串中指定变量的格式进行打印。

常用的输出格式如下:

1.png

转义序列如下:

2.png

initial begin
    $display("Simulation starts at time %0t", $time);
    $display("Binary value of num: %b", num);
end

三、$write 任务:连续输出的巧匠

 $write 的使用方式与 $display 完全一致,唯一的区别在于它不会在信息末尾自动换行。

这使得 $write 非常适合在需要连续输出多条信息时使用。

initial begin
    $write("Continuous message: ");
    $write("Part 1");
    $write(" Part 2");
    $write(" at time ");
    $write(%0t); // 使用转义字符%t输出当前时间
    $display; // 最后换行
end

四、$strobe 任务:选通显示的精准捕手

 $strobe 是一个在当前仿真时间步结束时打印变量最终值的显示任务。

与 $display 相比, $strobe 的显示时机更晚,可以捕获到非阻塞赋值的最终结果。

always @(posedge clk) begin
    if (trigger) begin
        $strobe("Triggered at time: %0t, final value of signal: %0d", $time, signal);
    end
end

五、$monitor 任务:持续监测的忠诚哨兵

 $monitor 是一个持续监测变量变化并打印信息的任务。

每当被监测的变量值发生变化时, $monitor 就会输出当前的仿真时间和变量值。

initial begin
    $monitor("Time: %0t, Signal a: %0b, Signal b: %0b", $time, a, b);
end

六、实战技巧分享

在FPGA开发中,合理使用显示任务能够极大提高调试效率。

利用 $monitor 持续监控关键信号,以便快速定位问题。

结合 $display 和 $write 实现多行和单行的输出控制。

使用格式说明符和转义序列清晰展示信号的数值和状态。

在长时间运行的仿真中,可以使用文件I/O记录关键数据,便于后续分析。

最新文章

最新文章