当前位置: 首页 > news >正文

Verilog基础:避免混合使用阻塞和非阻塞赋值

相关阅读

Verilog基础icon-default.png?t=N7T8https://blog.csdn.net/weixin_45791458/category_12263729.html?spm=1001.2014.3001.5482


        “避免在一个always块中混杂阻塞赋值和非阻塞赋值”,这条原则是著名的Verilog专家Cliff Cummings在论文SUNG2000中提出的,这个观点在公众讨论时受到了广泛的质疑。有人认为可以在时钟沿触发的always块里把组合逻辑的阻塞赋值和时序逻辑的非阻塞逻辑安全地混杂在一起。诚然,但是这种编码风格有以下几点不足。

  1. 这种always块的事件调度理解起来比较费劲。
  2. 这种always块内的非阻塞赋值应该放在最后。
  3. 在零延迟的RTL模型中,触发器的输入信号(临时变量)和对应的触发器输出会在同一个时钟沿变化,这种波形令人困惑。

        下面来看一下段简单的代码,它拥有正确的代码风格,即没有把阻塞赋值和非阻塞赋值混杂在一起。

module test(output reg q,output y,input a, b, c, clk, rst_n);wire d;always@(posedge clk or negedge rst_n)if(!rst_n) q <= 0;else       q <= d;assign d = a & b;assign y = q & c;endmodule

        以上Verilog代码的综合结果如图1所示。

图1 对应的综合电路 

        虽然下面的代码也正确地构建上面的电路,但是这段代码把阻塞和非阻塞赋值混杂在同一个always块中。这种编码风格经常被那些具有VHDL背景的工程师采用,因为他们为了提高VHDL仿真性能,习惯于把变量和信号赋值混杂在用一个process块中,但是在Verilog中使用这种风格并不会提高仿真性能。

module test(output reg q,output y,input a, b, c, clk, rst_n);always@(posedge clk or negedge rst_n)if(!rst_n) q <= 0;else begin:logicreg d;d = a & b;q <= d;endassign y = q & c;endmodule

        以上Verilog代码的综合结果如图2所示。 

图2 对应的综合电路 

        虽然这段代码在仿真和综合时都正确,但是最好还是不要使用这种编码风格,因为仿真波形会让人困惑。这种混杂的编码风格意味着:当与非门的输入发生变化时,组合信号d不会发生变化,组合信号d发生变化的唯一时刻是在时钟的有效沿或复位。对于大型的设计,工程师要花费很多时间去理解这种怪异的行为——触发器的输入和对应的输出在同一个沿变化,这在真实的硬件上是不会发生的,只是这种编码风格产生的副作用。

        除此之外,为了定义内部信号,需要有一个命名块(在上面为logic)。

        有的工程师说:对于上述混杂的Verilog代码,当非阻塞赋值用完内部信号后,就把它们赋值为x,这样就不会有人在波形上查看这些内部信号,也不会让人糊涂。下面就是使用这种奇怪编码风格后的代码。对于这种编码风格,内部信号在整个仿真过程中都显示成x,即使他们具有暂时的中间值。为了使用这种不好的编码风格,就制造了这么多的麻烦。

module test(output reg q,output y,input a, b, c, clk, rst_n);always@(posedge clk or negedge rst_n)if(!rst_n) q <= 0;else begin:logicreg d;d = a & b;q <= d;d <= 1'bx;endassign y = q & c;endmodule

         以上Verilog代码的综合结果如图3所示。 

图3 对应的综合电路 

        我们可以看到这种在同一个always块内混杂阻塞和非赋值赋值的编码风格有的缺点:仿真性能差,可读性差(需要对Verilog事件调度有很好的理解),不容易编码(可能以错误的方式混杂了两种赋值,波形令人困惑)。这种风格并没有什么明显的优点,所以Cliff Cummings坚持认为不要在同一个always块中混杂两种赋值。

 

相关文章:

