Verilog阻塞赋值、非阻塞赋值

本文详细介绍了Verilog编程中的阻塞赋值(使用 =)和非阻塞赋值(使用 <=)的区别。通过示例代码和仿真结果,展示了阻塞赋值导致的顺序执行特性,以及非阻塞赋值在并行执行中的延迟更新行为,帮助理解这两种赋值方式在FPGA开发中的应用。

1.阻塞赋值(使用 = )

理解为程序语言(如C语言)的顺序执行,“语句1”执行完毕之后才能执行“语句2”(执行“语句1”时,对于“语句2”谓之“阻塞”)。举例:

module Trigger(
    input in,
    input clk,
    output reg out_a,
    output reg out_b
    );
    always @(posedge clk)
    begin
        out_a = in; // 语句1
        out_b = out_a; // 语句2
    end
endmodule

RTL图如下:

仿真结果表明,两个输出随上升沿的到来同时变化(其实就是同一个输出): 

2.非阻塞赋值(使用 <= )

可理解为并行执行,但并不立即赋值(out_a和out_b不立即被in和out_a所更新)。在“<=”右边计算完、整个块结束时,才更新“<=”左边进行赋值。

如下代码,若in

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值