Verilog数据类型/常量/变量[学习笔记day3]

这篇具有很好参考价值的文章主要介绍了Verilog数据类型/常量/变量[学习笔记day3]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 数据类型

数据类型是用来表示数字电路中的数据存储传递单元

Verilog HDL中共有19种数据类型,其中最基本的有4种

  • 常:integer型

parameter型

  • 变:reg型

wire型

  • 其他:large, medium, scalared, small, time, tri, tri0, tri1, triand, trior, trireg, vectored, wand, wor等。


2 常量

在程序运行过程中,其值不能被改变的量,称为常量,有:

  • parameter常量(或称符号常量)

  • 数字(包括整数、x和z、负数)

x:指不定值,0/1,寄存器类型变量(无初值时为x)

y: 指高阻态,断开

2.1 整数型常量
(1) 整数型常量(整常量)
  1. 二进制整数(b/B)

  1. 八进制整数(o/O)

  1. 十进制整数(d/D)

  1. 十六进制整数(h/H)

表达方式:

表达方式

说明

举例

<位宽>'<进制><数字>

完整表达方式

8'b1100_0101 or 8'hA5

'<进制><数字>

缺省位宽,由机器系统决定,至少32位

'hA5-(32位16进制)

10=32'd10=32'b1010

<数字>

缺省进制-十进制;位宽默认32位

197

(32位十进制197)

  • 位宽指二进制宽度

  • 为提高可读性,较长数字之间可用下划线隔开,但不能用在<进制><数字>之间。

(2) X & Z

X表示不定值Z 表示高阻态

[eg] 8'b1001_xxxx= 8'b9x

8'b1010_zzzz= 8'baz

  • 每个字符代表的二进制的宽度取决于所用的进制;

  • 当用二进制表示时,已标明位宽的数,若用X or Z表示默写位,则只有在最左边的X or Z具有扩展性

[eg] 8'bzx= 8'bzzzz_zzzx

8'b1x= 8'b0000_001x

8'haz= 8'h0000_00az

  • ? 是Z的另一种表示符号,在case语句中使用?表示高阻态Z(少用)

[eg] casez(select)

4'b???1 : out =a ; //只看最低位是否为1,若为1,out=a;

4'b??1? : out =b ; //若不为1,看第二位是否为1,若为1,out=b;

4'b?1?? : out =c ;

4'b1??? : out =d ;

endcase

(3) 负数

在位宽前加一个负号,表示负数,求补码。

[eg] -8'd5 = 8'b1111_1011

8 'd5 = 8'b0000_0101

(反码) = 8'b1111_1010

(补码=反码+1) = 8'b1111_1011

[eg] -1 = -32'd1=32'b1111_1111

32'd1 = 32'b0000_0001

(反码) = 32'b1111_1110

(补码=反码+1) = 32'b1111_1111

  • 减号不能放在位宽和进制之间,也不能放在进制与数字之间


2.2 参数型常量
(1)parameter常量(符号常量)

用parameter来定义一个标识符,代表一个常量——称为符号常量。格式:

parameter 参数名1 = 表达式, 参数名2 = 表达式,...;

(参数型数据的确认符) (赋值语句表)

  • 每个赋值语句的右边必须为常数表达式,即只可包含数字先前定义过的符号常量

parameter addwidth =16; ✅

parameter addwidth =datawith*2; ❌

  • 作用:

  • 常用参数来定义延迟时间变量宽度

  • 用字符串表示的任何地方,都可以用定义的参数来代替;

  • 参数是本地的,只可在本模块内有效

  • 在模块或实例引用时,可通过参数传递改变在被引用模块或实例中已定义的参数。

(2)localparam符号常量

localparam 参数名1 = 表达式1, 参数名2 = 表达式2;

(参数型数据的确认符) (赋值语句表)

(3)parameter与localparam区别
  • parameter可用作在顶层模块中例化底层模块传递参数的接口

  • localparam的作用仅限于当前module,不能用作传递参数的借口。

(4)参数的传递
方法一:defparam参数传递

defparam语句在编译时可重新定义参数值。

格式:

defparam 例化模块名. 参数名1 = 常数表达式 1 ,

例化模块名. 参数名2 = 常数表达式2 ;

  • 可综合性:一般情况下是不可综合的;

  • 先例化

  • 提示:不要使用defparam语句!

在模块实例引用时,可用# +参数的语法来重新定义参数。

