Verilog数字系统设计教程【夏宇闻】笔记4

数据类型及其常量及变量

先介绍4 个最基本的数据类型,它们是:reg 型、wire 型、integer型和 parameter 型。

常量

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

  1. 数字
    (1)整数
    在 Verilog HDL 中,整型常量即整常数有以下4 种进制表示形式:
    1)二进制整数(b或 B);
    2)十进制整数(d或 D);
    3)十六进制整数(h 或 H);
    4)八进制整数(o或O)。
    数字表达方式:<位宽><进制><数字>,这是一种全面的描述方式。
    (2)x和z值。在数字电路中,x代表不定值,z代表高阻值。x 可以用来定义十六进制数的4位二进制数的状态,八进制数的3 位,二进制数的1位。z的表示方式同x类似。z还有一种表达方式是可以写作“?”。在使用 case 表达式时建议使用这种写法,以提高程序的可读性。
    (3)负数。一个数字可以被定义为负数,只需在位宽表达式前加一个减号,减号必须写在数字定义表达式的最前面。注意,减号不可以放在位宽和进制之间,也不可以放在进制和具体的数之间。
    (4)下画线(underscore_)。下画线可以用来分隔数的表达以提高程序可读性,但不可以用在位宽和进制处,只能用在具体的数字之间。
  2. 参数(parameter)型
    在Verilog HDL中用parameter 来定义常量,即用 parameter 来定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量,采用标识符代表一个常量可提高程序的可读性和可维护性。parameter 型数据是一种常数型的数据,其说明格式如下:
    parameter 参数名1 = 表达式,参数名2 = 表达式,……,参数名n = 表达式;
    parameter是参数型数据的确认符。确认符后跟着一个用逗号分隔开的赋值语句表。在每一个赋值语句的右边必须是一个常数表达式,也就是说,该表达式只能包含数字或先前已定义过的参数。
    参数型常数经常用于定义延迟时间和变量宽度,在模块或实例引用时,可通过参数传递改变在被引用模块或实例中已定义的参数。引用实例时,可通过参数的传递来改变定义时已规定的参数值,使得已编写的底层模块具有更大的灵活性。也可使用defparam命令在一个模块中改变另一个模块中的参数。

变量

变量即在程序运行过程中其值可以改变的量,在 Verilog HDL 中变量的数据类型有很多种,这里只对常用的几种进行介绍。网络数据类型表示结构实体(例如门)之间的物理连接。网络类型的变量不能储存值,而且它必须受到驱动器(例如门或连续赋值语句,assign)的驱动。如果没有驱动器连接到网络类型的变量上,则该变量就是高阻的,即其值为z。常用的网络数据类型包括 wire 型和 tri型。
(1)wire型
wire型数据常用来表示以 assign 关键字指定的组合逻辑信号。Verilog 序模块中输入、输出信号类型默认时自动定义为 wire 型。wire型信号可以用做任何方程式的输入,也可以用做“assign”语句或实例元件的输出。
wire 型信号的格式同 reg 型信号的格式很类似。其格式如下:
wire [n-1:0] 数据名 1,数据名 2,……数据名i; //共有i条总线,每条总线内有 n条线
(2)reg型
寄存器是数据储存单元的抽象。寄存器数据类型的关键字是 reg。通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。reg 类型数据的默认初始值为不定值 x。reg 型数据常用来表示“always”模块内的指定信号,常代表触发器。
Reg型数据其格式如下:
reg [n-1:0] 数据名 1,数据名 2,……数据名i;
对于 reg 型数据,其赋值语句的作用就如同改变一组触发器的存储单元的值。reg型数据的缺省初始值是不定值。reg 型数据可以赋正值,也可以赋负值。但当一个reg 型数据是一个表达式中的操作数时,它的值被当作是无符号值,即正值。
(3)memory型
Verilog HDL通过对 reg 型变量建立数组来对存储器建模,可以描述 RAM型存储器、ROM存储器和 reg 文件。数组中的每一个单元通过一个数组索引进行寻址。在 Verilog 语言中没有多维数组存在。memory 型数据是通过扩展reg 型数据的地址范围来生成的。其格式如下:
reg [n-1:0] 存储器名[m-1;0];
在这里,reg[n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个 n位的寄存器;存储器名后的[m-1:0]或[m:1]则定义了该存储器中有多少个这样的寄存器; 如果想对 memory 中的存储单元进行读写操作,必须指定该单元在存储器中的地址。

运算符及表达式

Verilog HDL语言的运算符范围很广,其运算符按其功能可分为以下几类
(1)算术运算符(+,-,X,/,%);
(2) 赋值运算符(=,<=);
(3) 关系运算符(>,<,>=,<=);
(4) 逻辑运算符(&&,||,!);
(5)条件运算符(?😃;
(6) 位运算符(,|,^,&,^);
(7) 移位运算符(<<,>>);
(8)拼接运算符({});
(9)其他。
在 Verilog HDL语言中运算符所带的操作数是不同的,按其所带操作数的个数运算符可分为3种:
(1)单目运算符(unary operator)可以带一个操作数操作数放在运算符的右边
(2)双目运算符(binary operator);可以带两个操作数操作数放在运算符的两边。
(3)三目运算符(ternary operator)可以带三个操作数,这三个操作数用三目运算符分隔开。

小结

(1)在 Verilog 模块中所有过程块(如:initial块always 块)、连续赋值语句、实例引用都是并行的。
(2)它们表示的是一种通过变量名互相连接的关系
(3)在同一模块中各个过程块、各条连续赋值语句和各条实例引用语句这三者出现的先后顺序没有关系;
(4)只有连续赋值语句(即用关键词 assign引出的语句)和实例引用语(即用已定义的模块名引出的语句),可以独立于过程块而存在于模块的功能定义部分。
(5) 被实例引用的模块,其端口可以通过不同名的连线或寄存器类型变量连接到别的模块相应的输出输入信号端。
(6)在“always”块内被赋值的每一个信号都必须定义成reg 型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值