您的位置:

深入理解非阻塞赋值

一、非阻塞赋值符号

Verilog语言中的非阻塞赋值使用符号“<=”。它与阻塞赋值符号“=”的区别在于:当发生“<=”赋值时,当前的执行过程不会被挂起,而阻塞赋值会。

二、非阻塞赋值操作符使用

下面是一个Verilog模块中的一段代码示例:

always@(posedge clk)
begin
   a <= b;
   b <= c;
   c <= a+b;
end

在本例中,a、b、c都是寄存器类型的临时变量,它们维护了当前电路模块的状态。

在时钟信号的上升沿触发之后,b先被赋值给了a,而后续的语句也不会等待a的赋值完成才执行下一个,而是顺序执行下去,b被赋值为c的值,而c被赋值为a+b的值,这是因为非阻塞赋值不会对当前执行过程产生影响。

三、非阻塞赋值语句

非阻塞赋值语句中,右侧的值是在异步方式下计算得出的,无需等待同步信号的到来。

下面是一个考察非阻塞赋值的例子:

always @(posedge clock) begin
    reg [4:0] x = 0;
    reg y = 0;
    x <= y;
    y <= x + 1;
end

在上述例子中,x的值被赋成y的值,y的值又被更新为x+1:

y是一个非阻塞赋值,所以要等到下一次时钟触发到来时,才会执行y的赋值操作。

因此,在当前时钟周期内,x被赋值后,y的值并未产生变化(仍然为0)。

四、非阻塞赋值和小于等于

小于等于“<=”被用作非阻塞赋值是Verilog语言的一个约定,意味着变量的更新不受顺序的依赖,而是按照代码顺序来更新变量。

下面是一个使用小于等于的例子,在这个例子中,这两个赋值是按照代码顺序来更新变量的:

always @(posedge clk)
begin
    a <= b+1;
    b <= a+1;
end

五、非阻塞赋值介绍

在Verilog语言中,非阻塞赋值在语音上不会阻塞当前的执行过程。

非阻塞赋值在模块运行的过程中发挥着至关重要的作用。在大部分Verilog代码设计中,都会使用非阻塞赋值,以简化电路的实现。

六、非阻塞赋值的特点

非阻塞赋值有以下几个特点:

  1. 非阻塞赋值在执行过程中不会阻塞当前的执行过程。
  2. 非阻塞赋值是异步计算的。
  3. 非阻塞赋值的结果在下一时钟上升沿到来时更新。

七、非阻塞赋值一定要有上升沿吗

非阻塞赋值不一定要有上升沿来触发,也可以通过其他方式来触发。

一个使用时间触发的例子:

integer i;
reg [7:0] x = 0;
parameter N = 3;
initial begin
    for (i = 0; i <= N; i++) x <= #10 x+1;
end

在上面的例子中,变量x被赋值为0,然后在一个循环中执行5次,每次都会在10个时间单位后将x的值+1。

八、非阻塞赋值语句特点

非阻塞赋值语句一般都需要在“always”语句中使用,用来更新寄存器的状态。

下面是一个在“always”语句中使用非阻塞赋值的例子:

always @(posedge clk)
begin
    a <= b;
    b <= c;
    c <= a+b;
end

九、非阻塞赋值会延迟吗

对于单个非阻塞赋值操作,它不会被延迟,但整个模块的运行仍然会被其所影响。

下面是一个包含非阻塞赋值的时序图:

    -------  -----------------  ----------
         a <= | b & c;         |
         b <= | a ^ d;         |
         c <= | b;             |
         d <= | c;             |
    -------  -----------------  ----------

在这个时序图中,d的值不是在a被更新后立即被赋新值,而是在一个时间延迟后才得到更新。

可以发现,在这个例子中,每个非阻塞赋值变量的值都依赖于上一个非阻塞赋值变量的值。

十、非阻塞赋值什么时候赋值

对于非阻塞赋值的使用,需要注意的是,它是异步延迟的。

当电路中存在时序相关的逻辑电路时,会随着时间的推移而逐渐产生延迟,进而使电路产生故障。

在Verilog中,当出现上述问题时,需要使用同步赋值。它会同步地等待下一时钟上升沿再更新变量的值,从而保证时序电路正确的操作。

总结

以上就是关于非阻塞赋值的详细阐述了,包括非阻塞赋值符号、非阻塞赋值操作符使用、非阻塞赋值语句、非阻塞赋值和小于等于、非阻塞赋值介绍、非阻塞赋值的特点、非阻塞赋值一定要有上升沿吗、非阻塞赋值语句特点、非阻塞赋值会延迟吗、非阻塞赋值什么时候赋值等相关内容,希望可以帮助到大家深入理解非阻塞赋值的原理与运用。