Verilog基础:强度建模(一)

 相关阅读

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


一、强度建模基础 

        Verilog HDL提供了针对线网信号0、1、x、z的精准强度建模方式,这样可以允许将两个线网信号进行线与操作从而更加精确地描述出硬件行为。

        强度建模可以在两个地方使用,一个是连续赋值语句,另一个是门级建模。一个强度由两部分组成,一部分表示信号0的强度,称为strength0;一部分表示信号1的强度,称为strength1。

        strength0包括以下几种:supply0(供电级低电平),strong0(强驱动级低电平),pull0(上下拉级低电平),weak0(弱驱动级低电平)以及highz0(高阻级低电平)。

        strength1包括以下几种:supply1(供电级高电平),strong1(强驱动级高电平),pull1(上下拉级高电平),weak1(弱驱动级高电平)以及highz1(高阻级高电平)。

        需要特别注意的是,(highz0, highz1)以及它的等效表示(highz1, highz0)是非法的,原因也会很简单,这会导致输出永远是高阻。

        尽管对强度进行了这种划分,但为了预测信号组合的结果,可以将强度视为几个连续区域的组合。表1就展示了强度的连续性,左侧列出了用于指定强度名。右侧给出了相关的强度水平。

表1 线网型信号的强度水平

强度名强度等级
supply07
strong06
pull05
large04
weak03
medium02
small01
highz00
highz10
small11
medium12
weak13
large14
pull15
strong16
supply17

        在表1中,有四类驱动强度: supplystrongpullweak,这些强度是门级建模的输出net信号和连续赋值语句的左值net信号所拥有的。

        在表1中,还存在三类电荷储存强度:largemediumsmall,只有在声明trireg线网型变量时能指定。

        注意这里我们没有讨论highz类,这是因为其比较特殊,后面会进行详细说明。

         可以将表1写成下面图1的比例尺形式,这也是后面讨论强度建模细节的方式。

图1 强度比例尺

        如果net型信号拥有确定的值1,则其强度应该全部由strength1部分的强度水平组成(不能包括highz1)。如果net型信号拥有确定的值0,则其强度应该全部由strength0部分的强度水平组成(不能包括highz0)。如果一个net型信号的值是x,则其部分拥有strength0的强度,部分拥有strength1的强度,比如一个Stx信号指的是一个强度范围从strong0到strong1的信号。如果net型信号拥有值z,则代表其强度一定是highz类,至于是highz0还是highz1我们一般不做区分。另外还有两种特殊的信号值H和L,这会在后面进行说明。

二、门级建模和连续赋值语句引入的强度

        在上一节,我们介绍了强度建模的引入方式,下面进行详细阐述。首先给出门级建模和连续赋值语句语法的BNF范式,如图2和图3所示。有关BNF范式的相关内容可以看笔者的以往文章。

图2 门级建模语法的BNF范式

图3 连续赋值语句语法的BNF范式 

        在图2和图3中我们可以看到驱动强度[drive_strength]是门级建模和连续赋值语句的可选项,如果不指定驱动强度[drive_strength],则默认驱动强度为(strong0, strong1)。还要注意的是,对于net声明连续赋值语句,同样可以使用驱动强度[drive_strength],这与普通的连续赋值语句没有区别。

        有了语法的基础,下面就可以举例说明驱动强度的基本概念了。

