FPGA中阻塞赋值与非阻塞赋值的用法
在FPGA(现场可编程逻辑门阵列)开发中,我们经常会用到阻塞赋值和非阻塞赋值这两种方式来对信号进行赋值操作。这两种赋值方式有着不同的特点和用法,正确地选择和使用它们对于设计的正确性和性能至关重要。
一、阻塞赋值(Blocking Assignment)
阻塞赋值是指在赋值语句的右侧使用的变量的当前值直接赋给左侧的变量。它的语法形式为:
variable = value;
阻塞赋值语句的执行顺序是从上到下按照顺序执行的。也就是说,如果存在多个阻塞赋值语句,并且它们出现在同一个时钟周期中,那么后面的赋值语句会覆盖之前的赋值结果。
下面是一个简单的例子,展示了阻塞赋值的用法:
module blocking_example(
input clk,
input reset,
output reg led
);
always @(posedge clk or posedge reset)
begin
if(reset)
led <= 1'b0;
else
led <= 1'b1;
end
endmodule
在上面的例子中,当复位信号reset为高电平时,led信号被阻塞赋值为低电平。当复位信号reset为低电平时,led信号被阻塞赋值为高电平。阻塞赋值语句中的等号表示了一个并行关系,在时钟的上升沿触发时起作用。
二、非阻塞赋值(Non-Blocking