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

news2025/7/11 18:34:49

文章目录

  • 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)在引用时用“”标明源模块定义时规定的端口名。
    在这里插入图片描述

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

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

相关文章

深入了解海豚调度DolphinScheduler

深入了解海豚调度DolphinScheduler一、海豚调度介绍二、海豚调度特性三、建议配置四、名词解释五、模块介绍六、功能介绍1.项目首页2.工作流定义3.工作流实例4.任务实例5.任务定义七、任务类型1.SQL2.SPARK节点3.Apache Zeppelin八、集群部署1.前置准备工作2.准备 DolphinSched…

实现注册与登录模块

目录 1、加载依赖 2、实现jwt工具类jwtUtil类 3、实现config.filter.JwtAuthenticationTokenFilter类 4、配置config.SecurityConfig类 5、创建后端api之前对数据库进行修改 6、写API一共需要的三个地方 7、实现三个接口 8、验证用户登录用API调试 9、https://jwt.io/解…

MySQL表的增删查改(CRUD)

文章目录前言一、新增数据二、查询数据全列查询指定列查询表达式查询指定别名查询去重查询排序查询条件查询分页查询三、修改数据四、删除数据前言 CRUD代表: 增加(create) ,查询(retrieve) ,更新(update) ,删除(delete) 单词首字母。 一、新增数据 SQL使用insert关键字来表…

二叉搜索树、红黑树详解、红黑树高的应用、TreeMap的应用(图文详解)-Kotlin版本代码

二叉搜索树 何为二叉搜索树&#xff1f; 二叉搜索树是一种特殊的二叉树&#xff0c;它的左子节点总是小于或等于根节点&#xff0c;而右子节点 总是大于或等于根节点。 如下图&#xff0c;即是一颗二叉搜索树。 对于二叉搜索树来说&#xff0c;中序遍历可以遍历按照节点值…

【JavaSE】重载和重写

前言&#xff1a; 作者简介&#xff1a;爱吃大白菜1132 人生格言:纸上得来终觉浅&#xff0c;绝知此事要躬行 如果文章知识点有错误的地方不吝赐教&#xff0c;和大家一起学习&#xff0c;一起进步&#xff01; 如果觉得博主文章还不错的话&#xff0c;希望三连支持&#xff01…

python--敲击木鱼积累功德小项目(更新版(2))

前言&#xff1a;前几天上课闲着没事写了一个python敲击木鱼积累功德的小项目&#xff0c;当时纯粹就是写着玩&#xff0c;回顾一下鼠标事件的东西还记不记得&#xff0c;发现这个博客的点赞和收藏量还挺高的&#xff0c;我当时也没有把它当回事&#xff0c;后面也有很多人问怎…

11.11一些资源整理和总结

使用python读取tensorboard文件中的数据并写入到excel当中去能够代替Originlab的画图软件&#xff08;macos&#xff09;Mac款origin来了&#xff01;还不来看看&#xff01;ptflops&#xff1a;计算网络参数FLOPs的工具[github] 4 中方式计算 FLOPs&#xff08;知乎&#xff0…

栈和队列实现的思路和代码

栈和队列第一节----栈什么是栈实现栈的基本思路各个接口函数的实现初始化栈销毁栈压栈出栈返回栈顶元素栈的判空栈的大小第二节----队列什么是队列实现队列的基本思路各个接口函数的实现队列的初始化队列的销毁队列的插入队列的删除返回队头元素和队尾元素队列的判空队列的大小…

使用DESeq2进行转录组原始count标准化和差异分析

转录组测序完成后&#xff0c;一般我们会获得一个原始 read count表达矩阵&#xff0c;其中行是基因&#xff0c;列是样品。常用的差异分析工具包括limma、edgeR和DESeq2。DESeq2在测序领域使用最为广泛&#xff08;google scholar引用高达43284次&#xff0c;edgeR为28076次&a…

MYSQL索引查询问题质疑

