SystemVerilog中的阻塞赋值与非阻塞赋值:
阻塞赋值:
定义:阻塞赋值确保赋值操作顺序执行。在赋值语句执行完成之前,后续的语句将被阻塞,不会执行。执行顺序:在阻塞赋值中,每个语句按其在代码中的顺序依次执行。应用场景:通常用于组合逻辑和时序电路中的采样事件,以确保确定性。
非阻塞赋值:
定义:非阻塞赋值允许多个赋值操作在同一时间片内的不同事件区域并发执行。赋值操作不会阻塞后续语句的执行。执行顺序:非阻塞赋值中的所有赋值语句看似在同一时间点执行,但实际执行顺序由仿真器的调度机制决定。应用场景:在UVM环境中,driver通常采用非阻塞赋值来驱动DUT接口,以模拟真实硬件中的并发信号变化。
关键差异:
执行方式:阻塞赋值顺序执行,非阻塞赋值并发执行。应用场景:阻塞赋值多用于需要确保执行顺序的场合,如时序电路的采样;非阻塞赋值多用于模拟并发事件的场合,如driver驱动信号。调度影响:阻塞赋值受调度顺序影响较小,结果相对确定;非阻塞赋值受调度顺序影响较大,可能导致不同仿真器间的结果差异。
在UVM中的应用:
driver:使用非阻塞赋值,以模拟硬件中信号的并发变化。monitor:使用阻塞赋值,因为monitor不驱动信号,而是采样信号,需要确保采样操作的确定性。