Verilog基础:强度建模与net型信号的多驱动问题(三)

 相关阅读

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


 四、一般情况下的net型信号的线与组合(线网多驱动)

        在Verilog基础:强度建模与net型信号的多驱动问题(二)-CSDN博客一文中,我们已经学会了多个拥有单个强度和确定值的net型信号的相与组合的规则,本文将学习更为普遍的net型信号相与的规则,首先我们说明一下一些特殊的net型信号。

        一、一个net型信号拥有多个强度,和确定值(这只可能是信号线与的中间结果)。

        二、一个net型信号拥有x值,它指的是net即拥有部分strength0的驱动强度也拥有部分strength1的驱动强度(这可能是信号线与的中间结果,也可能是由特定输入导致的输出x)。

        三、一个信号拥有L值,它指的是net信号拥有部分strength0的驱动强度加上highz的驱动强度。

        四、一个信号拥有H值,它指的是net信号拥有部分strength1的驱动强度加上highz的驱动强度。

        H和L信号可以通过一些门级器件得到,比如图6是三态门器件的真值表,可以看到在某些输入情况下输出的值是H和L,在输出H和L时,其强度范围分别是从highz到strength1的某个驱动强度和从highz到strength0的某个驱动强度,这个驱动强度分别由这个门级器件的strength1和strength0驱动强度决定。

图6 三态门的真值表

        上面的概念可能比较难以理解, 下面将通过一些举例来详细说明,图7给出了我们一直使用的强度比例尺。

图7 强度比例尺

例1
//一个net型信号拥有多个强度,和确定值
wire a;
bufif (strong0, strong1) (a, 1'b0, 1'bx); //StL
assign (pull0, pull1) a = 1'b0;   //Pu0
//最终a的驱动强度从Pull0到Strong0,值为0,用650表示//一个net型信号拥有x值
wire b;
assign (weak0, weak1) b = 1'bx; //Wex
//最终b的驱动强度从Weak0到Weak1,值为x,用Wex表示wire c;
assign (strong0, strong1) c =1'b0; //St0
assign (strong0, strong1) c =1'b1; //St1
//最终c的驱动强度从Strong0到Strong1,值为x,用Stx表示//一个net型信号拥有H值
wire d;
bufif (strong0, pull1) (d, 1'b1, 1'bx); //PuH
//最终d的驱动强度从HiZ到Pull1,值为H,用PuH表示//一个net型信号拥有L值
wire e;
bufif (weak0, pull1) (e, 1'b0, 1'bx); //WeL
//最终e的驱动强度从HiZ到We0,值为L,用WeL表示

         尽管H值和L值看似是除1、0、x、z以外的值,但其实它们只是为了方便表示一个强度范围,而且H值和L值的net信号在后续使用时会被当做x值看待,尽管它的驱动强度似乎完全在strength0或strength1的范围内,但它仍然不被看做0和1,这点在第一章便已说明。

        图8表示了一个We0信号与We1信号线与后产生了Wex的结果。图9在强度比例尺上表示了结果的驱动强度范围。

wire a;
assign (weak0, weak1) a = 1'b0; //We0
assign (weak0, weak1) a = 1'b1; //We1
//最终结果是Wex

图8 相同驱动强度和相反值的信号线与

图9 Wex信号的强度范围

        图10显示了两个三态器件输出H值和L值的过程。注意到输出的强度标注实际上是多余的,且不必要的,因为我们只需输入的值就可判断输出的结果值。图11和图12在强度比例尺上表示了两个结果的驱动强度范围。

wire a, b;
bufif1 (strong0, strong1) (a, 1'b1, 1'bx); //StH,驱动强度从highz到strong1
bufif0 (strong0, strong1) (b, 1'b0, 1'bx); //StL,驱动强度从highz到strong0
$display(a);
$display(b);输出:
x
x

图10 控制端输入为x的三态门

图11 StH信号的强度范围

 图12 StL信号的强度范围

        下面我们来研究一个H信号与一个L信号相与的规则,我们假设两个线与的信号为PuH和WeL,如图13所示。

wire a;
bufif1 (pull0, pull1) (a, 1'b1, 1'bx); //PuH,驱动强度从highz到pull1
bufif0 (weak0, weak1) (b, 1'b0, 1'bx); //WeL,驱动强度从highz到weak0

图13 H与L信号线与

        根据H的定义,我们知道PuH包含了可能的6个驱动强度(包括highz),WeL包含了可能的4个驱动强度(包括highz),按照两两组合的规则,总共有24种组合,我们要做的就是把这24种组合都考虑起来。当然,这不是让你将24中组合全部列出来,因为只需要略加观察便可知We0和We1的线与会导致结果(Wex)可能取得它们之间(包括We0和We1)任意的一种驱动强度和x值,然后PuH含有的large1和pull1也是可能取得的驱动强度,也即结果的驱动强度从We0到Pu1,值为x,表示为35x,如图14所示。

图14  35x信号的强度范围

        有了上面的基础,我们可以来看一个更复杂的例子,它包含了四个驱动源,如图15所示。

