精华内容
下载资源
问答
  • 这几个概念是不一样的 顺序块:顺序块中... 所以顺序和并行的区别是,里面每条语句执行的仿真时间,而非具体的阻塞,非阻塞语句。 阻塞赋值:在一下条语句执行前,这条赋值语句必须已经完成。 非阻塞赋值:当非...

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

    下面是我写的例子,使用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。

    转载于:https://www.cnblogs.com/rednodel/p/4053744.html

    展开全文
  • 这篇博客,通过举例说明:非阻塞赋值阻塞赋值的区别? 一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑; 非阻塞赋值语句并行执行的,等到一个时钟完成后才完成赋值,而阻塞赋值是顺序执行的,下一条赋值...

    这篇博客,通过举例说明:非阻塞赋值和阻塞赋值的区别?

    一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑;

    非阻塞赋值语句是并行执行的,等到一个时钟完成后才完成赋值,而阻塞赋值是顺序执行的,下一条赋值语句要等到上一条赋值语句完成后才能赋值,并且阻塞赋值是立即完成的;

    例如:

    always@(posedge clk) begin

    b <= a;

    c <= b;

    end

    可见,在时序逻辑中使用非阻塞赋值会生成触发器。(有几条赋值语句就会生成几个触发器)

    如果使用阻塞赋值呢?

    如:

    always@(posedge clk) begin

    b = a;

    c = b;

    end

    可以看到区别,第一条语句生成了一个触发器,第二条语句会综合成一个连线,这就是阻塞赋值与非阻塞赋值的区别。

    为了更有说服力,再举一个例子:

    always@(posedge clk) begin

    c = a&b;

    d = c;

    end

    可见,第二条赋值同样综合出来是一条连线。

    作为对比,再用非阻塞赋值来看:

    always@(posedge clk) begin

    c <= a&b;

    d <= c;

    end

     

    可见,非阻塞赋值综合出来的电路是触发器;

    在秋招面试以及笔试中,会经常被问道,如果在组合逻辑使用非阻塞赋值会怎么样?

    我们刚刚实验了在时序逻辑中使用阻塞赋值会怎么样?也该看看在组合逻辑中使用非阻塞赋值是什么情况了?

    如:

    always@(*) begin

    b <= a;

    c <= b;

    end

    假如用阻塞赋值:

    可见,和使用阻塞赋值没什么区别。

    同样,为了更有说服力,再举一个例子:在赋值的同时做了运算。

    always@(*)begin

    c <=  a & b;

    d <= c;

    end

    有了上面的讨论,也应该能猜到综合出来的电路和阻塞赋值没什么区别。

    我们可以这么说,在时序逻辑中,使用阻塞赋值,会出现意料之外的结果;

    在组合逻辑中,使用非阻塞赋值,则和使用阻塞赋值没什么区别。

    最后,为了让代码规范无误,我们一定要遵循规则,在时序逻辑中使用非阻塞赋值,在组合逻辑中使用阻塞赋值。

    相关链接:

    【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式

    【 Verilog HDL 】进一步了解 Verilog HDL 的赋值运算符

     

     

    展开全文
  • 本文摘抄夏老师书———————— 在verilog模块中所有过程(eg:initial块、always块)...在同一个模块中各个过程块、各条连续赋值语句和各条实例引用语句这三者出现先后顺序没有关系 只有连续赋值...

     

    本文摘抄夏老师的书————————

    1. 在verilog模块中所有过程(eg:initial块、always块)、连续赋值语句、实例引用都是并行的。

    2. 它们表示的是一种通过变量名的相互连接的关系。(这点很重要,verilog最终对应的是实实在在的物理电路)

    3. 在同一个模块中各个过程块、各条连续赋值语句和各条实例引用语句这三者出现的先后顺序没有关系

    4. 只有连续赋值语句(即用关键词assin引出的语句)和实例引用语句(即用已定义的模块名引出的语句),可以独立于过程块存在而在模块的功能定义部分。

    5. 被实例引用的模块,其端口可以通过不同的连线或寄存器类型变量连接到别的模块相应的输出输入信号端

    6. 在always模块内被赋值的的每一个信号都必须被定义为reg 类型

    转载于:https://www.cnblogs.com/farbeyond/p/5204536.html

    展开全文
  • 我们早在学习Verilog语言时就学过:相对于begin-end顺序执行的语句块,还存在fork-join并行执行的语句块。这些知识用起来已经很顺手了,但是当学习到SystemVerilog语言时候,突然告诉你:其实fork-join还有两个...

    我们早在学习Verilog语言时就学过:相对于begin-end顺序执行的语句块,还存在fork-join并行执行的语句块。这些知识用起来已经很顺手了,但是当学习到SystemVerilog语言的时候,突然告诉你:其实fork-join还有两个失散多年的亲兄弟活着!那就是fork-join_any和fork-join_none!!!
    在这里插入图片描述

    这三个兄弟虽然长的比较像,但是其实性格是不一样的!他们的主要性格区别是他们对待称为“线程”的小朋友的态度上。“线程”小朋友是轻量级的“进程”,是程序调度的基本单位。假如某一时段同时来了好几个线程小朋友去他们家吃饭,三兄弟性格可以表现的非常明显。其中fork-join的性格是最温和耐心的,他会静静等待所有线程小朋友全部吃完饭才去做别的事情。而fork-join_any性格是最健忘和丢三落四的,当他看到其中某个线程小朋友吃完后会直接忘了别的小朋友还在吃,以为都完成了,直接去做自己的事情。至于fork-join_none则是脾气最暴躁的,他不会等待任何一个线程小朋友吃饭,会直接去搞自己的事情!

    那fork-join_any、fork-join_none一个健忘症一个暴脾气,他们是猴子请来搞笑的吗?除了增加我们的概念记忆还有什么作用?

    李白说“天生我材必有用”,Jerry今天就简单的说说这两个兄弟的作用吧~

    考虑遇到这样一种情况:当某些线程小朋友是无限循环的,永远吃不完,而下面我们就想结束所有的程序,那一直等下去有时就会出问题。 这时对于fork-join_any这个健忘症,就可以有用武之地了。我们常常设立一个吃的最快的线程小朋友作为“组长”,而fork-join_any通过等待“组长”来控制这段程序运行结束。

    实际中的一个常见经典用法如下,(初学者不需要了解代码中每行的含义,只需要对fork-join_any的应用有一个直观认识即可)想在记分板中控制验证平台的结束时,通过配置num参数来控制想收到的实际数据包数量,运行完for循环就会执行drop_objection,结束平台运行。这里面的for循环就是我们前面提到的“组长”,如果没有fork-join_any,单纯的使用fork-join便会一直停不下来,是不能实现这个功能的了。
    在这里插入图片描述

    对于fork-join_none这个暴脾气,其实也是很有用处的。比如有这样一个需求:把某个相同的线程并行启动运行100个。这个需求用fork-join可以实现,但是你要在其中罗列100次这个线程:
    在这里插入图片描述

    这样写显然不合理,太麻烦了,如果更大的数那就是不可能完成的任务了。这时候fork-join_none就显示出了很好的作用,如下,配合for循环几行就可以达到启动的100个的目的。
    在这里插入图片描述

    值得一提的是,这两段代码作用其实是不等价的,通过fork-join_none运行的100个线程,是并行启动了,但是不等他们全部结束程序就会进行到后面的程序中去,如果想要等价可以在后面使用wait fork语句来等待所有线程结束,如下代码就与fork-join控制的完全等价了。
    在这里插入图片描述

    通过Jerry今天的白话乱侃,相信天才的你对fork三兄弟会有更清楚的一个认识了,初学者们至少把这个易混淆的概念轻松记住了吧。当然,其实在SystemVerilog中还提供比如disable关键词、suspend()方法、resume()方法等手段结合fork三兄弟对线程进行更加丰富的控制,各位可以日后慢慢探索哈~

    今天就侃到这里,大家有什么建议或问题都可以直接反馈同名公众号哈Jerry和大家一起成长

    展开全文
  • 3.4赋值语句和块语句 3.4.1赋值语句 3.4.2 块语句 3.4.2.1 顺序块 3.4.2.2.并行块 3.4.2.3.块名 3.4.2.4.起始时间和结束时间 3.5.条件语句 3.5.1.if_else语句 3.5.2.case语句 3.5.3.由于使用条件语句不当...
  • 5.5.1 ODB与RDB概念设计的区别 99 5.5.2 EER模式到ODB模式的映射 100 小结 101 复习题 102 练习题 102 参考文献 102 第6章 对象-关系扩展-关系系统 104 6.1 SQL及其对象-关系特性概述 104 ...
  • 8.4.3 未指定WHERE子句查询语句和星号(*)用法 170 8.4.4 SQL中作为集合表 170 8.4.5 子串样式匹配和算术操作符 172 8.4.6 查询结果排序 173 8.5 更复杂SQL查询 173 8.5.1 包含NULL...
  • systemverilog语法(七)

    千次阅读 2017-02-12 10:15:47
    十七、线程 线程的量级比进程小,其代码存储区可共享,而且所...2) fork•••join、fork•••join_none、fork••••join_any的区别 注意:1)fork•••join_none块后的那个语句执行早于fork_none内的任何语
  • 第01节、线程与进程的区别 第02节、为什么要用到多线程 第03节、多线程应用场景 第04节、使用继承方式创建线程 第05节、使用Runnable接口方式创建线程 第06节、使用匿名内部类方式创建线程 第07节、多线程常用api 第...
  • 3.13 break语句和continue语句 3.14 编写循环结构程序 习题 第4章 函数与预处理 4.1 概述 4.2 定义函数一般形式 4.2.1 定义无参函数一般形式 4.2.2 定义有参函数一般形式 4.3 函数参数和函数值 4.3.1 ...
  • 2.== equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? 4.final 在 java 中有什么作用? 5.java 中的 Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7....
  • 作者通过总结各自多年软件开发教学培训经验,与大家分享了掌握Oracle SQL所独有丰富功能技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面技巧:...
  • 作者通过总结各自多年软件开发教学培训经验,与大家分享了掌握Oracle SQL所独有丰富功能技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面技巧:...
  • 4.3.2 errorexception的区别,CheckedException,RuntimeException的区别。 4.3.3 请列出5个运行时异常。 4.3.4 在自己的代码中,如果创建一个java.lang.String类,这个类是否可以被类加载器加载?为什么。 ...
  • 汇编语言程序设计 第二版

    热门讨论 2012-08-12 14:23:02
    9.1.5 宏与子程序的区别 9.2 宏参数的特殊运算符 9.2.1 连接运算符 9.2.2 字符串整体传递运算符 9.2.3 字符转义运算符 9.2.4 计算表达式运算符 9.3 与宏有关的伪指令 9.4 重复汇编伪指令 9.4.1 伪指令REPT 9.4.2 伪...
  • 并发与并行的区别 33 什么是CSP 37 如何帮助你 40 Go语言的并发哲学 43 第3章 Go语言并发组件 47 goroutine 47 sync包 58 WaitGroup 58 互斥锁读写锁 60 cond 64 once 69 池 71 channel 76 select 语句 92 ...
  • 持续部署之间的区别</a></p> 近期在抽空把团队工程化这块做好,CI/CD只是其中的九牛一毛。在运维文开同学协助配合下,以公司某项目前端工程做试验,实现了 CI 的过程,本质上CD也是支持了的...
  •  本书是一本关于oracle database 9i、10g 11g 数据库体系结构权威图书,涵盖了所有重要oracle 体系结构特性,包括文件、内存结构进程,锁闩,事务、并发多版本,表索引,数据类型,分区和并行,以及...
  • [Oracle.11g权威指南(第2版)].谷长勇.扫描版.pdf

    千次下载 热门讨论 2013-06-23 21:16:09
    8.2.1 SQL语句、PL/SQL块与SQL*Plus命令的区别 199 8.2.2 编辑命令 200 8.2.3 保存命令 202 8.2.4 加入注释 203 8.2.5 运行命令 205 8.2.6 编写交互命令 206 8.2.7 使用绑定变量 213 8.2.8 跟踪语句 216 8.3 使用SQL...
  • 本书是一本关于Oracle 9i & 10g数据库体系结构权威图书,涵盖了所有最重要Oracle体系结构特性,包括文件、内存结构进程,锁闩,事务、并发多版本,表索引,数据类型,以及分区和并行,并利用具体例子...
  • (1)程序进程的区别 (2)进程的五个基本特征:动态性、并发性、独立性、制约性、结构性 3、进程调度 (1)进程的三个基本状态及转换 三个基本状态是等待、执行就绪,在一定的条件下,进程...
  • java面试题

    2018-01-01 15:35:15
    并说出SessionBeanEntityBean的区别,StatefulBeanStatelessBean的区别。 9 6. Collection Collections的区别。 9 7. &&&的区别。 9 8. HashMapHashtable的区别。 10 9. final, finally, finalize的区别...
  •  当我们分析一条SQL语句的性能时,最先做的事情大概就是分析它的执行计划了。  所以,如果连执行计划都看不懂,那SQL调优根本无从谈起。在这一章,我们将讨论CBO(基于成本的优化器)执行计划相关的内容。  第6...
  • 07 Python条件语句和基本数据类型 08 Python while循环语句以及练习题 09 练习题讲解 第10章 01 上节内容回顾以及补充 02 上周作业实现 03 Pycharm安装和使用 04 Python 运算符 05 Python 运算符以及总结 06 ...
  • 2.并行操作时使用线程,如C/S架构服务器端并发线程响应用户请求。 3.多CPU系统中,使用线程提高CPU利用率 4.改善程序结构。一个既长又复杂进程可以考虑分为多个线程,成为几个独立或半独 立运行部分,...
  • 1.2 visual basic关键字语法 7 1.2.1 控制台应用程序 10 1.2.2 从项目模板上创建项目 11 1.2.3 solution explorer窗口 13 1.2.4 项目属性 14 1.2.5 assembly information屏幕 15 1.2.6 编译...
  • 14.3.1 以tab键切换控件的顺序 554 14.3.2 所有控件属性 555 14.3.3 动态调整控件大小布局 555 14.3.4 flowlayoutpanel控件 557 14.3.5 tablelayoutpanel控件 558 14.3.6 panelgroupbox容器控件 ...
  • 还可进行数据压缩存储和并行运算。 5. 位域在本质上也是结构类型,不过它成员按二进制位分配内存。其定义、说明及使用方式都与结构相同。 6. 位域提供了一种手段,使得可在高级语言中实现数据压缩,节省了...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

并行语句和顺序语句的区别