verilog常量,Verilog,学习,fpga开发,Powered by 金山文档
方法二:符号 # 传递参数

格式:

被引用模块名# (参数1,参数2,...) [空格] 例化模块名 (端口列表)

  • 参数位置关联,必须与被引用模块中的参数一一对应

verilog常量,Verilog,学习,fpga开发,Powered by 金山文档

3 变量

在程序运行过程中,可改变值的量称为变量

数据类型有19种,常用3种:

  1. 网络型( nets type)

  1. 寄存器型 ( register type)

  1. 数组 ( memory type)

3.1 nets型变量
  • 输出始终随输入的变化而变化的变量。

  • 表示结构实体(如门)之间的物理连接。

  • 常用nets型变量:

  • wire, tri : 连线类型(二者功能一致)

  • wor, trior : 具有线或特性的连线(二者功能一致)

  • wand, triand : 具有线与特性的连线(二者功能一致)

  • * tri1, tri0 : 上拉电阻和下拉电阻

  • * supply1, supply0 : 电源(逻辑1)和地(逻辑0)

    • wire型变量
  • 最常用的nets型变量,常用来表示以assign语句赋值的组合逻辑信号;

  • 模块中的输入/输出类型缺省为wire型;

  • 不声明位宽时,默认为1位

  • 可做任何方程式的输入,或assign语句和实例元件的输出

assign <被连续赋值的变量一定是wire型> = <输入>

格式:

wire 数据名1, 数据名2,... , 数据名n; //n个位宽为1的wire;

wire型向量(总线)

wire [n-1:0] 数据名1, 数据名2,... , 数据名m;//每条总线位宽为n;

or wire [n-1:0] 数据名1, 数据名2,... , 数据名m;//共有m条总线;


3.2 reg 型
  • 具有状态保持作用的电路元件(如触发器,寄存器等--可存多个数据,声明有多位);

  • 常用来表示过程块语句(如initial, always, task, function)内的指定信号。

  • initial- 只能用一次

  • always- 中被赋值的变量必须声明为reg型;

  • reg 型必须有初值;

  • 常用register型变量:

  • reg: 常代表触发器,也可描述组合逻辑信号;

  • interger: 32位带符号整数型变量;

  • real: 64位带符号实数型变量;

  • time: 无符号时间变量;

    • reg型变量
  • 在过程块中被赋值的信号,往往代表触发器,也可是组合逻辑信号

  • 格式:

reg 数据名1, 数据名2, ... , 数据名n;

  • reg型向量(总线)

reg [n-1:0] 数据名1, 数据名2, ... , 数据名m; //每个向量位宽为n;

reg [n:1] 数据名1, 数据名2, ... , 数据名m; //共有m个reg向量;

[eg] reg [4:1] regc, regd ; //regc,regd是位宽为4的reg型向量

    • reg型与nets型区别:

register型变量需要被明确赋值,并在被重新赋值前一直保持原值(保持功能)

    • reg型与wire型的区别:

reg型变量:既可生成触发器,也可生成组合逻辑

过程赋值;

wire型变量只可生成组合逻辑;

连续赋值

reg生成组合逻辑:

verilog常量,Verilog,学习,fpga开发,Powered by 金山文档

reg生成触发器:

verilog常量,Verilog,学习,fpga开发,Powered by 金山文档

3.3 memory 型变量-数组

由若干个相同宽度reg型向量构成的数组。

  • Verilog HDL通过reg型变量建立数组对存储器建模;

  • memory型变量可描述RAM、ROM和reg文件;

  • memory型变量通过扩展reg型变量的地址范围来生成。

reg [n-1:0] 存储器名 [m-1:0] ; //声明1个位宽为n的扩展型变量

or reg [n:1] 存储器名 [m:1] ; //有m个存储单元

    • memory型变量与reg型变量的区别
  • 含义不同

[eg] reg [n-1:0] rega ; //一个n位的寄存器

reg[2:0] mema [n-1:0] ; //由n个3位寄存器组成的存储器

  • 赋值方式不同

一个n位的寄存器可用一条赋值语句赋值;一个完整的存储器不行

若对某存储器中的存储单元进行读写操作,必须指明该单元在存储器中的地址

[eg] reg a =0; //合法赋值语句

mem a =0; //非法

mem a[8] =1; //合法

mem a[1023:0]=0; //合法


以上内容均为学习笔记,若有误请随时纠正文章来源地址https://www.toymoban.com/news/detail-752968.html