Verilog基础:避免混合使用阻塞和非阻塞赋值

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 “避免在一个always块中混杂阻塞赋值和非阻塞赋值”&#xff0c;这条原则是著名的Verilog专家Cliff Cummings在论文SUNG2000中提出的&#xff0c;这个观点在公众讨…...

04、MySQL-------MyCat实现分库分表

目录 九、MyCat实现分库分表1、分库分表介绍&#xff1a;横向&#xff08;水平&#xff09;拆分**垂直分表**&#xff1a;水平分表&#xff1a;**分库分表** 纵向&#xff08;垂直&#xff09;拆分分表字段选择 2、分库分表操作&#xff1a;1、分析图&#xff1a;2、克隆主从3、…...

开源软件-禅道Zentao

禅道Zentao 简介漏洞复现SQL注入漏洞**16.5****router.class.php SQL注入** **v18.0-v18.3****后台命令执行** 远程命令执行漏洞&#xff08;RCE&#xff09;后台命令执行 简介 是一款开源的项目管理软件&#xff0c;旨在帮助团队组织和管理他们的项目。Zentao提供了丰富的功能…...

Linux生产者消费者模型

生产者消费者模型 生产者消费者模型生产者消费者模型的概念生产者消费者模型的特点生产者消费者模型优点 基于BlockingQueue的生产者消费者模型基于阻塞队列的生产者消费者模型模拟实现基于阻塞队列的生产消费模型 生产者消费者模型 生产者消费者模型的概念 生产者消费者模式就…...

【Qt-20】Qt信号与槽

一、什么是信号和槽 信号是特定情况下被发射的事件&#xff0c;发射信号使用emit关键字&#xff0c;定义信号使用signals关键字&#xff0c;在signals前面不能使用public、private、protected等限定符&#xff0c;信号只用声明&#xff0c;不需也不能对其进行定义实现。另外&am…...

“智能+”时代,深维智信如何借助阿里云打造AI内容生成系统

云布道师 前言&#xff1a; 随着数字经济的发展&#xff0c;线上数字化远程销售模式越来越成为一种主流&#xff0c;销售流程也演变为线上视频会议、线下拜访等多种方式的结合。根据 Gartner 报告&#xff0c;到 2025 年 60% 的 B2B 销售组织将从基于经验和直觉的销售转变为数…...

selenium 自动化测试——WebDriver API

控制浏览器 控制浏览器窗口大小&#xff1a;set_window_size()方法 设置全屏模式下运行&#xff1a;maximize_window()方法 from selenium import webdriver from selenium.webdriver.common.by import By import timedriver webdriver.Chrome() driver.get("http://w…...

【实战】学习 Electron:构建跨平台桌面应用

文章目录 一、Electron 简介二、Electron 的优势1. 学习曲线平缓2. 丰富的生态系统3. 跨平台支持4. 开源和社区支持 三、Electron 的使用1. 安装 Node.js2. 安装 Electron3. 创建项目4. 初始化项目5. 安装依赖6. 创建主进程文件7. 创建渲染进程文件8. 打包应用程序9. 运行应用程…...

Python开发之二维数组空缺值的近邻填充

Python开发之二维数组空缺值的填充 1 实现一&#xff0c;任意位置填充2 实现二&#xff0c;填充内部3 实现三&#xff0c;只填充边缘&#xff0c;不包括四个角 前言&#xff1a;主要实现二维数据里面某一个数据的缺失&#xff0c;用缺失的近邻数据进行均值填充&#xff0c;可以…...

vue使用pdf 导出当前页面,(jspdf, html2canvas )

需要安装两个插件 npm install html2canvas jspdfyarn add html2canvas jspdf<div class"app-container" id"pdfPage"><!--这个放你需要导出的内容--> </div><el-button size"mini" click"onExportPdf">导出…...

【oracle删除表 回滚操作】

oracle数据回滚 oracle表在被误删后&#xff0c;一定时间内&#xff0c;可以采取以下方法进行恢复: 1、先查询数据库当前时间 select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual;2、通过当前时间往前推时间&#xff0c;选择想要恢复的时间点 select * from 表名…...

