Verilog基础:延时模型

news2025/1/10 2:00:58

相关阅读

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


目录

1、连续赋值延时

1.1、赋值内嵌延时

1.2、线网声明延时

1.3、门延迟

2、过程赋值延时

2.1、过程语句前置时序控制

2.2、过程赋值语句内嵌时序控制


1、连续赋值延迟

        连续赋值延迟用于指定=右侧表达式的操作数发生值的变化到左值被更新之间的时间间隔,它们模拟了惯性延迟模型(Inertial Delay Model,IDM),即他们会把短于门级原语(Primitive)或连续赋值语句(Continuous assignment)的传播延迟(Propagation Delay)的脉冲过滤掉,只能传送稳定时间大于等于传播延迟的信号。连续赋值延时可以分为三种:赋值内嵌延迟线网声明延迟门延迟。

        惯性延迟是指如果右侧操作数在前一个更改有时间传播到左侧之前发生更改,则会采取以下步骤:

  1. 将重新计算右侧表达式的值。
  2. 如果此右侧的值与当前计划传播到左侧的值不同,则当前计划的传播事件将被取消计划,否则当前计划的传播事件按原计划执行。
  3. 如果重新计算后新的右侧值等于当前左侧值,则不会安排任何事件。
  4. 如果新的右侧值与当前左侧值不同,则使用左侧的当前值、右侧的新计算值以及语句中指示的延迟,以标准方式计算延迟;新的传播事件随后被调度为在延迟时间之后发生。

        通俗来讲就是如果在赋值号右侧的改变因为延迟尚未赋给左侧,此时出现了新的赋值号右侧的改变,如果导致新的计算结果和原来计划的一样,则原定赋值照常进行,否则原赋值将被取消。如果新的计算结果和当前左值一样,则不会发生任何事件,否则会重新根据值计算延迟并在延迟后赋值。

1.1、赋值内嵌延迟

        赋值内嵌延时指的是直接在连续赋值语句中说明延迟值,下图是连续赋值语句语法的BNF范式形式,有关BNF范式的内容,可以在Verilog基础专栏的以往文章中找到。

        其中可选的[delay3]就描述了赋值内嵌延时,他可以是简单的#加上一个延迟值,也可以是#后()包围的最多三个mintypmax_expression,这三个表达式分别表示上升延迟,下降延迟和关断延迟。

        上升延迟是指赋值号右值发生变化后,左值从当前的0,x,z变为即将赋予的1所需的时间

        下降延迟是指赋值号右值发生变化后,左值从当前的1,x,z变为即将赋予的0所需的时间。

        关断延迟是指赋值号右值发生变化后,左值从当前的0,1,x变为即将赋予的z所需的时间。

        另外,如果信号值从0,1,z变为即将赋予的x,延迟值为这三者中最低小的值。

        当只有一个表达式时,其表示上升延迟,同时下降延迟和关断延迟也与其相同。

        当只有两个表达式时,其表示上升延迟和下降延迟,同时关断延迟也与两者中最小值相同。

        值得说明的是mintypmax_expression本身可以由一个或三个表达式构成,当其由一个表达式构成时,代表延迟的最小值、典型值和最大值都指定为这个表达式,当其由三个表达式构成时,代表延迟的最小值、典型值和最大值分别指定为这三个表达式。

        显然,上面所说的都是针对标量赋值给标量的情况,那对于矢量赋值,该如何确定是使用上升延迟、下降延迟还是关断延迟呢? 

        Verilog官方文档对这个的描述十分模糊,我在其他资料中找到了有关于此的描述,如下所示。

  1. 如果右值当前最低位为0,或要从当前的1,x,z变为即将赋予的0,则对整体使用下降延时。
  2. 如果右值当前最低位为1,或要从当前的0,x,z变为即将赋予的1,则对整体使用上升延时。
  3. 如果右值当前最低位为z,或要从当前的0,1,x变为即将赋予的z,则对整体使用上升延时。
  4. 如果右值当前最低位为x,或要从当前的0,1,z变为即将赋予的x,则对整体使用前三者中的最小延时。

1.2、线网声明延迟

        线网声明延迟来源于net声明的过程,如下图所示。

        其中的[delay3]可选项与上一小节的相同,这里的延迟对所有对此net的连续赋值和以此net为输出的门级原语(primitive)生效。注意到语法定义中有[list_of_net_decl_assignment]可选项,这代表可以在net声明时进行连续赋值,如下图所示。

        当net声明中存在连续赋值时,延迟会变成连续赋值的一部分(被解释为赋值内嵌延迟),而不是线网声明延迟。因此会失去上面说明的特性。

        线网声明延迟的其他细节与赋值内嵌延迟一致。