到了这里,关于Verilog数据类型/常量/变量[学习笔记day3]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java探索之旅】数据类型与变量,字面常量,整型变量

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java入门到精通 🌄 莫道桑榆晚,为霞尚满天! 在Java编程中,理解常量、数据类型以及变量是构建程序逻辑的基础。本文将深入介绍Java中的字面常量、数据类型和整型变量,帮助读者掌握这些基础概念,为编写高效的Java程序打下坚实基

    2024年03月11日
    浏览(40)
  • 【C】C语言数据类型、常量变量的介绍

    下图为C语言常见的数据类型: (浮点数就是我们常见的小数,字符类型要用‘’引起来,在C语言中字符串类型要用字符数组来表示,以后给大家慢慢介绍) 在C语言中没种数据类型所占的空间大小是不一样的,在这里给大家介绍一个库函数: sizeof ,它可以计算每种数据类型

    2024年02月09日
    浏览(53)
  • 【go语言】2.1.1 变量,常量和数据类型

    Go 语言中,变量是存储数据的基本单位,常量则是固定不变的数据。每个变量和常量都有其对应的数据类型。 在 Go 语言中,你可以使用  var  来声明一个变量: 上面的代码声明了一个名为  name  的变量,它的类型是  string 。你也可以在声明变量的同时给它赋值: 或

    2024年02月15日
    浏览(44)
  • 初级Java必看的数据类型与常量变量

    目录 一、Java的数据类型 1、数据类型细致划分 2、数据类型他是做什么的? 3、怎么用数据类型? 二、Java的常量与变量 Java常量 常量代表程序在运行过程中,不可再次改变的值; Java变量 知识总结         我们所学的Java,最基础的应该就是数据类型了,应该大部分计算机

    2024年01月19日
    浏览(44)
  • 二、GoLang输出HelloWorld、基本数据类型、变量常量定义、基本类型转换

    go语言中,想要输出内容到控制台,package必须是main,包括方法名也必须是main, go语言输出的语法是 fmt 库。 Go语言的基本类型有: boolean:布尔类型 true / false string :字符串类型 数值型: int8:有符号8位整型(-128到127)长度 int16:有符号16位整型(-32768到32767)长度 int32:有

    2024年02月09日
    浏览(45)
  • SCL语言的数据类型和常量与变量声明方式

    SCL语言的数据类型主要包含以下几类: 1. 基本数据类型: - BOOL:布尔类型,取值为TRUE或FALSE。 - INT:整数类型,取值范围为-32768~32767(16位PLC)或-2147483648~2147483647(32位PLC)。 - UINT:无符号整数类型,取值范围为0~65535(16位PLC)或0~4294967295(32位PLC)。 - REAL:单精度浮点数

    2024年02月09日
    浏览(42)
  • 【Go基础】编译、变量、常量、基本数据类型、字符串

    面试题文档下链接点击这里免积分下载 go语言入门到精通点击这里免积分下载 使用 go build 1.在项目目录下执行 2.在其他路径下编译 go build ,需要再后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存再当前目录) 3.打包的时候自定义名字:

    2024年02月09日
    浏览(46)
  • 【C语言基础考研向】02 数据类型-常量-变量

    文章目录: 一.数据类型 二.常量 三.变量 四. 整型数据 五.浮点型数据 六.字符型数据 七.字符串常量 数据类型分为四大类: 基本类型 整型 浮点 字符型 构造类型 数组 结构体 指针类型 空类型 常量是指在程序运行过程中,其值不发生变化的量。常量又可分为整型、实型(也称浮

    2024年01月16日
    浏览(41)
  • Python学习从0到1 day3 python基础语法1 变量和debug

    没关系,这破败的生活压不住我                                ——24.1.13 1.什么是量?         量是程序运行中的最小单元 2.什么是变量呢?         ①变量是存储数据的容器         ②变量存储的数据时临时的,变量只有在程序运行过程中是有效的,当程序

    2024年01月22日
    浏览(39)
  • C#学习笔记--变量、常量和转义字符

    变量是存储数值的容器,是一门程序语言的最基础的部分。 不同的变量类型可以存储不同类型的数值。 种类: 在C#种一共有14种变量: 有符号类型4种 无符号类型4种 浮点数3种 特殊类型(char bool string) 变量的命名规则 不能以数字开头 不能使用程序命名 不能有除下划线

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包