| $strobe |
| $strobe 为选通显示任务。$strobe 使用方法与 $display 一致,但打印信息的时间和 $display 有所差异(也可以直接打印文本)。 |
| 当许多语句与 $display 任务在同一时间内执行时,这些语句和 $display 的执行顺序是不确定的,一般按照程序的顺序结构执行。两者的区别在于:$strobe命令会在当前时间部结束时完成;而$display是只要仿真器看到就会立即执行。 |
| $strobe 是在其他语句执行完毕之后,才执行显示任务。例如: |
| `timescale 1ns/1ns |
| module test_tb(); |
| reg [3:0] a ; |
| initial begin |
| $strobe("begin!"); |
| a = 1 ; |
| |
| a <= a + 1 ; |
| |
| $display("$display excuting result: %d.", a); |
| $strobe("$strobe excuting result: %d.", a); |
| |
| $display(); |
| |
| $display("$display excuting result: %d.", a); |
| $strobe("$strobe excuting result: %d.", a); |
| $strobe("end!"); |
| end |
| endmodule |
| 其打印结果如下: |

| 可以看到,$strobe与$display的打印内容不是一致的。 |
| 这是因为该语句: a <= a + 1 ;也就是说a的第二次赋值是非阻塞赋值,而非阻塞赋值是需要时间的。 |
| 在第一次打印时,$display不会管你a是阻塞赋值还是非阻塞赋值,它就直接打印a当前的值1。而$strobe则会等到非阻塞赋值完成后再打印,所以其打印的值为2。 |
| 在第二次打印时,又延时了1ns,所以此时的非阻塞赋值完成,那么$strobe与$display的打印内容就均为2了。 |
| 所以$strobe这个系统任务通常是用来打印当前非阻塞赋值的变量值的。 |
| |
| $monitor |
| $monitor 为监测任务,用于变量的持续监测。只要变量发生了变化,$monitor 就会打印显示出对应的信息。 其使用方法与 $display一致。 |
| 下面的代码用$monitor 来实现监控a,b,c这3个变量,只要其中一个发生了变化,就会立马在终端打印。 |
| `timescale 1ns/1ns |
| module test_tb(); |
| reg [1:0] a ; |
| reg [1:0] b ; |
| reg [1:0] c ; |
| initial begin |
| a = 0 ; |
| b = 0 ; |
| c = 0 ; |
| |
| $monitor("a=%d b=%d c=%d",a,b,c); |
| #50 $finish; |
| end |
| always #10 begin |
| a = {$random}%4; |
| b = {$random}%4; |
| c = {$random}%4; |
| end |
| endmodule |
| 终端打印结果如下: |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架