当前位置: 首页 > news >正文

数字集成电路设计(二、Verilog HDL基础知识)

文章目录

  • 1. 语言要素
    • 1.1 空白符
    • 1.2 注释符
    • 1.3 标识符
      • 1.3.1 转义标识符
    • 1.4 关键字
    • 1.5 数值
      • 1.5.1 整数及其表示方式
      • 1.5.2 实数及其表示方式
      • 1.5.3 字符串及其表示方式
  • 2. 数据类型
    • 2.1 物理数据类型
      • 2.1.1 连线型
      • 2.1.2 寄存器型
    • 2.2 连线型和寄存器型数据类型的声明
      • 2.2.1 连线型数据类型的声明
      • 2.2.2 寄存器型数据类型的声明
    • 2.3 物理数据类型的声明举例
    • 2.4 存储器型
    • 2.5 抽象数据类型
  • 3. 运算符
    • 3.1 算术运算符
    • 3.2 关系运算符
    • 3.3 相等关系运算符
    • 3.4 逻辑运算符
    • 3.5 按位运算符
    • 3.6 归约运算符(缩位运算符)
    • 3.7 移位操作运算符
    • 3.8 条件运算符
    • 3.9 连接和复制运算符
  • 4. 模块
    • 4.1 模块的基本概念
    • 4.2 端口
      • 4.2.1 端口的定义
      • 4.2.2 模块引用时端口的对应方式


  • Verilog来源于C语言,后面会发现它的语法集和C语言几乎完全一样,但是设计方法和C语言完全不一样

1. 语言要素

1.1 空白符

空白符包括空格符(\b)、制表符(\t)、换行符和换页符。空白符使代码看起来结构清晰阅读起来更方便。在编译和综合时,空白符被忽略。
在这里插入图片描述

1.2 注释符

  • 和C语言完全一样
    (1)单行注释:单行注释以“//”开始,Verilog HDL 忽略从此处到行尾的内容。
    (2)多行注释:多行注释以“/*”开始,到“*/”结束,Verilog HDL忽略其中的注释内容
    在这里插入图片描述
    在这里插入图片描述
  • 多行注释不允许嵌套,但是单行注释可以嵌套在多行注释中

1.3 标识符

  • 它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。应该注意的是,标识符的字母区分大小写,并且第一个字符必须是字母或者下划线。
    在这里插入图片描述

