Verilog基础:强度建模(一)
相关阅读
Verilog基础https://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 线网型信号的强度水平
强度名 | 强度等级 |
supply0 | 7 |
strong0 | 6 |
pull0 | 5 |
large0 | 4 |
weak0 | 3 |
medium0 | 2 |
small0 | 1 |
highz0 | 0 |
highz1 | 0 |
small1 | 1 |
medium1 | 2 |
weak1 | 3 |
large1 | 4 |
pull1 | 5 |
strong1 | 6 |
supply1 | 7 |
在表1中,有四类驱动强度: supply、strong、pull、weak,这些强度是门级建模的输出net信号和连续赋值语句的左值net信号所拥有的。
在表1中,还存在三类电荷储存强度:large、medium、small,只有在声明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的值有关)
下一章
Verilog基础:强度建模(二)-CSDN博客首先来说明一下什么叫信号拥有单个强度和确定值,其实如果一个net型信号拥有单个强度,那它一定拥有确定值。首先我们把上一章中的比例尺给出,如图4所示。下面举例说明单个强度和确定值的定义。https://blog.csdn.net/weixin_45791458/article/details/135704743?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22135704743%22%2C%22source%22%3A%22weixin_45791458%22%7D
相关文章:
Verilog基础:强度建模(一)
相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、强度建模基础 Verilog HDL提供了针对线网信号0、1、x、z的精准强度建模方式,这样可以允许将两个线网信号进行线与操作从而更加精确地描述出硬件行…...
Spring Boot各类变量的使用
文章目录 1. 变量类型2. 获取变量2.1 获取方式2.2 获取方法2.2.1 通过Value注入获取变量值2.2.2 System.genenv 获取变量值2.2.3 System.getProperty 获取变量值2.2.4 Environment 获取变量值2.2.5 ConfigurationProperties 获取变量值2.2.6 SpringApplication.run 程序启动参数…...
Hive管理UDF详解
大数据集群下,共有三种管理Hive UDF的方式,如下: 名称重启Hive服务Jar保存目录场景直接JAR配置需要HDFS开发辅助JARs目录配置需要本地目录防止意外覆盖文件可重载辅助JAR配置不需要本地目录频繁更新UDF场景{HIVE_HOME}/auxlib目录需要本地目录不建议{HIVE_HOME}/lib目录需要…...

bug笔记:解决 HTTP Error 500.30 - ASP.NET Core app failed to start
总结下后端部署windos iis环境net6版本,500.30问题报错的一种解决方案: 一、问题描述 二、解决方案 检查下是否安装了net6对应的环境,是否已经安装 然后在事件管理器>Windows日志>应用程序,里面查看详细异常记录 在iis下面…...
理解pytorch系列:transpose是怎么实现的
在PyTorch中,transpose()是一种操作,它交换张量中两个指定维度的位置。实现这一点的关键在于不实际移动数据,而是通过改变张量的元数据(包括步长(stride)和尺寸(size))来…...
Linux tftp命令教程:文件传输利器(附案例详解和注意事项)
Linux tftp命令介绍 tftp,全称为Trivial File Transfer Protocol(简单文件传输协议)。tftp是一个用于文件传输的客户端命令,用于从远程主机传输文件,包括一些非常简洁、通常嵌入的系统。 Linux tftp命令适用的Linux版…...
beego的模块篇 - task任务
利用该工具来定时的做一些任务,但是有些时候我们的进程内也希望定时的来处理一些事情,可以使用crontab。 1 任务计划 1.1 初始化一个任务 tk1 : task.NewTask("tk1", "0 12 * * * *", func(ctx context.Context) error { fmt.Pri…...
ThreadLocal工具类
ThreadLocal工具类 ThreadLocalUtil.java public class ThreadLocalUtil {static final ThreadLocal THREAD_LOCAL new ThreadLocal();public static <T> T get() {return (T) THREAD_LOCAL.get();}public static void set(Object value) {THREAD_LOCAL.set(value);}p…...

【c语言】扫雷(上)
先开一个test.c文件用来游戏的逻辑测试,在分别开一个game.c文件和game.h头文件用来实现游戏的逻辑 主要步骤: 游戏规则: 输入1(0)开始(结束)游戏,输入一个坐标,如果该坐…...
Java读取制表符文本转换为JSON
在Java开发中,处理各种数据格式是常见的任务。本文将介绍如何使用Java读取制表符文本文件,并将其转换为JSON格式,以便于后续的数据处理和分析。我们将使用Java中的相关库来实现这个过程,并提供详细的代码示例。 引言:…...
从C到C++:向面向对象过渡的技巧与诀窍
从C到C的过渡是一项对于程序员来说非常重要的转变。C是一种基于C语言的面向对象编程语言,它引入了许多新的概念和功能,如类、对象、继承和多态等。这些新的特性使得C在软件开发中更加灵活、可复用和易于维护。 下面是一些向面向对象过渡的技巧和诀窍&am…...

Vue3中动态组件使用
一,动态组件使用: 应用场景:动态绑定或切换组件 应用Vue3碎片: is 1.使用 a.组件A <div class"layout-base"><Button>红茶</Button> </div>a.组件B <div class"layout-base"&g…...

kubernetes工作负载-DamonSet
一、DemonSet的介绍 1、什么是DemonSet DaemonSet 控制器是用来保证在所有节点上运行一个 Pod 的副本当有节点加入集群时, 也会为他们新增一个 Pod。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。 简而言之…...

zabbix其他配置
自动发现 zabbix server 主动的去发现所有的客户端,然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数量多,zabbix server 登记耗时较久,且压力会较大。 systemctl disable --now firewalld setenforce 0 hostnamectl se…...

蓝桥杯备战 每日一题 (2)
今天的题目是回忆迷宫 这个题目我们来熟悉一下 弗洛伊德算法 的代码模板 弗洛伊德算法用来处理最短路径问题 弗洛伊德算法(Floyd’s algorithm)用于解决图中所有节点对之间的最短路径问题。算法的基本思路是通过逐步迭代更新节点对之间的最短路径长度&a…...

GetShell的姿势
0x00 什么是WebShell 渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权…...

workflow源码解析:ThreadTask
1、使用程序,一个简单的加法运算程序 #include <iostream> #include <workflow/WFTaskFactory.h> #include <errno.h>// 直接定义thread_task三要素 // 一个典型的后端程序由三个部分组成,并且完全独立开发。即:程序协议算…...
为何谷歌强制要求安装ssl证书?
在当今数字化的世界中,网络安全已成为至关重要的议题之一。作为全球最大的搜索引擎之一,谷歌一直在推动网络安全标准的提升。其强制要求网站安装SSL证书的决策引起了广泛关注。本文将深入探讨谷歌为何强制要求安装SSL证书,以及这一举措对互联…...

【刷题】 leetcode 2 .两数相加
两数相加 两数相加1 思路一 (暴毙版)2 思路二 (本质出发) 谢谢阅读Thanks♪(・ω・)ノ下一篇文章见!!!!!! 两数相加 我们来看…...
Webpack5入门到原理2:基本使用
Webpack 是一个静态资源打包工具。 它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去。 输出的文件就是编译好的文件,就可以在浏览器段运行了。 我们将 Webpack 输出的文件叫做 bundle。 功能介绍 Webp…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...