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

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

3天内不再提示

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

电子工程师 ? 来源:FPGA设计论坛 ? 作者:FPGA设计论坛 ? 2021-05-12 09:45 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

    文章

    11

    浏览量

    10072
  • 阻塞
    +关注

    关注

    0

    文章

    24

    浏览量

    8303

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    matlab appdesigner 表格组件赋值问题,求助

    如上图所示,我在用matlab2021Ra APP模块进行编程的时候,想在表格中调入自己编写的结构数组,我从网上AI了一个程序语句,看着没问题,但是就是给表格赋值不了,还请各位大神帮忙看一下这个是怎么回事,我是初学者,请各位帮忙看看
    发表于 07-12 11:45

    CH32V307串口发送阻塞的原因?如何解决?

    */ modbus_set_rx_mode(master); modbus发送,不知为何阻塞在rt_device_write,初始化 find open 正常
    发表于 06-11 08:05

    在testbench中如何使用阻塞赋值阻塞赋值

    本文详细阐述了在一个testbench中,应该如何使用阻塞赋值阻塞赋值。首先说结论,建议在testbench中,对时钟信号(包括分频时钟
    的头像 发表于 04-15 09:34 ?691次阅读
    在testbench中如何使用<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>

    如何综合性测试一款电源芯片?——以ASP3605芯片为例

    引言 在现代电子系统中,电源芯片是不可或缺的核心组件之一。其性能的优劣直接关系到整个电子设备的稳定性和可靠。因此,对电源芯片进行综合性的测试至关重要。本文以国科安芯生产的ASP3605芯片为例
    的头像 发表于 04-07 09:26 ?452次阅读

    在S32DS上使用JLINK调试S32K341,被阻塞了,怎么处理?

    我正在尝试使用 S32K341 在新板上刷写程序,但在 S32K3X4EVB 上运行并为 S32K341配置的相同代码出现错误。具体来说,当我使用 S32DS 的 J-Link 探针运行调试时,它在此地址被阻塞,并且不会将其闪存到内存中。有人遇到同样的问题或可以帮助我吗?
    发表于 04-03 08:13

    FreeRTOS进阶使用之流缓冲区:高效处理字节流的秘密武器

    开销 基于连续内存存储,相比队列(每个数据项独立存储)更节省RAM。 触发通知机制 当缓冲区数据量达到预设的触发阈值**时,自动唤醒等待的任务,避免轮询开销。 阻塞阻塞模式 阻塞
    发表于 03-24 11:37

    给uint32_t数组填充整型值,除使用循环赋值外有没有c库函数可以实现?

    给uint32_t数组填充整型值,除使用循环赋值外有没有c库函数可以实现
    发表于 03-07 17:05

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

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

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

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

    socket编程中的阻塞阻塞

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

    Verilog HDL的基础知识

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

    基于OpenHarmony标准系统的C++公共基础类库案例:SafeBlockQueue

    1、程序简介该程序是基于OpenHarmony的C++公共基础类库的读写锁:SafeBlockQueue。线程安全阻塞队列SafeBlockQueue类,提供阻塞阻塞版的入队入队和
    的头像 发表于 08-30 12:41 ?612次阅读
    基于OpenHarmony标准系统的C++公共基础类库案例:SafeBlockQueue

    SystemView上下文统计窗口识别阻塞原因

    SystemView工具可以记录嵌入式系统的运行时行为,实现可视化的深入分析。在新发布的v3.54版本中,增加了一项新功能:上下文统计窗口,提供了对任务运行时统计信息的深入分析,使用户能够彻底检查每个任务,帮助开发人员识别阻塞原因。
    的头像 发表于 08-20 11:31 ?724次阅读

    socket阻塞阻塞的区别是什么

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