文章目录
Verilog HDL的数据对象
Verilog HDL代码使用到的数据对象有以下几种:
- 线网型(net)
- 寄存器型(reg)
- 整型(integer)
- 实型(real)
- 时间型(time)
- 参数型(parameter)
- 字符串型(string)
线网型数据对象
线网型数据对象种类
线网型数据对象是 Verilgh HDL中常用的数据对象之一,它是作用是电路节点之间的互连,类似于电板上的导线。Verilog HDL支持的线网型有11种之多,如下表1所示:
表1:线网型种类
线网型各种 | 说明 |
---|---|
wire | 普通的连线 |
tri(有三态功能) | 与wire功能类似 |
wand | 具有线与功能的连线 |
triand | 与wand功能类似 |
wor | 具有线或功能的连线 |
trior | 与wor功能类似 |
tri1 | 具有内建上拉功能的连线 |
tri0 | 具有内建下拉功能的连线 |
supply1 | 接到电源的连线,通常为1 |
supply | 接到地的连线,通常为0 |
trireg | 带有存储功能的连线 |
上表中列出的11种线网型中,wire是Verilog HDL默认的线网型,比如在端口声明,当你没有显示给定类型时,它就是默认的wire类型的线网型数据对象;trireg是唯一可以保持原来值的线网型数据对象。
线网型数据对象的定义
线网型数据对象定义的基本格式如下所示:
net_type[signed][vectored | scalared] list_of_indentifiers
其中
net_type是各种,可以在上表线网型各类中的任意一种。
[signed]是可选项,如果有则标识定义一个或多个有符号的数据对象
[vectored | scalared]是可选项,可以定义多位标量或矢量数据对象
list_of_indentifiers是定义数据对象的列表,可一个或多个
举例如下:
wire cout //定义一个数据对象cout,是1位的wire类型
wand da //定义一个数据对象da,是1位的wand类型
supply1 vcc //定义一个数据对象vcc,是1位的supply1类型
wire[7:0] data //定义一个数据对象data,是8位的wire类型
//定义多位数据对象默认是vectored类型
wire vectored[7:0] bus //显示指明是vectored类型的8位wire
wire scalared[7:0] adr //显示指明是scalared类型的8位wire
wire signed[7:0] data //定义一个有符号的8位wire,它是以2的补码形式出现
线网型数据对象的多驱动操作
Verilog HDL的线网数据对象支持多驱动源操作,即一个线网型对象有两个或两个以上的驱动源对它进行驱动,这时该线网型对象的值不仅跟这些驱动源的值有关,还与该线网型数据对象的种类有关,即使驱动源的值相同,不同线网型各类的数据对象的值也可能不一样。
- wie与mi数据对象多驱动源的情况,为了便于说明以两个驱动源为例,当个驱动源同时驱动一个wre与m数据对象时,则该数据对象的值由下表2所示:
表2:wire与tri多驱动源的值
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 |
- wor与tior数据对象多驱动源的情况,为了便于说明以两个驱动源为例。当个驱动源同时驱动一个wor与trior数据对象时,只要有一个驱动源为1则该数据对象的值就为1,具体由表3所示。
表3:wor与trior多驱动源的值
wor/trior | 0 | 1 | x | z |
---|---|---|---|---|
0 | 0 | <