新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Verilog的语言要素有哪些?

Verilog的语言要素有哪些?

作者:时间:2018-08-03来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/201808/385258.htm

语言定义了实数如何隐式地转换为整数。实数通过四舍五入被转换为最相近的整数。

42.446, 42.45 转换为整数42

92.5, 92.699 转换为整数93

-15.62 转换为整数-16

-26.22 转换为整数-26

3.6.3 字符串

字符串是双引号内的字符序列。字符串不能分成多行书写。例如:

INTERNAL ERROR

REACHED->HERE

用8位ASCII值表示的字符可看作是无符号整数。因此字符串是8位ASCII值的序列。为存储字符串“INTERNAL ERROR”,变量需要8*14位。

reg [1 : 8*14] Message;

. . .

Message = INTERNAL ERROR

反斜线 ( ) 用于对确定的特殊字符转义。

n 换行符

t 制表符

\ 字符本身

字符

206 八进制数206对应的字符

3.7 数据类型

HDL 有两大类数据类型。

1) 线网类型。net type 表示结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z。

2) 寄存器类型。register type表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值被保存下来。寄存器类型的变量具有x 的缺省值。

3.7.1 线网类型

线网数据类型包含下述不同种类的线网子类型。

* wire

* tri

* wor

* trior

* wand

* triand

* trireg

* tri1

* tri0

* supply0

* supply1

简单的线网类型说明语法为:

net_kind [msb:lsb] net1, net2, . . . , netN;

net_kind 是上述线网类型的一种。msb和lsb 是用于定义线网范围的常量表达式;范围定义是可选的;如果没有定义范围,缺省的线网类型为1位。下面是线网类型说明实例。

wire Rdy, Start; //2个1位的连线。

wand [2:0] Addr; //Addr是3位线与。

当一个线网有多个驱动器时,即对一个线网有多个赋值时,不同的线网产生不同的行为。例如,

wor Rde;

. . .

assign Rde = Blt Wyl;

. . .

assign Rde = Kbl | Kip;

本例中,Rde有两个驱动源,分别来自于两个连续赋值语句。由于它是线或线网,Rde的有效值由使用驱动源的值(右边表达式的值)的线或(wor)表(参见后面线或网的有关章节)决定。

1. wire和tri线网

用于连接单元的连线是最常见的线网类型。连线与三态线(tri)网语法和语义一致;三态线可以用于描述多个驱动源驱动同一根线的线网类型;并且没有其他特殊的意义。

wire Reset;

wire [3:2] Cla, Pla, Sla;

tri [ MSB-1 : LSB +1] Art;

如果多个驱动源驱动一个连线(或三态线网),线网的有效值由下表决定。

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

下面是一个具体实例:

assign Cla = Pla Sla;

. . .

assign Cla = Pla ^ Sla;

在这个实例中,Cla有两个驱动源。两个驱动源的值(右侧表达式的值)用于在上表中索引,以便决定Cla的有效值。由于Cla是一个向量,每位的计算是相关的。例如,如果第一个右侧表达式的值为01x, 并且第二个右测表达式的值为11z,那么Cla 的有效值是x1x (第一位0和1在表中索引到x, 第二位1和1在表中索引到1,第三位x 和z在表中索引到x)。

2. wor和trior线网

线或指如果某个驱动源为1,那么线网的值也为1。线或和三态线或(trior)在语法和功能上是一致的。

wor [MSB:LSB] Art;

trior [MAX-1: MIN-1] Rdx, Sdx, Bdx;

如果多个驱动源驱动这类网,网的有效值由下表决定。

wor (或 trior) 0 1 x z

0 0 1 x 0

1 1 1 1 1

x x 1 x x

z 0 1 x z

3. wand和triand线网

线与(wand)网指如果某个驱动源为0,那么线网的值为0。线与和三态线与(triand)网在语法和功能上是一致的。

wand [-7 : 0] Dbus;

triand Reset, Clk;

如果这类线网存在多个驱动源,线网的有效值由下表决定。

wand (或 triand) 0 1 x z

0 0 0 0 0

1 0 1 x 1

x 0 x x x

z 0 1 x z

4. trireg线网

此线网存储数值(类似于寄存器),并且用于电容节点的建模。当三态寄存器(trireg)的所有驱动源都处于高阻态,也就是说,值为z时,三态寄存器线网保存作用在线网上的最后一个值。此外,三态寄存器线网的缺省初始值为x。

trireg [1:8] Dbus, Abus;

5. tri0和tri1线网

这类线网可用于线逻辑的建模,即线网有多于一个驱动源。tri0(tri1)线网的特征是,若无驱动源驱动,它的值为0(tri1的值为1)。

tri0 [-3:3] GndBus;

tri1 [0:-5] OtBus, ItBus;

下表显示在多个驱动源情况下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)

6. supply0和supply1线网

supply0用于对“地”建模,即低电平0;supply1网用于对电源建模,即高电平1;例如:

supply0 Gnd, ClkGnd;

supply1 [2:0] Vcc;

3.7.2 未说明的线网

在Verilog HDL中,有可能不必声明某种线网类型。在这样的情况下,缺省线网类型为1位线网。

可以使用`default_nettype编译器指令改变这一隐式线网说明方式。使用方法如下:

`default_nettype net_kind

例如,带有下列编译器指令:

`default_nettype wand

任何未被说明的网缺省为1位线与网。

3.7.3 向量和标量线网

在定义向量线网时可选用关键词scalared 或vectored。如果一个线网定义时使用了关键词vectored, 那么就不允许位选择和部分选择该线网。换句话说,必须对线网整体赋值(位选择和部分选择在下一章中讲解)。例如:



关键词: Verilog FPGA

评论


相关推荐

技术专区

关闭