第1个回答 2024-09-10
阻塞赋值“=”与非阻塞赋值“<=”是Verilog中两种不同的赋值方式,它们分别对应组合逻辑电路与时序逻辑电路。
阻塞赋值“=”对应组合逻辑电路赋值,且在赋值操作后会阻止后续操作进行。反之,非阻塞赋值“<=”则对应时序逻辑电路赋值,具有存储功能,所有非阻塞赋值在同一时刻进行。
在Vivado综合时序逻辑电路中的赋值代码,可以看到阻塞赋值后的电路如同组合逻辑电路,无缓存功能,out_o被优化掉。而非阻塞赋值的电路则符合时序逻辑电路特性,out_o_1相较于out_o延迟一拍。
仿真中,仿真器规定当前时刻的事件优先级,活跃事件立即执行,其他事件等待到某个时刻开始执行。因此,编写代码时建议遵循以下几点:时序电路使用非阻塞赋值,组合电路使用阻塞赋值,同一always块中避免混用阻塞与非阻塞赋值,以防综合出非预期电路。