在FPGA设计中,理解verilog语言中的延迟操作至关重要。主要有六种延迟操作方式,包括连续赋值、阻塞赋值和非阻塞赋值,以及正规延迟和内定延迟的结合。以下是每种操作的详细解释:
连续赋值(assign #5 C = A + B)在T时刻执行后,会等待5个时间单位,然后计算A和B在T+5时刻的值给C。若在等待期间A或B的值改变,仿真器会撤销等待并重新计算,但小于5个单位的变化无效。
assign C = #5 A + B,与连续赋值类似,不同在于使用T时刻的A和B值,非阻塞赋值变化小于5个单位时,等待会被撤销。
always @(*) #5 C = A + B,阻塞赋值在等待5个时间单位后立即赋值,即使A和B在等待期间改变,仿真器也不会响应,直到always块执行完毕。
always @(*) C = #5 A + B,与阻塞赋值类似,使用T时刻的值,但非阻塞赋值会等待事件队列处理,变化会在下一次事件触发时反映在输出上。
always @(*) #5 C <= A + B,非阻塞赋值在等待期间,A和B的变化会被记录,仿真器会在always块结束后处理,确保输入变化的完整反映。
always @(*) C <= #5 A + B,与非阻塞赋值相同,但使用T时刻的值,区别在于非阻塞赋值会在等待结束后处理输入变化。