1.3、门延迟

        门延迟指的是在使用门级原语(primitive)时指定的延时,因为门级原语的输入输出就像是使用了连续赋值语句,所以把它归为此类,下图为门级原语的语法。

        可以看到其中有些器件拥有[delay3]可选项,有些器件只有[delay2]可选项,因为有些器件不会出现输出为z的情况,如下图所示的n_input_gatetype和n_output_gatetype的真值表。

        门延迟其他的细节与赋值内嵌延迟相同,注意线网声明延迟可以与赋值内嵌延迟或门延迟叠加。

2、过程赋值延迟

        过程赋值延迟顾名思义,是存在于过程语句中的延迟,分为过程语句前置时序控制过程赋值语句内嵌时序控制两种。过程语句指的是在initial块或always块内的语句,有关于这两个块的相关细节,可以在Verilog基础专栏的以往文章中找到。

2.1、过程语句前置时序控制

       过程语句前置时序控制的语法如下图所示。

        可以看到在一个statement_or_null前可以有procedural_timing_control_statment,形式为delay_control或event_control,其中delay_control可以是#加简单的延时值,也可以是mintypmax_expression。当控制流遇到procedural_timing_control_statment时,会暂定执行后面的语句,直到相应的延迟时间后或相应的事件发生(一般只有在begin-end块内,procedural_timing_control_statment才能阻塞整个块的执行,因为begin-end保证了上一条语句执行完成后才开始执行下一条语句)。

2.2、过程赋值语句内嵌时序控制

        过程赋值语句内嵌时序控制,是在过程赋值语句内部的,只针对过程赋值语句的特定延时,它们模拟了传输延迟模型(Transport Delay Model, TDM),即它们能传送所有宽度的脉冲,也就是说它们可以传输毛刺(Glitch)。

        两种过程赋值语句的语法如下图所示,分别是阻塞赋值和非阻塞赋值。

        其中可选的[delay_or_event_control]便是过程赋值语句内嵌时序控制,可以看到它相比于过程语句前置时序控制,增加了repeat语句描述的event_control。

        对于阻塞赋值来说,当控制流传到赋值语句时,立刻计算赋值号=右侧的expression,并等待[delay_or_event_control]发生后进行赋值,赋值完成后此语句才结束,这就代表着后面的语句也会受到[delay_or_event_control]的阻塞(如果语句在begin-end块中)。

        对于非阻塞赋值来说,当控制流传到赋值语句时,立刻计算赋值号<=右侧的expression,此时控制流可以继续执行下面的语句,就好像是计算完<=右侧的expression后赋值语句就结束了一样,但其实依然需要[delay_or_event_control]发生后进行赋值,只是非阻塞赋值的内嵌时序控制不会阻塞后面的语句。

图源自《IEEE Standard for Verilog® Hardware Description Language 2005》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/953644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录--解决前端内存泄漏:问题概览与实用解决方案

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 内存泄漏是前端开发中的一个常见问题&#xff0c;可能导致项目变得缓慢、不稳定甚至崩溃。在本文中&#xff0c;我们将深入探讨在JavaScript、Vue和React项目中可能导致内存泄漏的情况&#xff0c;并提…

现代C++中的从头开始深度学习:【6/8】成本函数

现代C中的从头开始深度学习&#xff1a;成本函数 一、说明 在机器学习中&#xff0c;我们通常将问题建模为函数。因此&#xff0c;我们的大部分工作都包括寻找使用已知模型近似函数的方法。在这种情况下&#xff0c;成本函数起着核心作用。 这个故事是我们之前关于卷积的讨论的…

【python爬虫】7.爬到的数据存到哪里?

文章目录 前言存储数据的方式存储数据的基础知识基础知识&#xff1a;Excel写入与读取基础知识&#xff1a;csv写入与读取项目&#xff1a;存储周杰伦的歌曲信息 复习 前言 上一关我们以QQ音乐为例&#xff0c;主要学习了如何带参数地请求数据&#xff08;get请求&#xff09;…

软件测试/测试开发丨Pytest和Allure报告 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/26755 Pytest 命名规则 类型规则文件test_开头 或者 _test 结尾类Test 开头方法/函数test_开头注意&#xff1a;测试类中不可以添加__init__构造函数 注…

IP基本原理(上)

文章目录 一、IP的定义二、IP的作用1.标识节点和链路2.寻址和转发3.适应各种数据链路 三、IP头部封装格式四、MTU五、IP地址1.定义2.格式2.1 点分十进制和二进制关系与转换2.2 由网络位主机位组成2.3 网络位长度决定网段 3.分类3.1 A类3.2 B类3.3 C类3.4 D类3.5 E类 4.特殊地址…

Linux虚拟机磁盘扩容

Linux虚拟机磁盘扩容 问题起源 在使用linux系统开发时遇到文件无法创建的问题&#xff0c;根据提示发现是磁盘空间不足。 使用df -h查看具体磁盘使用情况。 针对这个问题&#xff0c;有两种解决方案&#xff1a; 使用du -sh ./*可以查看当前工作目录下各文件的占用空间大小…

【USRP】Ettus USRP X440 (USRP软件无线电设备)

