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

    文章

    613

    浏览量

    28302
  • 阻塞赋值
    +关注

    关注

    0

    文章

    9

    浏览量

    9153
  • 非阻塞赋值
    +关注

    关注

    0

    文章

    10

    浏览量

    9995
收藏 人收藏

    评论

    相关推荐

    FPGA基础篇():阻塞阻塞赋值,不只是比原始信号差个时钟周期的问题!(深入剖析)

    阻塞阻塞赋值 首先从名字上理解,阻塞赋值赋值
    的头像 发表于 09-19 18:32 1.3w次阅读

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

    来源:《Verilog数字系统设计(夏宇闻)》 阻塞阻塞赋值的语言结构是Verilog 语言中最难理解概念之。甚至有些很有经验的Ver
    的头像 发表于 08-17 16:18 6317次阅读

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

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

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

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

    FPGA学习系列:5.阻塞赋值阻塞赋值

    设计背景: 阻塞 (=)和阻塞(=)直是在我们FPGA中讨论的问题,资深的学者都是讨论的是赋值应该发生在上升下降沿还是在哪里,我们在仿真
    的头像 发表于 05-31 11:40 6736次阅读
    FPGA学习系列:5.<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语言中,经常在always模块中,面临两种赋值方式:阻塞赋值阻塞赋值
    的头像 发表于 01-30 17:41 2.2w次阅读

    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><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><b class='flag-5'>赋值</b>的区别

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

    不清楚,Bug就会找到我们,下面扫清阻塞赋值阻塞赋值
    发表于 11-19 15:48 1107次阅读

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

    ,所以基于的C的术语和概念出现在EDA中,原本是个“误打误撞”,但历史造成的现实则是:必须理解和正确掌握它们的用法。 软件中阻塞进程,是指调用返回之前,应用进程直等待: 为了保证应用进程的效率,不至于被子程序的运算过程“挂起
    的头像 发表于 05-12 09:45 2672次阅读
    简述<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的赋值语句分为阻塞赋值阻塞赋值两种。
    的头像 发表于 03-15 13:53 2945次阅读

    verilog中阻塞赋值阻塞赋值的区别

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

    Verilog中阻塞阻塞赋值金规

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

    阻塞赋值阻塞赋值

    ”=“阻塞赋值与”
    的头像 发表于 09-12 09:06 959次阅读
    <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是种硬件描述语言,用于设计和模拟数字电路。在Verilog中,同步和异步是用来描述数据传输和信号处理的两种不同方式,而阻塞赋值
    的头像 发表于 02-22 15:33 1408次阅读