• verilog中阻塞复制,非阻塞复制,顺序块,并行块之间的关系


    这几个概念是不一样的
    顺序块:顺序块中的语句是按顺序执行的,每条语句中的延迟值是与其前一条语句执行的仿真时间有关。
    并行块:并行块语句是并行执行的,它里面的每条语句中指定的延迟值都是相对于语句块开始执行的时候。
    所以顺序块和并行块的区别是,里面每条语句执行的仿真时间,而非具体的阻塞,非阻塞语句。
    阻塞赋值:在一下条语句执行前,这条赋值语句必须已经完成。
    非阻塞赋值:当非阻塞性过程赋值语句执行时,计算右侧的表达式,然后在预定时刻将右侧的值赋给的目标。最快的输出也要在当前时刻结束前的最后时刻。它计算出右侧的值后,并不阻塞,后面的语句正常运行,而真正的赋值发生在当前或者延迟结束的时刻。 不阻塞后面语句执行,在当前或者延迟结束时刻赋值是它的特点。而后面语句内部延迟,它只是说明赋值延迟时刻而已,而不关注赋值的时机。它们是不同的概念。

    下面是我写的例子,使用Synplify_pro综合:

    module test(
               d1,
               clk,
               q1,
               q2
               );
        input d1,clk;     
        output q1;
        output q2;
        reg q1,q2;
       
        always @  (posedge clk)
           begin
            q1 = d1;
            q2 = q1;
           end
    endmodule
    综合后只有一个DFF。


    module test(
               d1,
               clk,
               q1,
               q2
               );
        input d1,clk;     
        output q1;
        output q2;
        reg q1,q2;
       
        always @  (posedge clk)
           fork
            q1 = d1;
            q2 = q1;
           join
    endmodule

    综合后有两个DFF。

    module test(
               d1,
               clk,
               q1,
               q2
               );
        input d1,clk;     
        output q1;
        output q2;
        reg q1,q2;
       
        always @  (posedge clk)
           begin
            q1 <= d1;
            q2 <= q1;
           end
    endmodule
    综合后有两个DFF。

    module test(
               d1,
               clk,
               q1,
               q2
               );
        input d1,clk;     
        output q1;
        output q2;
        reg q1,q2;
       
        always @  (posedge clk)
           fork
            q1 <= d1;
            q2 <= q1;
           join
    endmodule

    综合后有两个DFF。

  • 相关阅读:
    redis 专题 (一)总纲和命令
    CentOS 7安装 .net core 环境
    IdentityServer4 学习笔记(一)客户端模式
    IdentityServer4 学习笔记(开篇)
    ASP.NET Core 自定义视图路径及主题切换
    ASP.NET 国密加密 SM2-SM4
    ASP.NET Framework 如何利用nuget打包,并发布到nuget平台
    ASP.NET Core 在windows服务器安装dotnet-hosting-2.2.6-win 时出现应用程序池停止问题的解决方案
    三分钟学会Redis在.NET Core中做缓存中间件
    ASP.NET CORE 2.2 因外键设置的双向导航对象序列化报 循环错误问题的解决
  • 原文地址:https://www.cnblogs.com/rednodel/p/4053744.html
Copyright © 2020-2023  润新知