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

news2024/10/5 14:22:02

 相关阅读

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.coloradmin.cn/o/1403284.html

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

相关文章

【Redis】更改redis中的value值

今天继续进步一点点~~ 背景:今天有个前端的同事问我,能不能在Redis中他本人登录公众号的 sessionID 加上一列openID 于是我上网查了一堆在Redis里面的命令,以及不同的客户端怎么输入命令,但是后来问了下同事,他就给我…

压缩字符串

#include <iostream> using namespace std; int main() {// 请在此输入您的代码string a;int f 1, count;cin >> a;for (int i 0; a[i]; i) {if (a[i] a[i 1]) {f 0; count 1;for (i; a[i] a[i 1]; i)count 1;cout << a[i] << count;}if (cou…

vivado JTAG链、连接、IP关联规则

JTAG链 这列出了定义板上可用的不同JTAG链。每个链都列在下面<jtag_chain>以及链的名称&#xff0c;以及定义名称和链中组件的位置&#xff1a; <jtag_chains> <jtag_chain name"chain1"> <position name"0" component"part0…

RK3568笔记十:Zlmediakit交叉编译

若该文为原创文章&#xff0c;转载请注明原文出处。 编译Zlmediakit的主要目的是想实现在RK3568拉取多路RTPS流&#xff0c;并通过MPP硬解码&#xff0c;DRM显示出来。为了实现拉取多路流选择了Zlmediakit,使用FFMEPG也可以&#xff0c;在RV1126上已经验证了可行性。 一、环境…

《Linux高性能服务器编程》笔记05

Linux高性能服务器编程 本文是读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 参考 Linux高性能服务器编程源码: https://github.com/raichen/LinuxServerCodes 豆瓣: Linux高性能服务器编程 文章目录 Linux高性能服务器编程第12章 高性能I/O框架库Libevent12.1 I/…

线程池--JAVA

虽然线程是轻量级进程&#xff0c;但是如果当创建和销毁的的频率非常之高&#xff0c;那么它也就会消耗很多的资源。 而线程池就是用来优化线程频繁创建和销毁的场景&#xff0c;减少线程创建、销毁的频率。 ExecutorService JAVA标准库为我们实现了线程池&#xff0c;Execu…

(二十四)Kubernetes系列之Helm3

Helm为kubernetes的包管理工具&#xff0c;就像Linux下的包管理器&#xff08;yum/apt等&#xff09;&#xff0c;可以很方便的将之前打包好的yaml文件部署到kubernetes上。 1.安装访问地址&#xff1a;https://github.com/helm/helm/releases 点击查看最新的版本&#xff0c…

【C/C++】C/C++编程——为什么学习 C++?

当提到C的时候&#xff0c;很多人会觉得语法复杂、学习曲线陡峭&#xff0c;并且好像与C语言还有点"纠缠不清"。尽管如此&#xff0c;C仍然是当今世界上最受欢迎和最有影响力的编程语言之一。特别是在当今快速发展的人工智能&#xff08;AI&#xff09;领域&#xff…

性能利器Caffeine缓存全面指南

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;今天咱们聊聊Caffeine缓存&#xff0c;小黑在网上购物&#xff0c;每次查看商品都要等几秒钟&#xff0c;那体验肯定不咋地。但如果用了缓存&#xff0c;常见的商品信息就像放在口袋里一样&#xff0c;随时取用&…

python:socket基础操作(1)-《环境准备介绍》

我这里的环境是在真机上下载了一个 pycharm 进行编写 并且还开了两台虚拟机 一台为win7 下载了一个网络调试助手&#xff0c;因为等会编写的时候分为客户端和服务端&#xff0c;当我们编写了客户端或者服务端&#xff0c;可以用图形化的网络调试助手去当对象&#xff0c;图形化…

【Linux】常见指令(一)

前言: Linux有许多的指令&#xff0c;通过学习这些指令&#xff0c;可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…

JVM实战篇:GC调优

目录 一.GC调优的核心指标 1.1吞吐量&#xff08;Throughput&#xff09; 1.2延迟&#xff08;Latency&#xff09; 1.3内存使用量 二.GC调优的方法 2.1监控工具 Jstat工具 VisualVm插件 Prometheus Grafana 2.2诊断原因 GC日志 GC Viewer GCeasy 2.3常见的GC模…

Java:扫码登录

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、需求背景 二、问题分析 三、对比APP和打印机设备的特点 四、设计 五、编码 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、…

网络要素服务(WFS)详解

文章目录 1. 概述2. GetCapabilities3. DescribeFeatureType4. GetFeature4.1 Get访问方式4.2 Post访问方式 5. Transaction5.1 Insert5.2 Replace5.3 Update5.4 Delete 6 注意事项 1. 概述 前置文章&#xff1a; 地图服务器GeoServer的安装与配置 GeoServer发布地图服务&#…

洛谷P2911 [USACO08OCT] Bovine Bones G(C语言)

看到这么小的数据范围&#xff0c;那当然是暴力枚举啦&#xff01;况且这还是入门题&#xff0c;怎么可能如此难为我这种萌新呢。 我的思路是用数组下标来记录次数 ch[ijq]; 这就是用三个数的和当做下标 然后后面就是遍利数组找出要的值 # include <stdio.h> int main …

Windows 下ffmpeg安装及实践

Windows 下ffmpeg安装及实践 背景安装实践其他 背景 最近负责音频文件处理相关的业务&#xff0c;涉及到 ffmpeg 对一些音频文件格式的校验&#xff0c;记录一下安装过程及踩坑过程。 安装 如图1所示&#xff0c;进入官网&#xff0c;在windows下任选一个文件&#xff1a;h…

七、文件与目录操作

一、文本文件读写 文件打开方式QIODevice::ReadOnly 以只读方式打开 QIODevice::QriteOnly 以只写方式打开 QIODevice::ReadWrite 以读写方式打开 QIODevice::Append 新增加的内容将被追加到文件末尾 QIODevice::Truncate 以重写的方式打开&#xff0c;原有内容会被删除 QI…

makefile 编译动态链接库使用(.so库文件)

makefile 编译动态链接库使用&#xff08;.so库文件&#xff09; 动态链接库:不会把代码编译到二进制文件中&#xff0c;而是在运行时才去加载&#xff0c; 好处是程序可以和库文件分离&#xff0c;可以分别发版&#xff0c;然后库文件可以被多处共享 动态链接库 动态&#…

java servlet 学生成绩查询管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web学生成绩查询管理系统是一套完善的java web信息管理系统 采用servlet dao bean&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

插混、增程、纯电为什么说纯电是未来的趋势

技术路线&#xff1a;插混、增程、纯电趋势判断 新能源汽车目前有纯电动、增程式、插电式3 种主流技术路径&#xff0c;其中增程式和插电式均为混动技术。纯电动汽车是指以动力电池为动力&#xff0c;用电机驱动车轮行驶&#xff1b;混动技术分为串联、并联、混联3 种模式&…