wire a, b, c, d, e;
assign a = 1;                    //net型信号a拥有单个强度strong,拥有信号值1,用St1表示
assign (strong1, strong0) a = 1; //与上面的形式等价
assign (strong0, strong1) a = 1; //与上面的形式等价
assign (weak0, strong1) a = 0;   //net型信号a拥有单个强度weak,拥有信号值0,用We0表示
assign b = 1'bx;                 //net型信号b拥有强度范围strong0到strong1,拥有信号值x,用Stx表示
assign (weak0, pull1) b = 1'bx;  //net型信号b拥有强度范围weak0到pull1,拥有信号值x,用35x表示
assign c = 1'bz;                 //net型信号c拥有强度hignz,拥有信号值z,用HiZ表示
not (pull0, weak1) (d, 1'b0);    //net型信号d拥有单个强度pull,拥有信号值0,用Pu0表示
wire (weak0, supply1) e = 1'b0;  //net型信号e拥有单个强度weak,拥有信号值0,用We0表示

//尽管我们的例子全部是变量net,但是对于矢量net同样适用

         这里要注意的是,不管是连续赋值的左值net型信号还是门级建模的输出信号,信号的值是由输出决定的,而和输入或指定的驱动强度无关,这很好理解,因为输入可以是没有驱动强度的variable型信号,比如reg型信号,而指定的强度相当于只是给结果附上了一个属性,而不影响结果的值,下面举例说明。

wire a, b;
assign (pull1, supply0) b =1'b0;  //b的强度是supply,值是0,用Su0表示
assign (pull0, supply1) a = b;    //a的强度是pull,值是0,用Pu0表示(a的强度与b的强度无关,a的值与b的值有关)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

string 模拟实现

string的数据结构 char* _str; size_t _size; size_t _capacity; _str 是用来存储字符串的数组,采用new在堆上开辟空间; _size 是用来表示字符串的长度,数组大小strlen(_str); _capacity 是用来表示_str的空间大小, _capacity…

使用 Postman 发送 get 请求的简易教程

在API开发与测试的场景中,Postman 是一种普遍应用的工具,它极大地简化了发送和接收HTTP请求的流程。要发出GET请求,用户只需设定正确的参数并点击发送即可。 如何使用 Postman 发送一个GET请求 创建一个新请求并将类型设为 GET 首先&#…

余承东发声!预测:2024年,鸿蒙OS将取代苹果iOS…

半导体行业观察机构Techinsights,1月3日发布报告预测;从2024年起,鸿蒙Harmony OS将取代苹果iOS,成为中国市场上第二大智能手机操作系统。 TechInsights预测,2024年全球智能手机销量将同比反弹3%。华为手机在2024年将坚…

基于Harris角点的多视角图像全景拼接算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Harris角点检测 4.2 图像配准 4.3 图像变换和拼接 4.4 全景图像优化 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 function [ImageB…

k8s---ingress对外服务(ingress-controller)

ingress 概念 k8s的对外服务,ingress service作用现在两个方面: 1、集群内部:不断跟踪的变化,更新endpoint中的pod对象,基于pod的ip地址不断变化的一种服务发现机制。 2、集群外部:类似于负载均衡器&a…

如何在Linux运行RStudio Server并实现Web浏览器远程访问

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. …

Linux系统编程(二)文件IO/系统调用IO

一、IO 简介 I/O 是一切实现的基础: 标准 IO(stdio);系统调用 IO(sysio,文件IO); 不同系统上的系统调用 IO 的使用方式可能不一样,为了隐藏不同系统上的细节&#xff…

mysql 为大表新增字段或索引

1 问题 mysql 为大表增加或增加索引等操作时,直接操作原表可能会因为执行超时而导致失败。解决办法如下。 2 解决办法 (1)建新表-复制表A 的数据结构,不复制数据 create table B like A; (2)加字段或索…

使用muduo库编写网络server端

muduo库源码编译安装和环境搭建 C muduo网络库知识分享01 - Linux平台下muduo网络库源码编译安装-CSDN博客 #include<iostream> #include<muduo/net/TcpServer.h> #include<muduo/net/EventLoop.h> using namespace std; using namespace muduo; using name…

两道有挑战的问题(算法村第九关黄金挑战)

将有序数组转换为二叉搜索树 108. 将有序数组转换为二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个…

作为班主任如何管理好班级

作为班主任&#xff0c;如何才能把班级管理得井井有条&#xff0c;让每个学生都能够得到全面的发展呢&#xff1f;这个问题一直困扰着许多班主任。接下来&#xff0c;我将从几个方面来分享一下自己的经验和看法。 建立良好的师生关系是班级管理的基石。作为班主任&#xff0c;…

【linux】粘滞位.yum

粘滞位 1.为什么我们普通用户可以删掉别人的文件&#xff08;包括root&#xff09;?合理吗&#xff1f; 2.删除一个文件和目标文件有关系吗&#xff1f; 没关系&#xff0c;和所处的目录有关系。 1.我们先以root身份创建一个目录&#xff0c;接着在这个目录下创建一个文件 2…

如何获取一个德国容器

1.注册discord账号 discord注册网址:https://discord.com/ 下面是容器的discord邀请链接 https://discord.com/Discord邀请链接:https://discord.com/invite/jVMSWrchC4 2.进入discord群聊点击link 在点击网址,这个网址每星期都会变就是图中的② 3.进入容器网址,进入界面…

POKT Network 开启周期性通缩,该计划将持续至 2025 年

POKT Network&#xff08;也被称为 Pocket Network&#xff09;在通证经济模型上完成了重大的改进&#xff0c;不仅将通货膨胀率降至 5% 以下&#xff0c;并使 POKT 通证在 2025 年走向通缩的轨迹上&#xff0c;预计到2024 年年底通货膨胀率将降至 2% 以下。POKT Network 的 “…

JVM工作原理与实战(十九):运行时数据区-方法区

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、运行时数据区 二、方法区 1.方法区介绍 2.方法区在Java虚拟机的实现 3.类的元信息 4.运行时常量池 5.字符串常量池 6.静态变量的存储 总结 前言 JVM作为Java程序的运行环境…

什么是网络安全,如何防范?

网络安全&#xff08;Cyber Security&#xff09;是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因而遭受到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 网络安全涵盖了网络设备安全、网络信息安全…

canvas绘制不同样式的五角星(图文示例)

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

如何在MinIO存储服务中通过Buckets实现远程访问管理界面上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统&#xff0c;它可以100%的运行在标准硬件上&#xff0c;即X86等…

真假转换之间 tr

文章目录 真假转换之间 tra-z小写全部转换为大写A-Z大写全部转换为小写貌似起名可以用这个移除文件中的所有空格更多信息 真假转换之间 tr Linux tr 命令用于转换或删除字符。 tr 命令可以从标准输入读取数据&#xff0c;经过字符串转译后&#xff0c;将结果输出到标准输出。…

线性回归理论+实战

线性回归 什么是线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation (d2l.ai) 模型 损失函数 模型拟合&#xff08;fit&#xff09;数据之前&#xff0c;我们需要确定一个拟合程度的度量。 损失函数&#xff08;loss function&#xff09;能够量化目标的实际值…