Verilog基本语法——数据类型及常量集合

本文是Verilog学习笔记,参考于《Xilinx FPGA开发实用教程》和夏宇闻老师的Verilog经典教程系列

一、数据类型

Verilog HDL中总共有19种数据类型,数据类型是用来表示数字电路硬件中的数据储存和传送原色的

1. wire型

wire型数据常用来表示用于以assign关键字指定的组合逻辑信号。

Verilog程序模块中输入输出信号类型默认为wire型。

wire型信号可以用做方程式的输入,也可以用做”assign”语句或者实例元件的输出

wire型信号的定义格式:

wire [n-1:0] 数据名1,数据名2,...,数据名N;
//定义了N条线,每条线的位宽为n

2. reg型

reg是寄存器数据类型的关键字。

寄存器是数据存储单元的抽象,通过赋值语句可以改变寄存器存储的值,其作用相当于改变触发器存储器的值。

reg型数据常用来表示always模块内的指定信号,代表触发器。

通常在设计中要由always模块通过使用行为描述语句来表达逻辑关系。在always块内被赋值的每一个信号都必须定义为reg型,即赋值操作符的右端变量必须是reg型

reg型号数据的格式:

reg[n-1:0]数据名1,数据名2...,数据N;
//定义了N个寄存器变量,每个数据位宽为n

**reg
型数据的默认值是不定的**。reg型数据可以为正值或负值。当一个reg型数据是一个表达式中的操作数时,它的值被当做无符号值,即正值(如果一个4位的reg型数据被写入-1,在表达式中运算时,其值被认为是+15)

reg型和wire型的区别:reg型保持最后一次的赋值,而wire型需要持续驱动

3. memory型

Verilog HDL通过对reg型变量建立数组来对存储器建模,可以描述RAM型存储器,ROM存储器和reg文
件。数组中的每一个单元通过一个数组索引进行寻址。在Verilog语言中没有多维数组存在。memory型数据是通过扩展reg数据的地址范围来生成

memory型号数据的格式:

reg [n-1:0] 存储器名[m-1:0];
//存储器中m个寄存器,每个寄存器数据位宽为n

对存储器进行地址索引的表达式必须是常数表达式

一个n位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行

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

rega =0; //合法赋值语句
mema =0; //非法赋值语句

mema[3]=0; //给memory中的第3个存储单元赋值为0

4. parameter型

Verilog HDL中用parameter来定义常量,即用parameter来定义一个标识符表示一个常数。

提高程序的可读性和可维护性

parameter型号数据的格式:

parameter 参数名1=数据名1;

二、常量

Verilog HDL有下列4种基本数值:
- 0 ———— 逻辑0或“假”
- 1 ———— 逻辑1或“真”
- x ———— 未知(不区分大小写)
- z ———— 高阻(还可以写成”?”“)(不区分大小写)

x和z值举例

4'b1x00 //位宽为4的二进制数从低位数起第三位为不定值
4'b011z //位宽为4的二进制数从低位数起第一位为高阻值
12'dz //位宽为12的十进制数其值为高阻值(第一种表达方式)
12'd? //位宽为12的十进制数其值为高阻值(第二种表达方式)
8'h4x //位宽为8的十六进制数其低四位值为不定值

1. 整数

1.1 十进制格式

68 //十进制68
-56 //十进制-56

1.2 基数表示格式

基数格式的整数格式:

[长度] '基数 数值

长度:常量的位长

基数:可以是二进制、八进制、十进制、十六进制之一

数值:基于基数的数字序列,且数值不能为负数

8'b10101100 //位宽为8的数的二进制
8'ha2 //位宽为8的数的十六进制

2. 实数

2.1 十进制计数法

3.0
123.342

2.2 科学计数法

234.12e2 //值为23412
6e-3     //值为0.006

根据Verilog语言的定义,实数通过四舍五入隐式地转换为最相近的整数

3. 字符串

双引号内的字符序列,不能分成多行书写

用8位ASCII值表示的字符可以看作是无符号整数,因此字符串是8位ASCII值序列

你可能感兴趣的:(Verilog)