推荐答案
测试一下
题目
下面关于$display,$strobe,$monitor的区别描述正确的是( )。
A $strobe直接立刻输出,$monitor是等稳定后输出,$display是发生变化时输出
B $strobe直接立刻输出,$display是等稳定后输出,$monitor是发生变化时输出
C $display直接立刻输出,$strobe是等稳定后输出,$monitor是发生变化时输出
D $display直接立刻输出,$display是等稳定后输出,$strobe是发生变化时输出
参考答案与知识点
参考答案
正确答案是C。$display、$strobe和$monitor是Verilog中常用的系统任务,用于输出仿真信息。它们的区别主要体现在输出时机上:$display在遇到该语句时立即执行输出,属于“直接立刻输出”;$strobe则在当前时间步的所有事件处理完毕、仿真时间即将推进时才输出,即“等稳定后输出”;$monitor则持续监控其参数列表中的变量,只要任一变量发生变化,就在该时间步结束后输出一次,属于“发生变化时输出”。因此,选项C描述正确。
具体来说:
- $display:非阻塞输出,执行时立刻打印,不受后续事件影响。
- $strobe:延迟输出,等待当前时间片的所有赋值和事件稳定后再输出,通常用于显示最终结果。
- $monitor:监控变量变化,每次变化后自动输出,只输出一次变化后的值,直至下次变化。
常见易错点:混淆$display和$strobe的时序。$display的输出顺序可能早于阻塞赋值或非阻塞赋值的结果,而$strobe能捕获非阻塞赋值更新后的稳定值。$monitor则适合持续观察信号动态。
涉及知识点
- $display的直接输出特性
- $strobe的稳定后输出机制
- $monitor的监控触发条件
- Verilog事件调度顺序
- 非阻塞赋值与输出时序