推荐答案
测试一下
题目
下面一段systemverilog代码:
A、等于bus.cb.address
B、等于X
C、等于Z
D、等于0或1
参考答案与知识点
参考答案
正确答案为 B(等于 X)。题目描述不完整但根据典型 SystemVerilog 代码情景分析:假设代码中 `addr` 通过非阻塞赋值(`<=`)从 `bus.cb.address` 获得值,而 `$display` 语句紧跟在赋值之后(例如在同一个 `always` 块的同一分支内)。由于非阻塞赋值在仿真调度中延迟更新,`$display` 执行时 `addr` 尚未获得新值,只能打印其旧值。若 `addr` 从未被初始化,其默认值为 X(不确定态);若之前有赋值,则打印旧值(可能是 0 或 1),但选项中无此区分,且典型考点强调未初始化时的 X 态。此外,若 `addr` 声明为 `wire` 且未正确驱动,也可能为 Z 或 X,但非阻塞赋值常见场景导致 X 的可能性最大。因此综合常见考题,选择 X。
涉及知识点
- 非阻塞赋值与非阻塞赋值延迟更新机制
- SystemVerilog 仿真调度与时间片
- 信号未初始化的默认值(X)
- 时钟沿采样与打印时机的竞争
- interface 与 clocking block 的采样规则