07 FPGA阻塞赋值与非阻塞赋值

 阻塞赋值与非阻塞赋值的含义:

       在组合逻辑电路中使用阻塞赋值,其效果和c语言是一样的顺序执行,但在时序逻辑电路中常使用非阻塞赋值。非阻塞赋值最明显的就是所有语句块以及一个语句块中的不同变量都是在同步时钟控制下并行执行,这样就会出现输入与输出“延一拍”的效果,也称为“打拍”。

下面写个代码验证一下

代码段:

`timescale  1ns/1ns

module  non_blocking
(
    input   wire            sys_clk     ,  
    input   wire            sys_rst_n   ,  
    input   wire            in          ,  

    output  reg             out            
);

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        begin
            out    <= 1'b0;
        end
    else
        begin
            out    <= in;
        end

endmodule

仿真段:

`timescale  1ns/1ns

module tb_non_blocking();

wire      out;

reg       sys_clk;
reg       sys_rst_n;
reg       in;


initial begin
    sys_clk    = 1'b1;
    sys_rst_n <= 1'b0;
    in        <= 1'b0;
    #20;
    sys_rst_n <= 1'b1;
end

//sys_clk:模拟系统时钟,每10ns电平翻转一次,周期为20ns,频率为50Mhz
always #10 sys_clk = ~sys_clk;

//key_in:产生输入随机数,模拟按键的输入情况
always #20 in <= {$random} % 2; //取模求余数,产生非负随机数0、1,每隔20ns产生一次随机数


non_blocking    non_blocking_inst
(
    .sys_clk    (sys_clk    ),  
    .sys_rst_n  (sys_rst_n  ),  
    .in         (in         ),  

    .out        (out        )   
);

endmodule

仿真波形: 

      由仿真波形图可以看出,非阻塞赋值的 out输出 确实比 输入in 慢一拍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡0糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值