微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Verilog HDL基础之:数据类型和运算符

Verilog HDL基础之:数据类型和运算符

时间:06-05 来源:互联网 点击:

法。

module Decode(A,F); //模块声明

parameter Width=1, Polarity=1; //参数声明

……………

endmodule

module Top;

wire[3:0] A4; //连线资源声明

wire[4:0] A5;

wire[15:0] F16;

wire[31:0] F32;

Decode #(4,0) D1(A4,F16); //模块引用,并传递参数(4,0)

Decode #(5) D2(A5,F32); //模块引用,并传递参数(5)

endmodule

在引用Decode实例时,D1和D2的Width将采用不同的值,分别为4和5,且D1的Polarity将为0。可用例子中所用的方法来改变参数,即用“#(4,0)”向D1中传递“Width=4,Polarity=0”,用“#(5)”向D2中传递“Width=5,Polarit=1”。

变量

变量是在程序运行过程中,其值可以改变的量。在Verilog HDL中变量类型有很多种,这里只对常用的几种变量进行介绍。

1.网络类型变量

网络类型表示结构实体(例如门)之间的物理连接。网络类型的变量不能储存值,而且它必需受到驱动器(例如门或连续赋值语句,assign)的驱动。如果没有驱动器连接到网络类型的变量上,则该变量就是高阻的,即其值为z。

常用的网络类型变量包括wire型和tri型。这两种变量都是用于连接器件单元,它们具有相同的语法格式和功能。之所以提供这两种名字来表达相同的概念是为了与模型中所使用的变量的实际情况相一致。

wire型变量通常是用来表示单个门驱动或连续赋值语句驱动的网络型数据,tri型变量则用来表示多驱动器驱动的网络型数据。如果wire型或tri型变量没有定义逻辑强度(logic strength),在多驱动源的情况下,逻辑值会发生冲突,从而产生不确定值。

表1所示为在同等驱动强度下,两个驱动源驱动的wire型和tri型变量的真值表。

表1 wire/tri型变量真值表

wire/tri型变量双驱动源运算结果

驱动源1

驱动源2

0

1

x

z

0

0

x

x

0

1

1

x

1

x

x

x

x

x

z

0

1

x

z

wire型变量常用来表示用于以assign关键字指定的组合逻辑信号。Verilog程序模块中输入/输出信号类型缺省时自动定义为wire型。wire型变量可以用作任何方程式的输入,也可以用作“assign”语句或实例元件的输出。wire型变量的声明格式如下:

wire [n-1:0] 变量名1,变量名2,…,变量名i; //共有i条总线,每条总线内有n条线路

也可以如下表示:

wire [n:1] 变量名1,变量名2,…,变量名i; //共有i条总线,每条总线内有n条线路

其中,wire是wire型变量的确认符,[n-1:0]和[n:1]代表该变量的位宽,即该变量有几位,最后跟着的是变量的名字。如果一次定义多个变量,变量名之间用逗号隔开。声明语句的最后要用分号表示语句结束。如下所示:

wire a; //定义了一个一位的wire型变量

wire [7:0] b; //定义了一个八位的wire型变量

wire [4:1] c, d; //定义了两个四位的wire型变量

2.寄存器型变量

寄存器是数据储存单元的抽象。寄存器型变量的关键字是reg。通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。

Verilog HDL语言提供了功能强大的结构语句使设计者能有效地控制是否执行这些赋值语句。这些控制结构用来描述硬件触发条件,例如时钟的上升沿和多路器的选通信号。reg类型变量的缺省初始值为不定值,即x。

reg型变量常用来表示用于“always”模块内的指定信号,常代表触发器。通常,在设计中要由“always”块通过使用行为描述语句来表达逻辑关系。在“always”块内被赋值的每一个信号都必须定义成reg型。和wire型变量类似,reg型变量的声明格式如下:

reg [n-1:0] 变量名1,变量名2,…,变量名i; //共有i条总线,每条总线内有n条线路

也可以如下表示:

reg [n:1] 变量名1,变量名2,…,变量名i; //共有i条总线,每条总线内有n条线路

其中,reg是reg型变量的确认标识符,[n-1:0]和[n:1]代表该变量的位宽,即该变量有几位(bit),最后跟着的是变量的名字。如果一次定义多个变量,变量名之间用逗号隔开。声明语句的最后要用分号表示语句结束。如下所示:

reg rega; //定义了一个一位的名为rega的reg型变量

reg [3:0] regb; //定义了一个四位的名为regb的reg型变量

reg [4:1] regc, regd; //定义了两个四位的名为regc和regd的reg型变量

reg型变量可以赋正值,也可以赋负值。但当一个reg型变量是一个表达式中的操作数时,它的值将被当作是无符号值,即正值。例如:当一个四位的寄存器用作表达式中的操作数时,如果开始寄存器被赋以值-1,则在表达式中进行运算时,其值被认为是+15。

3.存储器型变量

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top