Verilog 学习笔记之数据类型

来源:互联网 发布:grpc java 编辑:程序博客网 时间:2024/05/16 06:32

Verilog 有三种主要的数据类型:

Nets      表示器件之间的物理连接,称为网络连接类型
Register    表示抽象的储存单元,称为寄存器/变量类型
Parameter 表示运行时的常数,称为参数类型


1.Nets网络连线):

由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。

例如:下图,selb的改变,会自动地立刻影响或门的输出。



连接(Nets)类型变量的种类

类型                                        功能                                         

wire,tri                      对应于标准的互连线(缺省)

supply1, supply2   对应于电源线或接地线

wortrior                  对应于有多个驱动源的线或逻辑连接

wand, triand           对应于有多个驱动源的线与逻辑连接

trireg                        对应于有电容存在能暂时存储电平的连接

tri1, tri0                    对应于需要上拉或下拉的连接

如果不明确地说明连接是何种类型,应该是指wire类型。而不指定就默认为1位wire类型。

专门指定出wire类型,可能是多位或为使程序易读。



2.寄存器(register)类型变量

register型变量能保持其值,直到它被赋于新的值。

register型变量常用于行为建模,产生测试的激励信号。
常用行为语句结构来给寄存器类型的变量赋值。


 寄存器(register)类型变量的数据类型

 寄存器类型变量共有四种数据类型:

  类型                                 功能                                                                                                            .

reg             无符号整数变量,可以选择不同的位宽。

integer        有符号整数变量,32位宽,算术运算可产生2的补码。

real               有符号的浮点数,双精度。

time             无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻)

 如何选择正确的数据类型?

输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。
输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。
输入/输出口(inout)只可以由网络连接驱动,但它本身只能驱动网络连接。
如果信号变量是在过程块(initial块或always)中被赋值的,必须把它声明为寄存器类型变量。

经典错误:
(1)在过程块中对变量赋值时,忘了把它定义为寄存器类型(reg)或已把它定义为连接类型了(wire)
(2)把实例的输出连接出去时,把它定义为寄存器类型了
(3)把模块的输入信号定义为寄存器类型了。

3.参数(parameters)类型

常用参数来声明运行时的常数。
可用字符串表示的任何地方,都可以用定义的参数来代替。
参数是本地的,其定义只在本模块内有效。
------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------
除了数据类型外,其实我们在初学Verilog中遇到的问题还有这么几个:
1.何时用reg何时用wire?
2.always是怎样执行的?assign呢?
3.什么阻塞赋值,发什么又是非阻塞赋值?

这些问题将在下一篇解释。
0 0
原创粉丝点击