微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog中阻塞赋值和非阻塞赋值 求助

Verilog中阻塞赋值和非阻塞赋值 求助

时间:10-02 整理:3721RD 点击:
本人再看夏宇闻的《Verilog数字系统设计教程(第2版)》,其中讲到阻塞:在同一个always过程中,后面的赋值语句要等待前一个赋值语句执行完,后面的语句被该赋值语句阻塞
非阻塞:在同一个always过程中,非阻塞赋值语句是同时进行的,排在后面的语句不会被该赋值语句阻塞
<=:
             块结束后才能完成赋值
             块内所有<=语句在always块结束时刻同时赋值
             <=右边各变量的值是上一次时钟边沿时,这些变量当时的值
             用于描述可综合的时序电路
=:
             =语句结束之后过程always才可能结束
但是又讲到在always过程中,begin end块内按先后顺序立即赋值,在fork join内同时赋值(可能造成冲突)
一个是同时进行 一个是按先后顺序 到底该怎样理解呢  而且fork语句中用阻塞赋值是同时进行还是前面的语句执行完后面的才能执行呢?

AAAAAAAAAAAAAAAAAAAA

如果有多个非阻塞赋值出现在begin end语句中,那么前面语句的执行并不会阻塞后面语句的执行

这个不对应电路理解起来比较难

非阻塞对应组合逻辑;
阻塞对应时序逻辑;



    哥,你写反了吧

还是喜欢VHDL对应的表述,变量variable和信号signal~



   书中是这样说的:关键字being-end用于将多条语句组成顺序块,顺序块具有以下特点:
(1)顺序中的语句是一条接一条按顺序执行的,只有前面的的语句执行完成之后才能执行后面的语句(除了带有内嵌延迟控制的非阻塞赋值语句)。
(2)如果语句包括延迟或者事件控制,那么延迟总是相对于前面那条语句执行完成的仿真事件的。

阻塞与非阻塞的区别,的确就是按照书上写的意思。但是具体的理解一定要对应到代码,同样一段代码,不同类型的赋值有可能产生不同的电路。理解电路产生区别的原因,就能理解阻塞与非阻塞的区别。所以,看例子去吧



    呵呵,不好意思,写反了!

非阻塞赋值可以理解为一个导线将两个变量连起来,比如b=a,只要b的值与a的值完全相同,无时序先后,a变化b立刻随之变化;阻塞赋值往往是在always等语句块中进行的,b<=a,是指b的值在时钟采样时刻之后与时钟采样时刻之前的a的值相等,当然考虑到时序问题会有建立时间、保持时间等需要考虑,这点小编可以详细了解一下D触发器的工作原理,可能有助于理解阻塞赋值。

还得结合例子来看吧

在我遇到的实际时序电路代码中,在always过程中,一般都会用“<=”。基本不会用到“=”。而在assign语句中才会用到“=”。

see。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top