[Verilog HDL] 非阻塞赋值

[复制链接]
11085|0
 楼主| gaochy1126 发表于 2024-11-30 21:30 | 显示全部楼层 |阅读模式
在Verilog中,<=表示非阻塞赋值(Non-blocking assignment),而=表示阻塞赋值(Blocking assignment)‌。‌12

非阻塞赋值(<=)
非阻塞赋值主要用于时序逻辑,特别是在时钟触发的过程块中。其特点是在当前时间步的末尾更新变量的值,不会立即执行,而是将赋值推迟到时间步的末尾。这使得多个非阻塞赋值语句可以并行执行,不会相互阻塞,常用于描述硬件中的寄存器行为。

阻塞赋值(=)
阻塞赋值主要用于组合逻辑和过程块内的赋值。其特点是立即执行赋值操作,更新变量的值后会立即影响后续语句的执行。由于阻塞赋值会立即更新变量的值,因此常用于描述组合逻辑。

使用场景和示例
‌非阻塞赋值(<=)‌:

verilog
Copy Code
always @(posedge clk) begin
    a <= a + 1'b1;
    b <= b + 1'b1;
    c <= a + b;
end
在这个例子中,a、b和c的值将在时钟上升沿的末尾同时更新,不会相互影响。

‌阻塞赋值(=)‌:

verilog
Copy Code
always @(*) begin
    a = b; // 阻塞赋值,立即更新a的值,影响后续语句的执行
end
在这个例子中,a的值会立即更新,影响后续语句的执行。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1205

主题

11937

帖子

26

粉丝
快速回复 在线客服 返回列表 返回顶部