Ettus USRP X440 30 MHz至4 GHz&#xff0c;1.6 GHz 带宽&#xff0c;基于GPS的OCXO&#xff0c;USRP软件无线电设备 - Ettus USRP X440是一款USRP软件无线电(SDR)设备&#xff0c;可帮助您集成硬件和软件&#xff0c;对高性能、多通道、宽带信号生成和分析系统进行原型验证。…

InnoDB的Buffer

一、Buffer内存结构 MySQL 服务器启动的时候就向操作系统申请了一片连续的内存&#xff0c;默认128M&#xff0c;可通过从参数修改。 [server] innodb_buffer_pool_size 268435456 1.1 控制块 控制块包括该页所属的 表空间编号、页号、缓存页在 Buffer Pool 中的地址、链表…

14:00面试,14:06就出来了,问的问题有点变态

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…

vue three.js基本案例解析

1.安装依赖 // 比如安装148版本 npm install three0.148.0 --save2.使用页面引用 import * as THREE from three; // 引入扩展库OrbitControls.js import { OrbitControls } from three/addons/controls/OrbitControls.js; // 引入扩展库GLTFLoader.js import { GLTFLoader }…

盘点那些国际知名黑客(上篇)

电影中的黑客仅靠一部电脑就可以窃取别人的信息&#xff0c;利用自己高超的技术让公司甚至国家都胆战心惊。“黑客”原指热心于计算机技术、水平高超的电脑高手&#xff0c;但逐渐区分为黑帽、白帽、灰帽。这些术语源自美国流行文化的老式西部电影&#xff0c;其中主角戴白色或…

企业怎么优化固定资产管理

在优化固定资产管理的过程中&#xff0c;不仅要关注硬件设备和设施的维护&#xff0c;还要重视软件系统和数据管理。一些可能的方法&#xff1a;  需要建立一套完整的资产管理系统。这个系统应该包括资产的采购、登记、使用、维修、报废等各个环节的管理流程。通过这个系统&a…

带你吃透Reactor并发模型

目录 1.概述2.项目介绍2.1 有那些并发模型2.2 能锻炼那些技能2.3目录结构 3.编码实践3.1 前期准备3.1.1 Echo协议3.1.2公共代码抽象3.1.3基准性能压测工具 3.2 并发示例3.2.1 EpollReactorSingleProcess3.2.2 EpollReactorProcessPool3.2.3 EpollReactorThreadPool3.2.4 EpollR…

MongoDb-01——Mac上安装MongoDb以及相关的简单命令

MongoDb-01——Mac上安装MongoDb以及相关的简单命令 1. 下载、安装1.1 官网下载1.2 关于安装MongoDB1.2.1 官方安装文档1.2.2 Mac安装详细步骤&#xff08;使用brew&#xff09; 2. 启动MongoDB2.1 官方说明2.2 作为macOS服务运行的相关命令2.3 访问 3. 链接并使用mongodb3.1 链…

人工智能与软件开发的未来

人工智能正在从各个方面改变软件开发。尽管许多公司竞相推出人工智能功能&#xff0c;但人工智能的潜力已超出了功能层面&#xff0c;成为大多数SaaS解决方案的基础。当机器学习和人工智能模型应用在SaaS技术后&#xff0c;便能提高各种业务流程的效率。人工智能应被视为新的开…

解决报错“No module named ‘pandas.core.indexes‘”

解决办法&#xff1a; 首先使用看一下你的pandas是不是版本太新了&#xff0c;如果使用2.0.0以上的版本&#xff0c;则会出现这个报错。 可以安装1.x.x的版本。 pip install pandas1.5.3

在Bigemap中怎么添加高清地图呢?

会使用到的工具 bigemap gis office&#xff0c;下载链接&#xff1a;BIGEMAP GIS Office-全能版 打开软件&#xff0c;要提示需要授权和添加地图&#xff0c;然后去点击选择地图这个按钮&#xff0c;列表中有个添加按钮点进去选择添加地图的方式。 第一种方式&#xff1a;通…

多轮面试中的策略和技巧:如何稳步晋级

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

如何用数字化系统延长用户运营周期?如何建立数字化用户体系?

如果说运营是进行用户引流、留存及转化的各个细分环节搭建&#xff0c;精细化运营便是针对各个细分环节&#xff0c;结合用户画像、人群定位、场景拆解及数据分析等细节&#xff0c;对用户展开有针对性的运营策略。要知道&#xff0c;运营需要以用户为中心&#xff0c;没有用户…

优思学院|企业推行精益生产要具备哪些前提条件?

企业界早已充斥着各种方法和策略&#xff0c;试图模仿精益生产和六西格玛管理等成功之路&#xff0c;目标在于通过质量工具的运用来改善业务。然而&#xff0c;许多公司在推行这些方法的过程中都犯了一个大错&#xff1a;他们忽视了背后的企业文化和制度&#xff0c;以及精益生…