1.3.1 转义标识符

  • Verilog HDL 规定了转义标识符(Escaped Identifier)。采用转义标识符可以在一条标识符中包含任何可打印的字符。转义标识符以“\”(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。
    在这里插入图片描述

1.4 关键字

  • Verilog HDL语言内部已经使用的词称为关键字或保留字,它是 Verilog HDL语言内部的专用词,是事先定义好的确认符,用来组织语言结构。
  • 用户不能随便使用这些关键字。需注意的是,所有关键字都是小写的
  • 例如,ALWAYS 不是关键字,它只是标识符,与always(关键字)是不同的
    在这里插入图片描述

1.5 数值

  • Verilog有四种基本的逻辑数值状态
    在这里插入图片描述

1.5.1 整数及其表示方式

在这里插入图片描述

  • 整数的表示形式为如下:
    +/-<size><baseformat><number>
    (1)“+/-”是正数和负数标示
    (2)size 指换算过后的二进制数的宽度
    (3)“ ’ ”为基数格式表示的固有字符
    (4)base_format 是其基数符号
    (5)number是可以使用的数字字符集,形式上是相应进制格式下的一串数值

  • 需要注意
    (1)在位宽和字符之间以及进制和数值之间可以有空格,但数字之间不能有空格,下面的情况是允许的
    在这里插入图片描述
    (2)下面的情况是不允许的

在这里插入图片描述

1.5.2 实数及其表示方式

  • 在硬件描述语言中,没有实数。想要表示一个带小数点的数字只能用定点(小数点位置固定)或者浮点的表示方法,把小数变成整数
  • 电路设计中,没有传统意义的实数概念。**但是HDL为什么规定这个方式,是用在测试和仿真中间。**不能用在设计。
  • 实数有两种表示方法:
    (1)十进制表示法。采用十进制格式,小数点两边必须都有数字,否则为非法的表示形式。例如:3.0、4.54、0.2 等都是正确的,而5.是错误的。
    (2)科学计数法。例如:564.2e2 的值为 56420.0,8.7E2 的值为870.0(e 不分大小写)3E-3的值为0.003。
    在这里插入图片描述

1.5.3 字符串及其表示方式

  • 字符串是指用双引号括起来的字符序列,它必须包含在同一行中,不能分行书写。若字符串用作 Verilog HDL表达式或赋值语句中的操作数则字符串被看做8位的ASCII值序列,即一个字符对应8位的ASCII值。例如"hello world"和"Anexample for Verilog HDL"是标准的字符串类型。

2. 数据类型

  • 这是一个新的概念,因为在HDL中,我们面对的是数字电路,数字电路就会有一个能力的问题(并不是以电压来衡量,是以电流来衡量),所以根据电流驱动能力的强弱,分成了以下等级:
    在这里插入图片描述
  • supply:导线直接连接
  • strong:上拉电阻接到电源
  • pull:上拉电阻比strong的上拉电阻要大
  • large:大容性,有存储的功能
  • weak:电流非常小
  • medium:电流更小一点
  • small:小容性
  • highz:高阻态,直接断开

2.1 物理数据类型

2.1.1 连线型

在这里插入图片描述

  • 最常用的是wire和tri,wire表示的是0,1和不定状态(X)。tri成为三态,包括了0,1,不定状态(X)和高阻状态(Z)
  • wor也是一种连线型的变量,但是它解决的问题是两个线对一个线进行驱动,实际上是在两个线中间增加了一个或门
  • 功能
    (1)wire和tri
    在这里插入图片描述
    (2)wor和trior(带有一定逻辑功能,线或)
    在这里插入图片描述
    (3)wand和triand(带有一定逻辑功能,线或)
    在这里插入图片描述

2.1.2 寄存器型

  • 在数字电路设计过程中,经常会遇到组合电路和时序电路,组合电路就是连线型的变量和时序电路就是带有寄存器功能的,叫做reg类型
  • reg型数据与 wire型数据的区别在于,reg 型数据保持最后一次的赋值,而wire型数需要有持续的驱动。
  • 一般情况下,reg 型数据的默认初始值为不定值 x,缺省时的位宽1 位。
    在这里插入图片描述
  • reg 型变量一般为无符号数,若将一个负数赋给 reg 型变量,则自动转换成其二进制补码形式
    在这里插入图片描述

2.2 连线型和寄存器型数据类型的声明

2.2.1 连线型数据类型的声明

  • 缺省的连线型数据的默认类型为1位(标量)wire类型。
  • Verilog HDL禁止对已经声明过的网络、变量或参数再次声明。
  • 连线型数据类型声明的一般语法格式如下:
    在这里插入图片描述
    (1)net_declaration: 表示网络型数据的类型,可以是 wire、tri、tri0、tr1、wand、triand.trior、wor、trireg 中的任意一种。对于 trireg 类型,其声明还有一个 charge_strength(电荷强度)的可选项
    (2)range:用来指定数据为标量或矢量。若该项默认,表示数据类型为1位的标量,超过1位则为矢量形式。
    (3)delay:指定仿真延迟时间
    (4)list_of_variables: 变量名称,一次可定义多个名称,之间用逗号分开

2.2.2 寄存器型数据类型的声明

在这里插入图片描述

  • range为可选项,它指定了 reg 型变量的位宽,缺省时为1位
  • list_of_register_variables:变量名称列表,一次可以定义多个名称,之间用逗号分开
  • 它只表示一个存储,没有驱动强度这样的概念

2.3 物理数据类型的声明举例

在这里插入图片描述

2.4 存储器型

  • 存储器型变量可以描述 RAM 型、ROM 型存储器以及 reg 文件
  • 存储器型变量的一般声明格式:
    在这里插入图片描述
    (1)range1:表示存储器中寄存器的位宽,格式为[msb:lsb]。
    (2)range2:表示寄存器的个数,格式为[msb:lsb],即有 msb-lsb+1个。
    (3)name_of_register:变量名称列表,一次可以定义多个名称,之间用逗号分开

在这里插入图片描述
在这里插入图片描述

  • 一个 n 位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行。例如,对于上例可以进行“rega=0;”的赋值操作,而不能进行“meml=0”的赋值操作
  • 如果想对存储器中的存储单元进行读写操作,则必须指定该单元在存储器中的地址

在这里插入图片描述

2.5 抽象数据类型

  • 除了物理数据类型外,Verilog HDL 还提供了以下几种抽象数据类型:整型(integer)时间型(time)、实型(real)及参数型(parameter)。它们只是纯数学的抽象描述,不能够与实际的硬件电路相映射。

3. 运算符

  • 运算符在Verilog起到了很大的作用,它代表着电路,这是一个很重要的内容
    在这里插入图片描述
  • 会牵扯到两个概念:
    (1)优先级是什么(保留了和其他高级语言相类似的运算符优先级)
    (2)功能是什么

3.1 算术运算符

  • Verilog HDL中常用的算术运算符主要有五种,分别是加法(+)减法(-)乘法(*)除法(和取模(%)。
  • 这五种运算符都属于双目运算符。符号“+”、“-”、“*”、“/”分别表示常用的四则运算。%是取模运算,如“6%3”的值为 0,“7%4”的值为3。
  • 需要注意:
    (1)在赋值语句下,算术操作结果的长度由操作左端的目标长度决定。
    (2)有符号数和无符号数的使用。当信号位宽不同的时候,表征的数是不一样的,希望尽可能采用无符号数作为设计的基础。
    在这里插入图片描述
  • 可以看到Verilog对运算符的处理很特殊,一直在考虑输入位宽和输出位宽(加法器就是两路数进去出来一路数,只和数据位宽有关系),HDL更注重于描述运算符的结构特性
  • !!加法和减法是可以直接进行综合的,也就是说当我们使用这个符号的时候,我们的设计工具就会给我们设计一个加法电路或者减法电路,换句话说,加法电路和减法电路其实是一样的,所谓的减法电路就是加法电路加上一个负数
  • !!乘法在早期是尽可能避免的,因为综合工具支持的不好,但是现在EDA对乘法支持非常好,所以我们可以用这个符号去生成一个乘法电路
  • !!除法和取模目前EDA工具支持的不好,但是如果工艺库里面有除法和取模电路,就可以用符号去做
  • 可以利用MATLAB集成了算法的运算,也就是当我们把数学模型写进去之后,MATLAB可以直接生成我们所需要的Verilog代码,这样就更加提高了对操作算法的支持程度
  • !!算术运算符是整个Verilog运算符中间最复杂的,其他的都和我们的数字电路基本电路是对应的

3.2 关系运算符

  • 关系运算符也是双目运算符,是对两个操作数的大小进行比较。关系运算符有大于(>)小于(<)、大于等于(>=)和小于等于(<=)几种(还包括了相等运算符中的等于(==)和全等于(===))
  • 关系运算符就是成立输出1,不成立输出0,也就是结果应该是一个1bit的信号
    在这里插入图片描述
  • 第四个在电路中间不会遇到这个问题,因为数字电路对于不定态的管理非常严格(产生不定态的两种情况,一种是信号悬空,一种是两个信号驱动同一个信号,这两种情况对于可靠的数字电路来讲是不会出现的)
  • Verilog规定任何数和不定值的比较都会是一个不定值

3.3 相等关系运算符

  • 相等关系运算符是对两个操作数进行比较,比较的结果有三种:真(1)、假(0)和不定值(x)。Verilog HDL 语言中有四种相等关系运算符等于(==)、不等于(!=)、全等(===)、非等(!==)
  • 和关系运算符是一样的东西,只不过它比较的是相等
  • Verilog的相等运算符有四种,比较结果有三种“1”,“0”,“X”
    在这里插入图片描述
    (左边表的第一列第一个应该是0)
  • 这四种运算符都是双目运算符,要求有两个操作数。并且,这四种相等运算符的优先级别是相同的
  • “==”和“!”称为逻辑等式运算符,其结果由两个操作数的值决定,由于操作数中某些位可能是不定值x和高阻态值z,所以结果可能为不定值x
  • “===”和“!==”运算符则不同,它是对操作数进行按位比较,两个操作数必须完全一致,其结果才是 1,否则为 0。但是,若两个操作数对应位出现不定值 x 和高阻值 ,则可认为是相同的
  • 大部分用的还是”==“,对“===”的理解是为了避免计算产生了不定态一直传播。而且“===”可以做信号长度的比较,当两个信号值相同长度不同时,“==”会输出1,而“===”会输出0,但是为什么经常用的是“==”,这是因为在电路设计的时候是不允许不同位宽的信号进行比较的。第二个是在可靠的设计中间是不允许不定值和高阻进行比较的

3.4 逻辑运算符

  • 逻辑运算符有三种,分别是逻辑与运算符(&&)、逻辑或运算符(||)、逻辑非运算符(!)其中逻辑与和逻辑或是双目运算符,逻辑非为单目运算符
  • 逻辑运算符其实也表征的是一个“1”或者“0”的概念,如果是“0”表征的是逻辑非(0电平),如果是非零就是逻辑真(高电平)
    在这里插入图片描述
  • !关系运算符和比较运算符代表数字电路中的数字比较器(数字比较器可以表示不等或者相等)
  • 逻辑运算符非对应的电路如下
    在这里插入图片描述
  • 需注意的是,若操作数中存在不定态 x,则逻辑运算的结果也是不定态,例如:a 的初值为4’b1100,b的初值为4‘b01x0,则!a=0,!b=x,a&&b=x,alb=x

3.5 按位运算符

  • 按位取反(~),按位与(&),按位或(|),按位异或(^),按位同或(^~)

在这里插入图片描述

3.6 归约运算符(缩位运算符)

  • 归约运算符按位进行逻辑运算,属于单目运算符。由于这一类运算符操作的结果是产生1位逻辑值,因而被形象地称为缩位运算符。
  • 归约运算符包括与(&),或(|),异或(^)以及相应的非操作~&、~|、~^、^~
  • 归约运算符就是为了解决一个信号里面的一串信号中间的运算
    在这里插入图片描述

3.7 移位操作运算符

  • 移位运算符有两种:左移位运算符(<<)右移位运算符(>>)
  • 运算过程是将边(右边)的操作数向左(右)移,所移动的位数由右边的操作数来决定,然后用0来填补移出的空位
  • 思考:为什么只有两个,而没有C语言当中那么多循环移等操作
    在这里插入图片描述
  • 这个操作符用的不多,为什么等下面来讲

3.8 条件运算符

  • 条件运算符是 Verilog HDL 里唯一的三目运算符,它根据条件表达式的值来选择执行达式,其表达形式为:
    在这里插入图片描述
  • 条件表达式的计算结果有真(1)、假(0)和不定态(x)三种。当条件表达式的结果为真时执行表达式1,当条件表达式的结果为假时,执行表达式 2
  • 如果条件表达式的结果为不定态 ,则模拟器将按位对表达式1的值与表达式2的值进行比较,位与位的比较按表 2.3-7 的规则产生每个结果位,从而构成条件表达式的结果值
    在这里插入图片描述
  • 条件运算符举例:
    在这里插入图片描述
  • 若该数据选择器的sel端为不定态x,则out 由in1和i2按位运算的结果得出。若in1=4’b0011,in2=4’b0101,则按照上述真值表得出 out=4’b0xx1。

3.9 连接和复制运算符

  • !!前面说移位运算符是不重要的一个运算符,因为连接和复制运算符能够得到更好的结果
  • Verilog HDL语言中还有两个特殊的运算符:连接运算符({})和复制运算符({{}})
  • 连接运算符是把位于大括号({})中的两个或两个以上信号或数值用逗号(,)分隔的小表达式按位连接在一起,最后用大括号括起来表示一个整体信号,形成一个大的表达式。
  • 重复运算符({{}})将一个表达式放入双重花括号中,复制因子放在第一层括号中。它为复制一个常量或变量提供了一种简便方法
  • 首先明确一点,这个操作没有对应的电路,只是重新定义
    在这里插入图片描述

4. 模块

4.1 模块的基本概念

  • 模块(module)是 Verilog HDL语言的基本单元
  • 代表一个最基本的功能模块,语法中代表一段程序,电路中每个模块代表一个电路
    在这里插入图片描述
  • 一个模块主要包括模块的开始与结束、模块端口定义、模块数据类型说明和模块逻辑功能描述几个基本部分
  • 例:上升沿D触发器的Verilog描述:
    在这里插入图片描述
  • 例:上升沿D触发器的硬件:
    在这里插入图片描述

4.2 端口

4.2.1 端口的定义

  • 端口是模块与外界或其它模块沟通的信号线。模块的端口可以是输入端口(input)、输出端口(output)或双向端口(inout)。
  • 缺省状态下,端口类型都将默认为 wire 类型

4.2.2 模块引用时端口的对应方式

  • 在引用模块时其端口可以用如下两种方法连接
    (1)在引用时,严格按照模块定义的端口顺序来连接,不用标明源模块定义时规定的端口名。
    在这里插入图片描述
    (2)在引用时用“”标明源模块定义时规定的端口名。
    在这里插入图片描述

相关文章:

python导入安装包

主要分两种方式&#xff1a;在线安装和离线安装 在线安装 因为我公司开发是在云桌面&#xff0c;里面是没有外网的。之前是只能离线安装&#xff0c;后面搭了一个内部镜像环境。 1.添加配置文件进行换源 2.检查requirements.txt配置 3.直接使用pycahrm工具install 换源 …...

POJ - 2406 Power Strings next数组应用循环节

题目链接&#xff1a;点击查看 Language:Default Power Strings Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 61784 Accepted: 25534Description Given two strings a and b we define a*b to be their concatenation. For example, if a "abc" and…...

JS中 [] == ![]结果为true,而 {} == !{}却为false, 追根刨底

转载自 JS中 [] ![]结果为true&#xff0c;而 {} !{}却为false&#xff0c; 追根刨底 console.log( [] ![] ) // true console.log( {} !{} ) // false 在比较字符串、数值和布尔值的相等性时&#xff0c;问题还比较简单。但在涉及到对象的比较时&#xff0c;问题就变…...

Spring Boot 自动配置的 “魔法” 是如何实现的?

转载自 Spring Boot 自动配置的 “魔法” 是如何实现的&#xff1f; Spring Boot是Spring旗下众多的子项目之一&#xff0c;其理念是约定优于配置&#xff0c;它通过实现了自动配置&#xff08;大多数用户平时习惯设置的配置作为默认配置&#xff09;的功能来为用户快速构建出…...

每天五分钟机器学习:超平面分离定理和凸优化

凸集和凸函数 在点集拓扑学与欧几里得空间中,凸集是一个点集,其中每两点之间的直线上的点都落在该点集中。如下所示: 函数任意两点(x,f(x))和(y,f(y))连线上的值大于(x,y)区间内任意一点m的值f(m),那么这个函数就是一个凸函数: 超平面分离定理 空间中存在两类样本,…...

AcWing 848. 有向图的拓扑序列

原题链接&#xff1a;AcWing 848. 有向图的拓扑序列 给定一个 n 个点 m 条边的有向图&#xff0c;点的编号是 1 到 n&#xff0c;图中可能存在 重边 和 自环 。 请输出任意一个该有向图的拓扑序列&#xff0c;如果拓扑序列不存在&#xff0c;则输出 −1。 若一个由图中所有点…...

数论一些小总结

1.对于任意一个素数p, n!中含有p的个数为 (n/p n/p^2 n/p^3 ......). 2.c(n,k) n! / ( k! * (n-k)! ). 3.c(n,k)(n-k1)/k*c(n,k-1). 4.任意一个数n可以写成若干个素数的乘积&#xff0c;即 p1^a1 * p2^a2*......*pn^an&#xff0c; 它的的约数的个数为 (a11)*(a21)*..…...

Spring MVC竟然有5种参数绑定的方式?你知道几种?

转载自 Spring MVC竟然有5种参数绑定的方式&#xff1f;你知道几种&#xff1f; SpringMVC参数绑定&#xff0c;简单来说就是将客户端请求的key/value数据绑定到controller方法的形参上&#xff0c;然后就可以在controller中使用该参数了下面通过5个常用的注解演示下如何进行参…...

接口测试那些事儿

什么是接口&#xff1f; 首先&#xff0c;在讲接口测试之前&#xff0c;我们先要搞清楚接口类型的概念。 接口&#xff1a;可能是系统与系统&#xff08;包括服务与服务&#xff09;之间的调用&#xff0c;像A系统&#xff08;服务&#xff09;给B系统&#xff08;服务&#x…...

【C++笔试强训】第二十二天

&#x1f387;C笔试强训 博客主页&#xff1a;一起去看日落吗分享博主的C刷题日常&#xff0c;大家一起学习博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a;夜色难免微凉&#xff0c;前方必有曙光 &#x1f31e;。 &#x1f4a6;&a…...

数据中心典型测试场景浅析

数据中心概述 数据中心泛指拥有众多服务器的大型机房&#xff0c;通过利用通信运营商已有的互联网通信线路、带宽资源&#xff0c;建立标准化的数据中心机房环境&#xff0c;具有运行速度快、存储量大、安全性高等特点。数据中心东西向流量的占比更大&#xff0c;传统的园区网…...

mysql重置Root密码

方法一: 在my.ini的[mysqld]字段加入&#xff1a; skip-grant-tables 重启mysql服务&#xff0c;这时的mysql不需要密码即可登录数据库 然后进入mysql mysql>use mysql; mysql>更新 user set passwordpassword(新密码) WHERE Userroot; mysql>flush privileges; 运…...

Google Swift 与 DC 传输

网络拥塞&#xff0c;默认指转发节点出现了严重的排队现象&#xff0c;甚至队列溢出而丢包。、 但接收端也是一个统计复用系统(通用 OS 均为统计复用系统&#xff0c;比如 Linux)&#xff0c;但凡统计复用系统就是潜在拥塞点&#xff0c;即可套用排队论模型。 人们很少将最后…...

专精特新企业评价指标

&#xff08;一&#xff09;化指标&#xff08;满分25分&#xff09; 1. 上年度主营业务收入总额占营业收入总额比重&#xff08;5分&#xff09; 2. 近2年主营业务收入平均增长率&#xff08;10分&#xff09; 3. 从事特定细分市场年限&#xff08;5分&#xff09;&#xff0c…...

每天一个adb命令:wm命令详解

wm命令可以用于获取屏幕分辨率、像素密度等。 前提&#xff1a;Android4.3及以上 usage: wm [subcommand] [options]wm size [reset|WxH]wm density [reset|DENSITY]wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]wm size: return or override display size.wm density: overrid…...

idea插件开发入门

前言&#xff1a;最近想研究一款自动在idea中定位缺陷及发送JIRA的快捷工具&#xff0c;方便提升报自动化脚本的bug的效率。因为idea插件学习是必不可少了&#xff0c;沉淀小结如下。 idea插件开发入门插件用途工程创建配置文件Action实现开发语法常用对象常用方法运行效果打包…...

【DSP】【第五篇】RBL源代码分析

2022年11月7日 最近手头事情做完&#xff0c;闲下来&#xff0c;整理一下之前的笔记。本文关注的重点是&#xff0c;RBL是如何在EMIF接口下&#xff0c;自动搬运代码段的。随着理解的深入&#xff0c;以后会进行自纠和补充。 1. C6678、C6670的RBL代码调用关系 &#xff08;…...

Linux_gdb_进程概念

目录 进度条 学习过程 自主实现&#xff1a; Linux的git操作 .gitignore .git git add . git commit git push git log git status git pull 进度条 学习过程 首先创建源文件&#xff0c;这个源文件就是我们要写的进度条的定义 接下来&#xff0c;我们创建文件Ma…...

读王安石变法

今天早上读到王安石变法&#xff0c;王安的变法确实充满理想化。以现代金融的办法进行国家的经济改革。但最终却并未走向成功&#xff0c;其中值得我们反思。思想太过超前&#xff0c;在没有实际土壤的环境下&#xff0c;再好的策略都难免不可能实现&#xff0c;这让我想起来摩…...

2017 ICPC Asia Urumqi I. A Possible Tree 带权并查集

题目链接&#xff1a;https://nanti.jisuanke.com/t/40520 题解&#xff1a;因为他们都是联通的且只有唯一路径&#xff0c;所以不用管之前怎么连的&#xff0c;直接按照他给的查询&#xff0c;带权并查集判断即可 #include <bits/stdc.h> using namespace std; const …...

软件协会第01次活动第01次任务布置:typora文档编写markdown语法

文章目录1.标题级别2.纯文本形式粘贴3.划线3.1 上划线&#xff08;分割符&#xff09;3.2 中划线&#xff08;删除符&#xff09;3.3 下划线4.列表4.1 有序列表4.2 无序列表4.3 减少缩进4.4 增加缩进4.5 任务列表5.高亮6.引用7.代码框8.表格9.内联代码片10.图片10.1 插入图片10…...

基于数据驱动的接口自动化测试解决方案

总结一下我么项目中使用的基于数据驱动的接口自动化测试解决方案&#xff0c;仅供大家参考。1.接口框架设计结构 2.接口测试脚本设计原则 3.持续集成 这块用jenkins就可以了&#xff0c;就不介绍了&#xff0c;目前我们项目的集成规则介绍一下&#xff1a; 1.脚本job与应用对…...

胡扯推荐算法(协同)及其dome实现

文章目录前言推荐系统定义基本分类相似度计算欧式距离皮尔逊系数余弦相似度协同过滤案例数据定义相似度计算推荐svd奇异值分解优化完整代码总结前言 打瞌睡遇到送枕头的感觉真爽嘿嘿 BoyC啊 废话不多说&#xff0c;开始吧。 推荐系统定义 推荐系统(Recommendation System,…...

力扣 35. 搜索插入位置

目录 第一站 LeetCode 新手村 前言 35. 搜索插入位置 题目描述 解题思路 代码 总结 题目来源 第一站 LeetCode 新手村 前言 最近玩OJ赛&#xff0c;发现对算法的理解还需要更加扎实&#xff0c;code能力还可以进一步提升&#xff0c;所以做这样一个算法的系列文章&#…...

软件设计师--数据结构考点细节总结

视频2022软件设计师-提炼高频考点-个人学习过程的总结&#xff0c;仅供参考&#xff01;_哔哩哔哩_bilibili 目录 1&#xff0c;栈 2,二叉树 3&#xff0c;HUFFMAN 特点&#xff1a; 4&#xff0c;文件压缩比 5&#xff0c;拓扑排序 -- 有向无环图 6&#xff0c;查找 7…...

Vue项目实战——【基于 Vue3.x + NodeJS】实现的课程表排课系统四(MyMessageBox)动态组件的编写

文章目录Vue项目实战——【基于 Vue3.x NodeJS】实现的课程表排课系统四&#xff08;MyMessageBox&#xff09;MessageBoxMyButton实现点击功能Vue项目实战——【基于 Vue3.x NodeJS】实现的课程表排课系统四&#xff08;MyMessageBox&#xff09; MessageBox ⭐️本节重点&…...

JavaFX其他事件

一、其他事件 InputMethodEvent.InputMethodTextChanged 文本输入改变 ContextMenuEvent.CONTEXT_MENU_REQUESTED 上下文菜单请求 二、用法 node.setOnXX(event->{//do something });node.addEventFilter(XXEvent.XX, event -> {//do something});...

SpringBoot开启事务

Transactional 直接在想要启动事务的方法或者类上添加Transactional注解即可&#xff0c;在类上添加注解&#xff0c;默认类下的所有方法都会使用事务。 在类上添加注解 Transactional Service public class UserServiceImpl implements UserService { } 在方法上添加注解 …...

深入探索 Java 热部署

转载自 深入探索 Java 热部署 简介 在 Java 开发领域&#xff0c;热部署一直是一个难以解决的问题&#xff0c;目前的 Java 虚拟机只能实现方法体的修改热部署&#xff0c;对于整个类的结构修改&#xff0c;仍然需要重启虚拟机&#xff0c;对类重新加载才能完成更新操作。对…...

C++设计模式

管理变化&#xff0c; 提高复用 两种手段&#xff1a;分解 抽象 八大原则&#xff1a;https://blog.csdn.net/mmk27_word/article/details/108521903 重构技法&#xff1a; 静态 -> 动态 早绑定 -> 晚绑定 继承 -> 组合 编译时依赖 -> 运行时依赖 紧耦合 ->…...

spring boot深入及启动原理探究

围绕spring boot 的优点&#xff0c;本文我们来探究一下spring boot具体是如何实现这些特性的。 自动配置&#xff1a;针对很多Spring应用程序和常见的应用功能&#xff0c;Spring boot能自动提供相关配置&#xff1b;起步依赖&#xff1a;告诉Spring boot需要什么功能,它就能引…...

为什么大公司一定要使用DevOps

转载自 为什么大公司一定要使用DevOps 0 DevOps的意图 究竟什么是DevOps? 要想回答这个问题&#xff0c;首先要明确DevOps这个过程参与的人员是谁&#xff1f;即开发团队和IT运维团队&#xff01;那么&#xff0c;DevOps的意图是什么呢&#xff1f;即在两个团队之间&#…...

JfreeChart柱状图饼图

JfreeChart画出柱状图饼图的代码片段及详细的注释&#xff0c;附件为JfreeChart中文API一览表&#xff0c;和生成的柱状图&#xff0c;饼图图片 import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.C…...

【SSO单点登录】ticket+token+redis 实现sso单点登录 防重放、防盗用、防篡改

&#x1f373;引言 大家好&#xff0c;我是melo&#xff0c;sso篇断更很久了&#xff0c;本次带来 sso&#xff1a;tickettokenredis 的实现方案~ 最近断断续续冷面翻炒redis、MySQL、sso&#xff0c;知识大杂烩属于是hhh MySQL高级篇专栏 SSO单点登录专栏 Redis入门与实战 …...

自动装配的底层实现

public void autowire(Object o, Map<String, String> map) throws Exception { // 获得map 所有key Set<String> keys map.keySet(); // 获得Object中所有属性 // 获得Class对象 Class c o.getClass(); // 获得…...

C/C++ 时间知识总结

文章目录C/C 中时间的概念常用的时间库函数time()asctime()gmtime()ctime()localtime()mktime()strftime()difftime()C/C 获取当前&#xff08;本地&#xff09;时间的方法方法一方法二方法三方法四方法五C/C 中时间的概念 Unix 时间戳&#xff08;Unix timestamp&#xff09;…...

jdk安装

jdk下载 官网地址 https://www.oracle.com/java/technologies/downloads/#java8-windows 新建文件夹 我这里是在D盘下&#xff0c;新建java文件夹 然后java文件夹中再新建 jdk和jre文件夹&#xff08;我这里一般名字直接取当前下载的版本&#xff09; 安装 修改为我们刚…...

文件上传,你还存储在应用服务器?

文章目录前言一、准备工作1. 开通腾讯云对象存储服务2. 创建存储桶3. 密钥管理&#xff0c;创建密钥三、整合步骤1. 添加maven依赖2. yml文件增加配置3. 新建 COS 配置类4. 新建 COS 上传工具类5. 新建 Controller 上传接口6. 测试总结前言 嗨&#xff0c;大家好&#xff0c;我…...

Java异常打印输出中常见方法的分析

Java异常是在Java应用中的警报器&#xff0c;在出现异常的情况下&#xff0c;可以帮助我们程序猿们快速定位问题的类型以及位置。但是一般在我们的项目中&#xff0c;由于经验阅历等多方面的原因&#xff0c;依然有若干的童鞋在代码中没有正确的使用异常打印方法&#xff0c;导…...

Web渗透测试攻防之浅述信息收集

前言 众所周知渗透测试的本质是信息收集&#xff0c;在渗透测试中信息收集的质量直接关系到渗透测试成果的与否。在对系统进行渗透测试前的信息收集是通过各种方式获取所需要的信息&#xff0c;收集的信息越多对目标进行渗透的优势越有利。通过利用获取到的信息对系统进行渗透…...

【菜菜的sklearn课堂笔记】支持向量机-探索核函数在不同数据集上的表现

视频作者&#xff1a;菜菜TsaiTsai 链接&#xff1a;【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili 关于核函数在不同数据集上的研究甚少&#xff0c;谷歌学术上的论文中也没有几篇是研究核函数在SVM中的运用的&#xff0c;更多的是关于核函数在深…...

无人机和热成像

当它变得可见时&#xff0c;看不见的世界是一个令人惊叹的景象。 热成像就是这样&#xff0c;透过使用专门的摄影机和技术&#xff0c;使看不见的红外光谱可见。 我们周围那个无形的世界隐藏着什么&#xff0c;这是一个完整的隐藏世界。 图片来源&#xff1a;Keith Davis/热成像…...

Mybatis框架的详细介绍(基础版)

目录 1.什么是框架 2. Mybatis框架是什么&#xff1f; 3. 为什么要使用Mybatis框架 4. Mybatis的发展历程 5.使用Mybatis的前期准备 6.Mybatis框架使用的步骤 6.1 Mybatis的pom文件中你的依赖 6.2 Mybatis的主配置文件的详细介绍 7. 具体案例&#xff08;有详细注解&a…...

Java——数组的使用

Java数组的使用一、数组的基本概念1.数组的声明及初始化2.数组的访问及遍历二、操作数组1.数组拷贝2.数组排序三、不规则数组一、数组的基本概念 数组是一种数据结构&#xff0c;用来存储一类型值的集合。可以看成是相同类型元素的一个集合&#xff0c;再内存中是一段连续的的…...

【axios】二次封装——避免重复发送请求

axios 请求封装&#x1f6a9;前言&#x1f6a9;目的&#x1f6a9;文件结构&#x1f6a9;实现&#x1f4a8;请求拦截&#x1f4a8;响应拦截&#x1f4a8;取消重复发送请求&#x1f6a9;调用&#x1f6a9;前言 &#x1f6a9;&#x1f6a9;&#x1f6a9; &#x1f48e;个人主页: 阿…...

Mysql调优你不知道这几点,就太可惜了

转载自 Mysql调优你不知道这几点&#xff0c;就太可惜了 一、Mysql的逻辑分层 Mysql分为&#xff1a;连接层、服务层、引擎层、存储层。 当客户端向服务端发起操作请求的时候&#xff0c;执行过程是这样的&#xff1a; 1、客户端端与Mysql服务端的连接层建立连接&#xff…...

数据可视化之汽车销量,截止到2022年目前中国汽车保有量是3.02亿辆

汽车在我们日常生活中是必不可少的代步工具&#xff0c;随着中国的经济发展&#xff0c;截止到2022年目前中国汽车保有量是3.02亿辆&#xff0c;2021年全国新注册登记机动车就已达3674万辆。现在居民的生活越来越好&#xff0c;小编通过数据可视化分析整理了一些工业汽车的产销…...

【C++修炼之路】8. string类详解

每一个不曾起舞的日子都是对生命的辜负 C之string类本节目标1. string类概览1.1 string的由来1.2 string函数列表2.string常用接口1. 初始化2. string::npos3. c_str()4. 获取长度&#xff08;length、size)5. 容量&#xff08;size、capacity)6. 插入&#xff08;insert)7. 替…...

Unity中的AssetBundle

AssetBundle的概念 AssetBundle又称AB包&#xff0c;是Unity提供的一种用于存储资源的资源压缩包&#xff0c;是对Unity 初始Resources的一种扩展&#xff1b;一般使用的策略是把必须的资源和不需要更新的资源放在Resources文件夹下&#xff0c;其他的资源放在AssetBundle下面…...

Monaco Editor教程(十二):使用Marker来增加分词注释,标记,优化编辑器交互体验

前言 在编辑器中有很多交互&#xff0c;其中一种交互就是当鼠标放到一个class上&#xff0c;显示该类的定义&#xff0c;该类的行数&#xff0c;注释&#xff0c;这在monaco中很常见&#xff0c;有时这个class并不是在当前文件定义的&#xff0c;而是在其他未打开的文件中定义…...