真实面经题目 · 原创解析
SystemVerilog 中 event 的用法是什么?
这题考仿真进程同步机制,回答要说明 event 的触发、等待、triggered 属性和竞态风险。
真实面经题目 · 原创解析
这题考仿真进程同步机制,回答要说明 event 的触发、等待、triggered 属性和竞态风险。
event 是 testbench 里用于进程同步的事件句柄。一个进程可以用 `-> e` 触发事件,另一个进程用 `@e` 等待事件发生,常用于通知采样完成、事务到达或阶段同步。SystemVerilog 里还可以用 `wait(e.triggered)` 判断当前时间步事件是否已经触发,减少某些 `@e` 错过同时间触发的竞态。event 本身不携带数据,也不是队列;如果要传数据,需要配合 mailbox、queue、semaphore 或 transaction 对象。工程上要注意触发和等待的先后关系、同一时间片调度以及 reset/timeout,避免进程永远卡住。
event 主要用于仿真进程之间通知某件事发生。它没有电平保持和数据载荷,触发是一个仿真调度事件,不等同于硬件信号。
触发常用 `-> e`,等待常用 `@e`。等待进程会阻塞直到事件被触发,适合 driver、monitor、scoreboard 或测试流程之间做轻量同步。
如果触发和等待发生在同一时间步,单纯 `@e` 可能因为调度顺序错过。`wait(e.triggered)` 可检测当前时间步事件已触发,常用于降低事件同步竞态。
event 不保存历史,也不传递数据。需要排队传事务用 mailbox 或 queue;需要资源互斥用 semaphore;需要长期状态用变量、配置或显式握手。
event 只通知事件发生,不携带数据;mailbox 可以在线程之间传递对象或数据,并具备队列语义。
如果事件触发已经在当前调度时间发生,而等待语句之后才开始阻塞,普通 `@e` 不会记住历史触发。
要看断言、功能覆盖、代码覆盖、错误注入和回归日志是否对应题目里的关键路径;如果只是组件能跑起来,但没有覆盖目标状态和异常分支,验证价值是不够的。