Vue3 + TypeScript

Vue3 TS开发环境创建 1. 创建环境 vite除了支持基础阶段的纯TS环境之外&#xff0c;还支持 Vue TS开发环境的快速创建, 命令如下&#xff1a; $ npm create vitelatest vue-ts-pro -- --template vue-ts 说明&#xff1a; npm create vitelatest 基于最新版本的vite进行…...

软件测试/测试开发丨南科大计算机系本科生获“火焰杯”软件测试高校就业选拔赛一等奖

2022年12月2日&#xff0c;计算机系党总支书记、副系主任王琦副教授在工学院南楼551会议室为19级徐驰同学颁发第二届“火焰杯”软件测试开发选拔赛一等奖奖项&#xff0c;为刘烨庞助理教授颁发赛事优秀指导老师奖项。徐驰同学于2022年4月获得该赛事全国总决赛第一名&#xff0c…...

访问 github 问题解决方法

一、macOS版 PS. Windows 版的还没试&#xff0c;不过应该也差不多 1.基本信息 硬件&#xff1a;MacBook Pro 2017 (A1707) 系统&#xff1a;macOS 13.6 (Ventura) 应用&#xff1a;SwitchHosts 4.1.2 (Releases oldj/SwitchHosts GitHub) hosts内容网站&#xff1a;ht…...

供应QCA8075原装芯片

长期供应各品牌原装芯片&#xff1a; SST39VF040-70-4I-NH AR9344 DC3A BGA USB2422 QFN24 W9751G6KB-251 RTL8211EG-VB-CG HI3535-RBCV100 MX25L25635FMI-10G USB2240I-AEZG EM620FV8BS-70LF HXI15H4G160AF-13K 1PQ8064/BGA-519 USB4604I-1080HN SCB15H2G160A…...

在Maven中配置代理服务器的详细教程

在Maven中配置代理服务器的详细教程如下&#xff1a; 首先&#xff0c;确保您已经安装了Maven。创建一个新的Maven项目。在命令行中输入以下命令&#xff1a; mvn archetype:generate -DgroupIdcom.example -DartifactIdmy-app -DarchetypeArtifactIdmaven-archetype-quickst…...

QStringListModel

创建模型&#xff1a; QStringListModel* model new QStringListModel(this); 初始化列表&#xff1a; QStringList strList;strList << QStringLiteral("北京") << QStringLiteral("上海") << QStringLiteral("天津") &l…...

Linux下的文件管理

一、Linux下文件命名规则 1、可以使用哪些字符&#xff1f; 理论上除了字符“/”之外&#xff0c;所有的字符都可以使用&#xff0c;但是要注意&#xff0c;在目录名或文件名中&#xff0c;不建议使用某些特殊字符&#xff0c;例如&#xff0c; <、>、&#xff1f;、* …...

RN:报错info Opening flipper://null/React?device=React%20Native

背景 在 ios 上使用 debug 模式的时候&#xff0c;报错&#xff1a;info Opening flipper://null/React?deviceReact%20Native&#xff0c;我找到了这个 issue 其实也可以看到现在打开 debug&#xff0c;是 open debug&#xff0c;也不是之前的 debug for chrome 了&#xf…...

请问嵌入式或迁移学习要学什么?

请问嵌入式或迁移学习要学什么&#xff1f; 学习嵌入式和迁移学习是一个很好的方向&#xff0c;尤其是在军I领域。以下是一些你可以提前学习的基本 知识和步骤: 嵌入式系统:最近很多小伙伴找我&#xff0c;说想要一些嵌入式资料&#xff0c;然后我根据自己从业十年经验&#…...

数据安全防线:如何用ArchiveBox构建完整的网页归档系统

数据安全防线&#xff1a;如何用ArchiveBox构建完整的网页归档系统 【免费下载链接】ArchiveBox &#x1f5c3; Open source self-hosted web archiving. Takes URLs/browser history/bookmarks/Pocket/Pinboard/etc., saves HTML, JS, PDFs, media, and more... 项目地址: h…...

