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

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

3天内不再提示

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

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-07-07 14:15 次阅读

关于阻塞赋值和非阻塞赋值的问题,明德扬的学员提得比较多,今天小黑老师专门给大家普及一下阻塞赋值和非阻塞赋值的相关知识。

一、概述

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

阻塞赋值符号“=”。

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

非阻塞赋值符号“<=”。

二、赋值方式

1、阻塞赋值

阻塞赋值操作符用等号(即 = )表示。阻塞赋值时先计算等号右手方向(RHS)部分的值,这时赋值语句不允许任何别的语句的干扰,直到现行的赋值完成时刻,即把RHS赋值给 LHS的时刻,它才允许别的赋值语句的执行。一般可综合的阻塞赋值操作在RHS不能设定有延迟,(即使是零延迟也不允许)。若在RHS 加上延迟,则在延迟期间会阻止赋值语句的执行, 延迟后才执行赋值,这种赋值语句是不可综合的,在需要综合的模块设计中不可使用这种风格的代码。

阻塞赋值的执行可以认为是只有一个步骤的操作:

所谓阻塞的概念是指在同一个always块中,其后面的赋值语句从概念上(即使不设定延迟)是在前一句赋值语句结束后再开始赋值的。

如果在一个过程块中阻塞赋值的RHS变量正好是另一个过程块中阻塞赋值的LHS变量,这两个过程块又用同一个时钟沿触发,这时阻塞赋值操作会出现问题,即如果阻塞赋值的次序安排不好,就会出现竞争。若这两个阻塞赋值操作用同一个时钟沿触发,则执行的次序是无法确定的。

2、非阻塞赋值

非阻塞赋值操作符用小于等于号 (即 <= )表示。在赋值操作时刻开始时计算非阻塞赋值符的RHS表达式,赋值操作时刻结束时更新LHS。在计算非阻塞赋值的RHS表达式和更新LHS期间,其他的Verilog语句,包括其他的Verilog非阻塞赋值语句都能同时计算RHS表达式和更新LHS。非阻塞赋值允许其他的Verilog语句同时进行操作。

非阻塞赋值的操作可以看作为两个步骤的过程:

1)在赋值时刻开始时,计算非阻塞赋值RHS表达式。

2)在赋值时刻结束时,更新非阻塞赋值LHS表达式。

非阻塞赋值操作只能用于对寄存器类型变量进行赋值,因此只能用在“initial”块和“always”块等过程块中。非阻塞赋值不允许用于连续赋值。

三、举例

1、阻塞赋值

1672127081461505.jpg

2、非阻塞赋值

1672127091918810.jpg

四、总结

综上所述,明德扬至简设计法提出这样的规则:

时序逻辑用非阻塞赋值

组合逻辑用阻塞赋值。

审核编辑:汤梓红

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

    关注

    0

    文章

    596

    浏览量

    28112
  • 阻塞赋值
    +关注

    关注

    0

    文章

    9

    浏览量

    9130
  • 非阻塞赋值
    +关注

    关注

    0

    文章

    10

    浏览量

    9899
收藏 人收藏

    评论

    相关推荐

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

    来源:《Verilog数字系统设计(夏宇闻)》 阻塞和非阻塞赋值的语言结构是Verilog 语言中最难理解概念之一。甚至有些很有经验的Verilog 设计工程师也不能完全正确地理解:何时使用非
    的头像 发表于 08-17 16:18 6047次阅读

    fpga基础篇():阻塞阻塞赋值

    ,常用阻塞赋值,时序电路常用阻塞赋值。先看个大家都熟悉的例子:先看
    发表于 04-05 09:53

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

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

    【工程源码】 阻塞赋值阻塞赋值原理分析

    赋值语句会阻断其后语句的正常执行,也就是说后面的语句必须等到当前的赋值语句执行完毕才能执行。而且阻塞赋值可以看成是步完成的,即:计算等号
    发表于 02-24 20:09

    【技巧分享】FPGA至简设计-阻塞赋值阻塞赋值

    阻塞阻塞作者:小黑同学、 概述1、阻塞赋值对应的电路往往与触发沿没有关系,只与电平的变化有
    发表于 04-24 14:49

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

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

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

    对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值和非阻塞赋值。对于初学者,往往非常迷惑这两种
    的头像 发表于 01-30 17:41 2.1w次阅读

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

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

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

    阻塞赋值对应的电路往往与触发沿没有关系,只与输入电平的变化有关系。非阻塞赋值对应的电路结构往往与触发沿有关系,只有在触发沿时才有可能发生赋值
    的头像 发表于 06-17 11:57 1.1w次阅读
    IEEE Verilog<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 943次阅读

    基于阻塞赋值和非阻塞赋值的多级触发器级联实例

    下面给出一个基于阻塞赋值和非阻塞赋值的多级触发器级联实例,要求将输入数据延迟 3 个时钟周期再输出,并给出对应的 RTL 级结构图和仿真结果。 (1)基于 D触发器的
    的头像 发表于 05-08 14:47 1870次阅读
    基于<b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>和非<b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>的多级触发器级联实例

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

    阻塞赋值和非阻塞赋值的可综合性 Blocking Assignment阻塞赋值和NonBlock
    的头像 发表于 05-12 09:45 2441次阅读
    简述<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 5240次阅读

    Verilog中阻塞和非阻塞赋值金规

    对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值和非阻塞赋值。对于初学者,往往非常迷惑这两种
    的头像 发表于 06-01 09:21 573次阅读

    阻塞赋值与非阻塞赋值

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