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

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

3天内不再提示

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

电子工程师 来源:FPGA设计论坛 作者:FPGA设计论坛 2021-05-12 09:45 2851次阅读

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

Blocking Assignment阻塞赋值和NonBlocking Assignment非阻塞赋值,原本是软件进程管理的术语。由于Verilog团队是从C语言发展,所以基于的C的术语和概念出现在EDA中,原本是一个“误打误撞”,但历史造成的现实则是:必须理解和正确掌握它们的用法。

软件中阻塞进程,是指调用返回之前,应用进程一直等待:

395df0f8-b2a3-11eb-bf61-12bb97331649.png

为了保证应用进程的效率,不至于被子程序的运算过程“挂起”。非阻塞进程得到应用:

3968d040-b2a3-11eb-bf61-12bb97331649.png

在非阻塞赋值进程中,无论子程序是否返回,不影响应用进程的正常运行。C语言的阻塞和非阻塞概念被Verilog团队引用,Verilog的阻塞赋值:

39747fe4-b2a3-11eb-bf61-12bb97331649.png

Verilog的非阻塞赋值:

3984bb34-b2a3-11eb-bf61-12bb97331649.png

关于阻塞和非阻塞争议中,有一个辩论双方都引用的电路模型:反馈震荡器:

398e8ede-b2a3-11eb-bf61-12bb97331649.png

其中,复位信号rst_n初始化RA(a)为0, RB(b)为1。观察其物理连接,在时钟沿作用下,两个寄存器将互相交换数据。(同时交换)

为以上电路模型进行验证,在循环行为体并分别使用阻塞赋值和非阻塞赋值。并验证其前仿和后仿,观察对比真实性。

应该得到的结论:

使用阻塞赋值:前仿不真实(没有发生两个寄存器的交换),后仿真实(发生交换)

使用非阻塞赋值:前仿真实(交换),后仿真实(交换)

基于以上结论:

“倒阻派”认为,没有使用阻塞赋值的必要,必须在行为语句赋值中全部使用非阻塞。

“挺阻派”认为,基于电平敏感赋值用阻塞,沿敏感赋值用非阻塞,阻塞语句是必要的。

2000年以后,进入从“综合为王”进入“验证为王”的时代。同样的Verilog代码需要回到电脑中,用于非综合目的。验证代码中的赋值驱动与软件编写概念相同,带来非常大的便利。这就是“阻塞”赋值的反转。

编辑:jq

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

    关注

    0

    文章

    10

    浏览量

    10039
  • 阻塞
    +关注

    关注

    0

    文章

    24

    浏览量

    8187

原文标题:FPGA学习:阻塞赋值和非阻塞赋值的可综合性

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    “串口阻塞”你真的会用吗?

    很久才会发出来,一下子出来很多数据”。经过帮客户检查应用程序源码,发现应用程序在串口阻塞方面没有做正确的处理,修改后解决。阻塞打开串口open("/dev/tty
    的头像 发表于 02-13 11:42 440次阅读
    “串口<b class='flag-5'>阻塞</b>”你真的会用吗?

    数组名之间可以直接赋值

    数组之间的赋值能不能直接使用等于号?比如这样的代码。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的头像 发表于 11-26 11:23 360次阅读

    TPA3004功放,开机保护,声音阻塞,为什么?

    TPA3004功放,开机保护,声音阻塞。过一段时间,芯片发热后正常。询求问题解决方法
    发表于 11-08 08:30

    socket编程中的阻塞阻塞

    在网络编程中, socket 是一个非常重要的概念,它提供了一个抽象层,使得开发者可以不必关心底层的网络通信细节。 socket 编程中的阻塞阻塞模式是两种不同的操作方式,它们对程序的响应
    的头像 发表于 11-01 16:13 424次阅读

    Verilog HDL的基础知识

    本文继续介绍Verilog HDL基础知识,重点介绍赋值语句、阻塞阻塞、循环语句、同步与异步、函数与任务语法知识。
    的头像 发表于 10-24 15:00 800次阅读
    Verilog HDL的基础知识

    socket阻塞阻塞的区别是什么

    在计算机编程中,socket 是一种通信端点,用于在网络中进行数据传输。Socket 可以是阻塞的或阻塞的,这两种模式在处理数据传输时有不同的行为。 阻塞模式(Blocking Mo
    的头像 发表于 08-16 11:13 958次阅读

    求助,关于CyU3PUsbHostEpWaitForCompletion函数中的阻塞问题求解

    主线程)调用该函数时,CyU3PUsbHostEpWaitForCompletion 函数经常阻塞,虽然指定了超时值,但从未返回。 我想应该在主程序线程中调用该函数,以避免出现阻塞问题。 如何正确使用该功能而不造成
    发表于 07-23 07:57

    如何在espconn_gethostbyname上创建阻塞线程?

    在 espconn_gethostbyname 上创建阻塞线程
    发表于 07-10 07:45

    是否可以使用Aurix中的CCU6模块,以阻塞方式在检测到GPIO下降沿时触发中断?

    我想知道,是否可以使用 Aurix 中的 CCU6 模块,以阻塞方式在检测到 GPIO 下降沿时触发中断? TC397 的示例代码仅将其用于 PWM 生成和时钟定时,但我很好奇如何将其用于 GPIO 边沿检测。
    发表于 07-04 07:00

    FPGA学习笔记---基本语法

    :task...endtask 11、循环语句:for 12、赋值符号:=和<=(阻塞阻塞赋值) 硬件设计的精髓,力求用最简单的语
    发表于 06-23 14:58

    请问使用lwip创建socket,该如何做到阻塞的接收发送数据?

    请问使用lwip创建socket,该如何做到阻塞的接收发送数据?
    发表于 06-19 06:02

    如何让write行为具有阻塞特性?

    spp_vfs_write 与 PC 端 socket 沟通:esp32 write, PC read.若 PC 端不执行 read 行为,esp32 持续 spp_vfs_write ,数据会发送到 PC 端吗?还是在 esp32 设备端 ?谢谢。另如何让 write 行为具有阻塞特性?谢谢。
    发表于 06-11 07:23

    关于Verilog的一些基本语法

    ,当然除了这种方式还有 <=(阻塞赋值)这种方式;阻塞赋值 = (例如 a = b;):a的值在
    发表于 05-31 18:31

    简谈FPGA研发设计相关规范(很实用)

    ,trior,real,disable,forever,arrays,memories,repeat,task,while。 建立综合模型的原则 要保证Verilog HDL赋值语句的
    发表于 05-13 15:39

    简谈FPGA研发设计相关规范(很实用)

    要保证Verilog HDL赋值语句的综合性,在建模时应注意以下要点: (1)不使用initial。(2)不使用#10。(3)不使用循环次数不确定的循环语句,如forever、while等
    发表于 04-16 15:42