Verilog HDL语法-数据类型

Verilog HDL语法-数据类型

  • 数据类型
    • 物理数据类型
      • 连线型
        • 概述
        • 连线型变量的声明
      • 寄存器型
        • 概述
        • 寄存器型变量的声明
      • 存储器型
    • 抽象数据类型
      • 整型
      • 时间型
      • 实型
      • 参数型

数据类型

在Verilog HDL中共有19种数据类型。这19种数据类型可以划分为两大类:物理数据类型(主要包括连线型及寄存器型)和抽象数据类型(主要包括整形、时间型、实型及参数型)。

物理数据类型

对于实际数字电路,除了信号的逻辑值(低电平,高电平,不定态,高阻态)外,不同的信号还有强度的区别。在Verilog HDL中使用了四种逻辑值和八种信号强度对实际电路进行建模。信号强度的引入,可以解决不同驱动强度下的赋值冲突。

连线型

概述

下表给出了各种连线型变量类型及相应的含义。

连线型数据类型 功能说明
wire,tri 标准连线型
eor,trior 多重驱动时,具有线或特性的连线型
wand,trand 多重驱动时,具有线与特性的连线型
trireg 具有电荷保持特性的连线型数据
tri1 上拉电阻
tri0 下拉电阻
supply1 电源线,用于对电源建模,为高电平1
supply0 电源线,用于对“地”建模,为低电平0

连线表示逻辑单元的物理连接,这种变量类型不能保持电荷(除trireg外)。连线型变量必须有驱动源(包括连接到一个门或一个模块的输出端以及用assign连续赋值语句对这一类型的变量进行赋值两种形式)。在没有驱动源时连线类型的变量将一直保持高阻态。

下面对以上几种连线型数据类型进行简单的说明:

  1. wire与tri的区别:wire(连线)类型和tri(三态线)类型的用法是完全相同的。只是当我们需要定义一个三态门驱动的硬件连线时,tri会更具可读性。
    当两个驱动源同时对一个wire类型(或tri类型)的语句赋值时,wire会被赋值为驱动强度更高的信号。如果两个信号强度相同,输出结果见下表:
wire,tri 0 1 x z
0 0 x x 0
1 x 1 x 1
x x x x x
z 0 1 x z
  1. wor和trior:wor与wire的区别主要在于当多个驱动源驱动同一个变量时的情况。当多个驱动源驱动一个wor类型变量时,相当于将多个wire类型的变量连接到一个或门上再输出。所以有多个驱动源同时驱动同一个wor类型的变量时会产生线或结构。与此相同,trior相当于多个tri类型的变量连接到一个或门上。
  2. wand和triand:参照wor和trior。
  3. tri0/tri1:在无驱动源时,其值为0/1;在多个驱动源的情况下,tri0/tri1的输出如下表:
tri0/tri1 0 1 x z
0 0 x x 0
1 x 1 x 1
x x x x x
z 0 1 x 0/1
  1. supply0/supply1:supply0用于对“地”建模,即低电平0;supply1用于对电源建模,即高电平1.
  2. trireg线网:还没有涉及到,留待后续补充。
连线型变量的声明

[list_of_variables];
net_delaration和list_of_variables是必选项,其他可选。当没有range时默认1位的。

寄存器型

概述

reg型变量时数据存储单元的抽象类型,其对应的硬件电路具有状态保持作用,能够存储数据,如触发器、锁存器等。reg型变量常用语行为级描述中,由过程赋值语句对其进行赋值。
reg型变量与wire型变量的区别在于,reg型变量保持最后一次赋值,而wire型变量必须需要有持续的驱动。一般,reg型变量的初始值为x。
reg型变量是无符号数,如果将一个赋值赋值给reg型变量,会自动转换成其对应的补码形式。
在过程块内被赋值的变量都必须定义为reg型,并且只能在initial或always过程块中赋值,大多数reg型信号常常是寄存器或触发器的输出。

寄存器型变量的声明

reg ;

存储器型

存储器型(memory)本质上还是寄存器型变量阵列。
声明格式:
reg ;
range1是memory的位宽;
range2是memory的深度;
name_of_register是memory的变量名。

抽象数据类型

整型

integer是有符号类型,保存的是整数的二进制补码。
声明格式:interger

时间型

time类型与integer类型类似,只是它是64位无符号数。
声明格式: time

实型

Verilog HDL支持实型常量与变量。实型数据在机器码表示中是浮点型数值,可用于对延时时间的计算。
声明格式:real

参数型

参数型数据属于常量,在仿真开始前就被赋值,在仿真过程中保持不变。参数常用来定义延迟时间和变量的位宽。参数一旦被定义就不能通过其他语句对它重新赋值。改变参数的值是通过模块间的参数传递实现的。
声明格式:parameter 参数名1 = 表达式1, 参数名2=表达式2 , …

你可能感兴趣的:(Verilog,HDL,verilog)