wire a, b, d, out;
assign (strong0, strong1) a = 1'b1; //St1
nmos (out, a, 1'bx);                //StH
pullup (out);                       //Pu1
pulldown (b);                       //Pu0
pmos (out, b, 1'bx);                //StL
assign (strong0, strong1) d = 1'b0; //St0
and (weak0, weak1) (out, d, d);     //We0

图15 一个拥有四个驱动源的网络

        图15中包含了nmos和cmos开关,开关不能指定驱动强度但它可以传播输入的驱动强度至输出,因此其输入也必须是net类型信号,图16给出了开关的真值表。因为开关不能指定输出的驱动强度,所以开关输出信号(包括1、0、x、z、H、L)的驱动强度由输入决定。

图16 开关的真值表

        由于输出out有四个驱动源,我们可以自行选择它们的相与顺序,图中是先将pullup器件和nmos的输出线与得出中间结果,pullup器件输出的是Pu1,包含了单个驱动强度,而nmos器件根据规则,输出的是StH,包含了可能的7个驱动强度(包括highz)。它们组合应该有7种情况,但经过观察可知Pu1优先于StH中小于Pu1强度的驱动强度,而StH中含有的St1也是可能的驱动强度,因为它优于Pu1,因此中间结果的驱动强度从Pu1到St1,值为1,表示为651,如图17所示。随后将pulldown器件和pmos的输出线与得出中间结果530,如图18所示,具体过程在此不赘述。

图17 一个拥有确定值和多个驱动强度的中间信号651的强度范围

图18 一个拥有确定值和多个驱动强度的中间信号530的强度范围

        最后需要考虑两个中间结果651和530的线与过程,651信号拥有2个驱动强度而530信号拥有3个驱动强度。它们组合应该有6种情况,经过观察可知,651信号中的Pu1驱动强度与530信号中的Pu0信号线与结果是Pux,再加上651信号中的St1即为所有可能的驱动强度结果,其他的组合情况都被包含在上面两种结果中,所以不需要再讨论了,因此结果为驱动强度从Pu0到St1的,值为x的信号,表示为56x,如图19所示,其中5代表在stength0中的强度,6代表在strength1中的强度。

图19  56x信号的强度范围

        我们再来看一个例子,它展示了广义的StH所包含的驱动强度范围。图20很好理解,两个门的输出信号分别为StH与We0,随后将其线与。

wire e;
and N1 (highz0, strong1) (e, 1'b1, 1'bx); //06x?StH!
and N2 (strong1, weak0)  (e, 1'b0, 1'b0); //We0

图20 广义的StH

        按照之前的说法,N1的输出应该是06x,即强度从highz0到strong1的值为x的信号,但实际上结果是StH,因为我们一般不将highz0和highz1进行区分,统称为highz,所以061和06x其实都会被表示成StH,而它们本身并不存在。

        图21显示了N1输出结果StH的驱动强度范围,注意其中包含了highz0。

图21 广义StH信号的强度范围

        我们可以很轻松地得出出N2输出信号的强度We0,因为其只有单个强度,如图22所示。

图22 We0信号的强度范围

         现在将We0信号和广义StH信号线与,如果有了之前的基础,很快就可以得出结果为36x,因为We0与广义StH信号中的We1相与可以得到Wex,然后再加上广义StH信号中的La1、Pu1、St1即可构成所有驱动强度范围,如图23所示。

图23 36x信号的强度范围

        下面留4道习题用于检验本章的学习成果,如有任何疑问,可以私聊博主或在评论区发言。

习题1

习题2

习题3

习题4

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成功解决java.nio.charset.MalformedInputException: Input length = 1

项目启动时报错如下 Connected to the target VM, address: 127.0.0.1:5309, transport: socket 18:01:22.607 [main] ERROR o.s.b.SpringApplication - [reportFailure,843] - Application run failed org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedIn…

开年大瓜!Mobileye股价暴跌

编者按:作为汽车智能化的第一波受益者,Mobileye的市场红利已经接近尾声。尤其是汽车芯片市场的白热化竞争,新一轮格局重构正在开启。 汽车智能化的供给关系,正在发生微妙变化。 本周,作为全球主要的辅助驾驶芯片及感知…

Joern环境的安装(Windows版)

Joern环境的安装(Windows版) 网上很少有关于Windows下安装Joern的教程,而我最初使用也是装在Ubuntu虚拟机中,这样使用很占内存,影响体验感。在Windows下使用源码安装Joern也是非常简单的过程: 提前需要的本地环境: …

【大数据】流处理基础概念(一):Dataflow 编程基础、并行流处理

流处理基础概念(一):Dataflow 编程基础、并行流处理 1.Dataflow 编程基础1.1 Dataflow 图1.2 数据并行和任务并行1.3 数据交换策略 2.并行流处理2.1 延迟与吞吐2.1.1 延迟2.1.2 吞吐2.1.3 延迟与吞吐 2.2 数据流上的操作2.2.1 数据接入和数据…

GPS位置虚拟软件 AnyGo mac激活版

AnyGo for Mac是一款一键将iPhone的GPS位置更改为任何位置的强大软件!使用AnyGo在其iOS或Android设备上改变其GPS位置,并在任何想要的地方显示自己的位置。这对那些需要测试应用程序、游戏或其他依赖于地理位置信息的应用程序的开发人员来说非常有用&…

【网络奇遇记】揭秘计算机网络性能指标:全面指南

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 速率1.1 数据量1.2 速率 二. 带宽三. 吞吐量四. 时延4.1 发送时延4.2 传播时延…

苹果电脑(Mac)的node版本安装以及升降级

在开发过程中,对于不同的开发环境或者较老的项目可能需要切换不同的node版本,此过程会涉及到node版本的升级与降级,安装node版本管理模块n(sudo命令)。 全局安装n模块 sudo npm install n -g//输入后回车&#xff0c…

MarkDown学习笔记 直观全面详细

前言 为什么我们要学习Markdown呢?因为Markdown简单易学易上手,可以以纯文本格式编写文档,然后转换成有效的HTML文档,并且以导出 HTML 、Word、图像、PDF、Epub 等多种格式的文档,许多网站平台的文章、博客、论文均可…

8.3 Springboot整合Redis 之Jedis方式

文章目录 前言一、Maven依赖二、新增子Module:tg-book-redis三、Jedis配置类3.1 Jedis连接池核心配置说明四、Jedis 工具类五、新增controller测试前言 Jedis是Redis官方推荐的Java客户端连接工具,用法非常简单,Jedis的API与Redis的API可以说是一模一样,所以非常有利于熟悉…

ora-12154无法解析指定的连接标识符

用户反映查询的时候报错ora-12154 这个系统只做历史数据查询使用,使用并不平凡,该数据库曾做过一次服务器间的迁移。 用户描述,所有oracle客户端查询该视图都报tns错误,一般ora-12154会发生在连接数据库时,因为tns配…

flink1.13环境搭建

1、本地启动非集群模式 最简单的启动方式,其实是不搭建集群,直接本地启动。本地部署非常简单,直接解压安装包就可以使用,不用进行任何配置;一般用来做一些简单的测试。 具体安装步骤如下: 1.1 下载安装包…

JVM系列-1.初识JVM

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理🔥如果感觉博主的文…

C#实现基于Word保护性模板文件的修改

目录 制作一个保护性模板文件 给文件设置保护密码 设计模板内容 限制编辑 进一步的需求 范例运行环境 Office DCOM 配置 设计实现 进一步修改模板文件 设置和取消保护 遍历WORD内容控件 总结 制作一个保护性模板文件 在类似一些OA的自动化处理或审批类系统里&a…

VC++中使用OpenCV进行形状和轮廓检测

VC中使用OpenCV进行形状和轮廓检测 在VC中使用OpenCV进行形状和轮廓检测,轮廓是形状分析以及物体检测和识别的有用工具。如下面的图像中Shapes.png中有三角形、矩形、正方形、圆形等,我们如何去区分不同的形状,并且根据轮廓进行检测呢&#…

【Git】常用的Git操作集合

常用的Git操作集合 1. 分支操作1.1 查看本地所有分支git branch 1.2 查看所有分支(包含本地远程仓库)git branch -a 1.3 切换分支git checkout test 2. 常用基本操作2.1 查看 git 各存储区内(文件)状态git status 2.2 查看工作区与暂存区文件差异git dif…

【记录】解决 git 仓库突然出现连接失败

问题描述 今天在 push 代码代码的时候突然发现无法 push(但是我可以正常打开 Gihub),这可不行,我可是 git 的重度使用者😍,我所有的代码都托管在了 Github 上,没有它我的日子怎么活啊!!&#x…

2024最新版Python 3.12.1安装使用指南

2024最新版Python 3.12.1安装使用指南 Installation and Configuration Guide to the latest version Python 3.12.1 in 2024 By Jackson Python编程语言,已经成为全球最受欢迎的编程语言之一;它简单易学易用,以标准库和功能强大且广泛外挂…

C++-类和对象(3)

1. 再谈构造函数 1.1 构造函数体赋值 我们在创建一个对象时,编译器会调用该对象的构造函数对该对象的成员进行初始化。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _month;int _day…

【SpringCloud Alibaba】 介绍及微服务模块搭建

文章目录 SpringCloud Alibaba 介绍主要功能组件 微服务环境搭建案例准备技术选型模块设计微服务调用 创建父工程创建基础模块1、创建 shop-common 模块2、创建实体类 创建用户微服务1、创建pom.xml2、编写主类3、创建配置文件 创建商品微服务1、创建一个名为 shop-product 的模…

圆的参数方程是如何推导的?

圆的参数方程是如何推导的? 1. 圆的三种参数表示2. 三角函数万能公式3. 回到圆的参数方程1. 圆的三种参数表示 已知圆的第一种参数方程为: x 2 + y 2 = r x^2+y^2=r x2+y2=r   圆的图像如下: 通过上图,不难理解,圆的参数方程还可以用三角函数表示,也就是第二种参数表…