zoukankan      html  css  js  c++  java
  • verilog阻塞与非阻塞的初步理解(一)

    通过两个模块来区别两者。测试平台:Modelsim altera 6.5b

    阻塞模块:

    module blocking(clk,a,b,c);
      input[3:0] a;
      input clk;
      output[3:0] b,c;
    reg[3:0] b,c;
    always @(posedge clk)
        begin
          b=a;
          c=b;
                $display("blocking:a=%d,b=%d,c=%d.",a,b,c);
        end
    endmodule

    非阻塞模块:

    module non_blocking(clk,a,b,c);
      input[3:0] a;
      input clk;
      output[3:0] b,c;
    reg[3:0] b,c;
    always @(posedge clk)
        begin
          b<=a;
          c<=b;
          $display("non_blocking:a=%d,b=%d,c=%d.",a,b,c);
        end
    endmodule

    顶层测试模块:

    `timescale 1ns/100ps
    `include"blocking.v"
    `include"non_blocking.v"
    
    module top_blocking;
    wire[3:0] b1,c1,b2,c2;
    reg[3:0] a;
    reg clk;
    
    
    initial 
      begin
        clk=0;
        forever #50 clk=~clk;
      end
      
    initial
    begin
      a=4'h3;
      $display("________________");
      #100 a=4'd7;
      $display("________________");
      #100 a=4'd15;
        $display("________________");
      #100 a=4'd10;
        $display("________________");
      #100 a=4'd2;
        $display("________________");
      #100 $display("________________");
      $stop;
    end
    non_blocking non_bloking1(clk,a,b2,c2);
    blocking blocking1(clk,a,b1,c1);
    endmodule

    运行仿真后结果:

    # ________________
    # blocking:a= 3,b= 3,c= 3.
    # non_blocking:a= 3,b= x,c= x.
    # ________________
    # blocking:a= 7,b= 7,c= 7.
    # non_blocking:a= 7,b= 3,c= x.
    # ________________
    # blocking:a=15,b=15,c=15.
    # non_blocking:a=15,b= 7,c= 3.
    # ________________
    # blocking:a=10,b=10,c=10.
    # non_blocking:a=10,b=15,c= 7.
    # ________________
    # blocking:a= 2,b= 2,c= 2.
    # non_blocking:a= 2,b=10,c=15.
    # ________________

    可以得出结论:

     1,阻塞情况下,display显示的值c=b=a。这说明阻塞赋值是实时更新的。当赋值语句完成后,下一个语句开始,赋值语句的左值就已经发生了变化。

     2,非阻塞情况下,display显示的值,b为上一个周期a的值,c为上一个周期b的值。这说明赋值操作是在display语句之后完成的。

  • 相关阅读:
    delphi 调用百度地图api
    Delphi XE5 for android 图片缩放和拖动处理
    利用FMX控件的MakeScreenshot过程实现WAIT效果
    老外写的在桌面添加快捷方式(DELPHI XE5 ANDROID)
    第01组 Alpha冲刺(5/6)
    2019 SDN上机第4次作业
    2019 SDN阅读作业
    第01组 Alpha冲刺(4/6)
    第01组 Alpha冲刺(3/6)
    第01组 Alpha冲刺(2/6)
  • 原文地址:https://www.cnblogs.com/WeyneChen/p/3613269.html
Copyright © 2011-2022 走看看