打印
[Verilog HDL]

非阻塞赋值

[复制链接]
3075|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的值会立即更新,影响后续语句的执行。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

1074

主题

11334

帖子

26

粉丝