阻塞赋值和非阻塞赋值

        阻塞赋值(Blocking Assignment)和非阻塞赋值(Non-blocking Assignment)是硬件描述语言(如Verilog)中的两种赋值方式,它们在仿真和综合时有不同的行为。

一、阻塞赋值(Blocking Assignment)

        阻塞赋值使用 = 运算符。它的特性是赋值语句会立即执行,且会阻塞(即在当前语句执行完毕之前,后续语句不会执行)。这类似于软件编程中的顺序执行。

示例verilog代码
module blocking_assignment;
    reg [7:0] a, b, c;

    initial begin
        a = 8'd1;  // a = 1
        b = a;     // b = 1 (b 被赋值为 a 的值)
        c = b;     // c = 1 (c 被赋值为 b 的值)
    end
endmodule

在这个例子中,a 先被赋值为 1,然后 b 被赋值为 a 的值,最后 c 被赋值为 b 的值。每一步操作是顺序执行的。

二、非阻塞赋值(Non-blocking Assignment)

非阻塞赋值使用 <= 运算符。它的特性是赋值语句会被安排在当前时间步的结束时执行,且不会阻塞(即所有非阻塞赋值语句会在当前时间步的结束时同时执行)

示例verilog代码
module nonblocking_assignment;
    reg [7:0] a, b, c;

    initial begin
        a <= 8'd1; // a = 1 (在当前时间步结束时)
        b <= a;    // b = a (在当前时间步结束时 b 被赋值为 a 的初始值,此时 a 还未更新)
        c <= b;    // c = b (在当前时间步结束时 c 被赋值为 b 的初始值,此时 b 还未更新)
    end
endmodule

在这个例子中,a 在当前时间步结束时被赋值为 1,但 b 被赋值时,a 还没有被更新,因此 b 仍然保持初始值(假设为 0),同理,c 也保持初始值。

总结

  • 阻塞赋值(=:按顺序执行,阻塞后续语句。
  • 非阻塞赋值(<=:在时间步结束时同时执行,不阻塞后续语句。

选择哪种赋值方式取决于具体的仿真需求和硬件逻辑设计要求。阻塞赋值通常用于组合逻辑,而非阻塞赋值用于时序逻辑。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值