0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

IEEE Verilog阻塞赋值和非阻塞赋值的区别

姚小熊27 来源:电路城论坛 作者:tian2659 2020-06-17 11:57 次阅读

阻塞赋值对应的电路往往与触发沿没有关系,只与输入电平的变化有关系。

非阻塞赋值对应的电路结构往往与触发沿有关系,只有在触发沿时才有可能发生赋值的情况。

1、阻塞赋值操作符用等号(即 = )表示。“阻塞”是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行。而且阻塞赋值可以看成是一步完成的,即:计算等号右边的值并同时赋给左边变量。例如:

IEEE Verilog阻塞赋值和非阻塞赋值的区别

当执行“x=next_x;”时,x会立即的到next_x的值。而下一句“y=x;”必须等到“x=next_x;”执行完毕才能被执行。由于这两条语句都没有延迟(相当于导线),导致他们的等价语句为“y=next_x;”。

赋值是实时的,计算完右面的马上赋值给左边的,然后再执行下一句,操作时串行的,且在一个alway内完成。

2、非阻塞赋值操作符用小于等于号 (即 《= )表示。“非阻塞”是指在进程语句(initial和always)中,当前的赋值语句不会阻断其后的语句。非阻塞语句可以认为是分为两个步骤进行的:

①计算等号右边的表达式的值,(我的理解是:在进入进程后,所有的非阻塞语句的右端表达式同时计算,赋值动作只发生在顺序执行到当前非阻塞语句那一刻)。

②在本条赋值语句结束时,将等号右边的值赋给等号左边的变量。

例如:

当执行“x《=next_x;”时,并不会阻断语句“y《=x;”的执行。因此,语句“y《=x;”中的x的值与语句“x《=next_x;”中的x的值不同:语句“y《=x;”中的x是第一个D触发器的初值(Q0)。而语句“x《=next_x;”中的x的值是D触发器经过一个同步脉冲后的输出值(Q1)。基于此这个进程产生了与阻塞赋值进程截然不同的结果,即:产生了移位寄存器的效果。

简单理解就是,阻塞赋值是按需执行,非阻塞赋值是并行执行。

为了更好地理解上述要点,我们需要对Verilog 语言中的阻塞赋值和非阻塞赋值的功能和执行时间上的差别有深入的了解。为了解释问题方便下面定义两个缩写字:

RHS – 方程式右手方向的表达式或变量可分别缩写为:RHS表达式或RHS变量。LHS – 方程式左手方向的表达式或变量可分别缩写为:LHS表达式或LHS变量。

IEEE Verilog标准定义了有些语句有确定的执行时间,有些语句没有确定的执行时间。若有两条或两条以上语句准备在同一时刻执行,但由于语句的排列次序不同(而这种排列次序的不同是IEEE Verilog标准所允许的), 却产生了不同的输出结果。这就是造成Verilog模块冒险和竞争现象的原因。为了避免产生竞争,理解阻塞和非阻塞赋值在执行时间上的差别是至关重要的。

IEEE Verilog阻塞赋值和非阻塞赋值的区别

IEEE Verilog阻塞赋值和非阻塞赋值的区别

IEEE Verilog阻塞赋值和非阻塞赋值的区别

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1351

    浏览量

    110077
  • 阻塞赋值
    +关注

    关注

    0

    文章

    9

    浏览量

    9157
  • 非阻塞赋值
    +关注

    关注

    0

    文章

    10

    浏览量

    9999
收藏 人收藏

    评论

    相关推荐

    Verilog语言中阻塞阻塞赋值的不同

    赋值何时使用阻塞赋值才能设计出符合要求的电路。 他们也不完全明白在电路结构的设计中,即可综合风格的Verilog模块的设计中,究竟为什么还要用
    的头像 发表于 08-17 16:18 6378次阅读

    Verilog阻塞赋值阻塞赋值的正确使用

    [table][tr][td] Verilog中有两种为变量赋值的方法。一种叫做连续赋值,另一种叫做过程赋值。过程赋值又分为
    发表于 07-03 03:06

    Verilog阻塞赋值阻塞赋值区别是什么

    Verilog阻塞赋值阻塞赋值区别
    发表于 12-30 06:22

    阻塞阻塞赋值区别是什么?

    本文通过Verilog事件处理机制,详细讨论了阻塞阻塞赋值区别、联系及其应用示例。
    发表于 05-10 06:59

    verilog阻塞赋值阻塞赋值

    阻塞阻塞语句作为verilog HDL语言的最大难点之一,一直困扰着FPGA设计者,即使是一个颇富经验的设计工程师,也很容易在这个点上犯下一些不必要的错误。
    发表于 03-15 10:57 7000次阅读

    阻塞赋值阻塞赋值的用法一篇文章就够了

    对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值阻塞赋值
    的头像 发表于 01-30 17:41 2.2w次阅读

    verilog阻塞赋值阻塞赋值到底有什么区别

    1、阻塞赋值操作符用等号(即 = )表示。“阻塞”是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的
    发表于 04-25 08:00 0次下载
    <b class='flag-5'>verilog</b>中<b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>到底有什么<b class='flag-5'>区别</b>

    VerilogHDL语言:清阻塞赋值阻塞赋值

    对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值阻塞赋值
    发表于 11-19 15:48 1150次阅读

    简述阻塞赋值阻塞赋值的可综合性

    阻塞赋值阻塞赋值的可综合性 Blocking Assignment阻塞
    的头像 发表于 05-12 09:45 2722次阅读
    简述<b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>的可综合性

    简述Verilog HDL中阻塞语句和阻塞语句的区别

      在Verilog中有两种类型的赋值语句:阻塞赋值语句(“=”)和阻塞
    的头像 发表于 12-02 18:24 6198次阅读
    简述<b class='flag-5'>Verilog</b> HDL中<b class='flag-5'>阻塞</b>语句和<b class='flag-5'>非</b><b class='flag-5'>阻塞</b>语句的<b class='flag-5'>区别</b>

    verilog阻塞赋值阻塞赋值区别

    阻塞赋值操作符用等号(即 = )表示。“阻塞”是指在进程语句(initial和always)中,当前的赋值语句阻断了其后的语句,也就是说后面的语句必须等到当前的
    发表于 12-19 16:49 7414次阅读

    Verilog阻塞阻塞赋值金规

    对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值阻塞赋值
    的头像 发表于 06-01 09:21 1278次阅读

    一文了解阻塞赋值阻塞赋值

    今天给大家普及一下阻塞赋值阻塞赋值的相关知识
    的头像 发表于 07-07 14:15 2179次阅读
    一文了解<b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>与<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>

    阻塞赋值阻塞赋值

    ”=“阻塞赋值与”
    的头像 发表于 09-12 09:06 1034次阅读
    <b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>与<b class='flag-5'>非</b><b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>

    verilog同步和异步的区别 verilog阻塞赋值阻塞赋值区别

    Verilog中同步和异步的区别,以及阻塞赋值阻塞赋值
    的头像 发表于 02-22 15:33 1688次阅读