前言 我们在写mysql查询语句的时候&#xff0c;尤其是经验不足的同学肯定会想要怎么使用索引加快查询&#xff0c;或是我这样写到底会不会命中索引。那么现在我就列举几个常见的索引查询问题进行简单说明一下。&#xff08;欢迎互怼&#xff01;&#xff09; 1.问&#xff1a…

小学生python游戏编程arcade----游戏界面按钮实现事件实现的三种方法

小学生python游戏编程arcade----游戏界面按钮实现事件实现的三种方法前言游戏界面按钮实现事件实现的三种方法1、按钮定义及事件3种方法1.1 按钮定义1.2三种事件引用方法1.2.1 类法1.2.2 事件方法2,自定义方法函数1.2.3 事件方法3,使用装饰器处理onclick事件1.3 效果图1.4 代码…

第十四届蓝桥杯校模拟赛详解+代码(一)

“须知少时凌云志&#xff0c;自许人间第一流” 鄙人11月八号有幸参加学校蓝桥杯校选拔赛&#xff0c;题型为5道填空题&#xff0c;5道编程题&#xff0c;总时间为4小时。奈何能力有限&#xff0c;只完成了5道填空和3道编程大题&#xff0c;现进行自省自纠&#xff0c;分享学习…

艾美捷细胞计数试剂盒-8(CCK-8),一步到位

艾美捷细胞计数试剂盒-8&#xff08;CCK-8&#xff09;&#xff1a;用于简单准确的细胞增殖和细胞毒性测定的比色试剂盒。 艾美捷细胞计数试剂盒-8&#xff08;CCK-8&#xff09;特点&#xff1a; 1、一步到位&#xff0c;不含放射性同位素的即用溶液 2、与[3H]-胸苷掺入试验…

分销商城平台哪个好_分享分销商城开发步骤

微信分销商城平台分为两种&#xff1a; 第一种是入驻到别人的微信分销商城平台里面&#xff0c;帮助分销别人发布的商品从而获得佣金。 第二种情况是自己公司开发的微信分销商城平台&#xff0c;然后招募分销者进行分销公司的产品。 对于大家来讲肯定是自己公司开发的微信分销商…

数据结构与算法_大数据处理_求topK的两种求解方法

这篇笔记记录求大数据topk的两种方法&#xff0c;分别是大小二叉堆法和快速分割法&#xff0c;下面依次详解这两种方法的过程。 1 大/小根堆法 利用大根堆过滤前top k小的数据**&#xff1b;小根堆过滤前top k大的数据**&#xff1b; 下面用大根堆求前k个小元素为例。 思想&…

Python 算法:学习二分法

二分法&#xff0c;一个看似简单&#xff0c;逻辑易懂的算法&#xff0c;但是初次接触可能会有很多坑&#xff01;主要是边界处理的问题。 下面以一个耳熟能详的案例来展开&#xff1a; 案例描述&#xff1a; 小B从1~100之间&#xff08;含边界值&#xff09;任意想一个数字&a…

Spring Security 在登录时如何添加图形验证码

前言 在前面的几篇文章中&#xff0c;登录时都是使用用户名 密码进行登录的&#xff0c;但是在实际项目当中&#xff0c;登录时&#xff0c;还需要输入图形验证码。那如何在 Spring Security 现有的认证体系中&#xff0c;加入自己的认证逻辑呢&#xff1f;这就是本文的内容&…

matplotlib简介

matplotlib是一款用于画图的软件&#xff0c;以下步骤建议在.ipynb中完成。 导包 你需要导入以下包&#xff1a; import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np一个简单案例 matplotlib 在 Figure上绘制图形&#xff0c;每一个Figure会包含…

【附源码】Python计算机毕业设计手游账号交易系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Java注解式开发

目录 1. ssm框架的搭建 1.1 maven项目的创建 1.2 导入所需的包到pom.xml文件中 1.3 导入数据库连接文件、日志文件、redis连接文件 1.3.1 数据库连接文件 1.3.2 日志文件 1.3.3 redis连接文件 1.4 导入spring-mybatis、spring-mvc、spring-base、spring-redis四种集成文…