深度学习中Batch Normalization原理与实践详解

1. 神经网络中的Batch Normalization技术解析在训练深度神经网络时&#xff0c;我们经常会遇到一个令人头疼的现象&#xff1a;随着网络层数的增加&#xff0c;模型训练变得异常困难。这种现象在2015年之前困扰着整个深度学习社区&#xff0c;直到Batch Normalization&#xff…...

[Android] 一个靠AI完成基本的构架 app 家物管(永久免费) 正式版

[Android] 一个靠AI完成基本的构架 app 家物管(永久免费) 正式版 链接&#xff1a;https://pan.xunlei.com/s/VOrD8C5uEd7n8jX9m4cMj1v3A1?pwd5av9# 发现记心越来越差&#xff0c;收纳的东西翻破天都没找到&#xff0c;灵光一闪&#xff0c;AI都包月&#xff0c;不用白不用。…...

Code Claw:用手机遥控VSCode,实现移动AI编程

1. 项目概述&#xff1a;当手机成为你的AI编程遥控器作为一名在开发一线摸爬滚打了十多年的程序员&#xff0c;我经历过无数次这样的场景&#xff1a;灵感在通勤路上、在咖啡厅、甚至在睡前突然闪现&#xff0c;但手边没有电脑&#xff0c;只能眼睁睁看着它溜走。或者&#xff…...

终极指南:如何为Switch选择最合适的游戏安装器

终极指南&#xff1a;如何为Switch选择最合适的游戏安装器 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 如果你正在寻找一款真正"即开即用&…...

百川2-13B-4bits量化模型效果:中文学术论文摘要生成,含研究方法/结论/创新点三段式

百川2-13B-4bits量化模型效果&#xff1a;中文学术论文摘要生成&#xff0c;含研究方法/结论/创新点三段式 1. 引言 写学术论文最头疼的是什么&#xff1f;很多人会说&#xff0c;是摘要。 一篇好的摘要&#xff0c;要在几百字里说清楚研究背景、方法、结果、创新点&#xf…...

外包开发人员考勤管理的技术破局:栎偲考勤神器如何解决跨场景管理难题

在外包开发人员管理中&#xff0c;考勤数据的实时性、准确性和跨场景适配始终是企业IT团队的痛点。外包团队常分布在不同城市甚至不同时区&#xff0c;传统打卡机受限于地域和网络&#xff0c;Excel手动核算又容易出现班次错配、外勤记录遗漏等问题。本文结合实测体验&#xff…...

GPT-5.5​ 和 DeepSeek V4同期发布,谁更行?

今天&#xff08;2026年4月24日&#xff09;绝对是 AI 圈载入史册的一天。就在同一天&#xff0c;OpenAI 和 DeepSeek 这两个巨头竟然“撞车”了&#xff0c;前后脚发布了自家的最新王炸&#xff1a;GPT-5.5 和 DeepSeek V4。这感觉就像两个武林高手约好了在同一时刻亮剑&#…...

Java常见报错处理技术文章大纲

一、引言 Java错误处理的重要性:解释错误对程序稳定性的影响。 错误分类概述:简要介绍编译时错误、运行时错误和逻辑错误。 文章目标:帮助开发者快速识别、诊断和解决常见问题。 二、编译时错误处理 常见类型与原因: 语法错误(如缺少分号或括号)。 类型不匹配(如赋值给错…...

避坑指南:UE5 Cesium加载本地倾斜摄影,为什么你的模型总对不准位置?

UE5 Cesium加载本地倾斜摄影模型位置校准全攻略 第一次在UE5中看到自己辛苦转换的倾斜摄影模型漂浮在虚空&#xff0c;或者深陷地底时&#xff0c;那种挫败感我太熟悉了。这不是简单的坐标偏差&#xff0c;而是地理空间数据与虚拟引擎碰撞时产生的维度撕裂。本文将带你穿越这个…...