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.hqwc.cn/news/422202.html

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

相关文章

如何无公网ip实现SSH远程访问本地局域网openEuler系统?

文章目录 1. 本地SSH连接测试2. openEuler安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 欧拉操作系统(openEuler, 简称“欧拉”)是面向数字基础设施的操作系统,支持服务器、云计算、边缘openEuler是面向数字基础设施的操作系…

Linux与windows互相传输文件之rzsz命令

文章目录 关于rzsz安装软件使用命令方法一:直接拖拽方法二:直接在终端输入rz 关于rzsz 这个工具用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件 安装完毕之后可以通过拖拽的方式将文件上传过去 首先看一下我们的机器可以使用网络吗&#xff…

python强大的hook函数

什么是hook? 钩子函数(hook function),可以理解是一个挂钩,作用是有需要的时候挂一个东西上去。具体的解释是:钩子函数是把我们自己实现的hook函数在某一时刻挂接到目标挂载点上。 hook应用场景&#xff…

SCT9431FSAR:3.8V-36V输入,3A同步降压DCDC转换器,具有EMI降低功能;替代AP63356/7

• 3.8V-36V宽输入电压 • 高达3A的连续输出负载电流 • EMI降低 o 专有的门设计,用于交换节点无振铃 o 扩频(FSS) • 轻负载条件下具有22uA静态电流的脉冲跳过模式(PSM) o 在1mA轻负载下效率高达79% o 在10mA轻负载…

负载均衡-Ribbon-自定义负载均衡算法

1.Ribbon 是什么 SpringCloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具主要功能是提供客户端的软件负载均衡算法,将 Netflix 的中间服务处连接在一起Ribbon的客户端组件提供一系列完整的配置项,如:连接超时、重试等。简…

AlmaLinux 8.9 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任,图解仅供参考,请悉知!本次安装图解是在一个全新的演示环境下进行的,演示环境中没有任何有价值的数据,但这并不代表摆在你面前的环境也是如此。生产环境…

「优选算法刷题」:在排序数组中查找元素的第一个和最后个位置

一、题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&a…

Go 的 Http 请求系统指南

文章目录 快速体验请求方法URL参数响应信息BodyStatusCodeHeaderEncoding 图片下载定制请求头复杂的POST请求表单提交提交文件 CookieClient 上设置 Cookie请求上设置 Cookie 重定向和请求历史超时设置总超时连接超时读取超时 请求代理错误处理总结 前几天在 “知乎想法” 谈到…

【英文干货】【Word_Search】找单词游戏(第1天)

本期主题:Mindfulness(意识力) 本期单词: Awareness 意识 Breathing 呼吸 Calm 平静的 De-Stress 减压 Feelings 感受,情感 Inspection 调查 Meditation 冥想 Peace 和平 Quiet 安静的 Recollection 回忆 R…

2.【SpringBoot3】用户模块接口开发

文章目录 开发模式和环境搭建开发模式环境搭建 1. 用户注册1.1 注册接口基本代码编写1.2 注册接口参数校验 2. 用户登录2.1 登录接口基本代码编写2.2 登录认证2.2.1 登录认证引入2.2.2 JWT 简介2.2.3 登录功能集成 JWT2.2.4 拦截器 3. 获取用户详细信息3.1 获取用户详细信息基本…

SDCMS靶场通过

考察核心:MIME类型检测文件内容敏感语句检测 这个挺搞的,一开始一直以为检查文件后缀名的,每次上传都失败,上传的多了才发现某些后缀名改成php也可通过,png图片文件只把后缀名改成php也可以通过,之前不成功…

代码随想录算法训练营29期|day27 任务以及具体安排

39. 组合总和// 剪枝优化 class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> res new ArrayList<>();Arrays.sort(candidates); // 先进行排序backtracking(res, new ArrayList&…