Verilog教程
1.Verilog简介
Verilog语言是一种用于建模电子系统的硬件描述语言,这种硬件描述语言最多的用于进行数字电路系统的寄存器传输级建模和验证工作,同时一些例如生物电路等数模混合电路的建模和验证电路。Verilog语言的语法规则与C语言有很多相似之处。Verilog语言的标准化内容在IEEE 1364标准中规定。
2. Verilog语法讲解
Verilog硬件描述语言有变量和常量,下面分别对变量和常量进行介绍。
2.1 Verilog变量数据类型
2.1.1 线网型数据(Nets)
线网型数据代表着不同电路结构体之间的直接物理连接。这种类型的变量不存储数据,变量的值跟随驱动信号的变化而进行瞬时变化。这种数据类型用关键字wire
来定义。
下面表格是wire
类型变量的值,下一节要介绍的reg
类型值也类似。
2.1.2 寄存器型数据(Reg)
寄存器类型变量经常用在时序电路中。这种类型的变量可以存储数据的值。触发信号到来时,变量的值跟随驱动信号变化。触发信号没有到来时,变量值不变化。寄存器类型数据使用关键字reg
来定义。
2.1.3 其他数据类型:(integer、real、time)
integer
、real
、time
这三种变量其实也是寄存器类型的变量。
integer
变量一般是一个32bit的整形数据。
real
变量是一个IEEE标准的64bit浮点型数据。
time
是一个64位的无符号整形变量。代表了仿真运行时间.可以利用系统函数$time
查看time
类型的变量.
2.1.4 向量型数据结构
2.1.1
和2.1.2
两节中提到的wire
类型和reg
类型都是1 bit数据。Verilog中存在向量类型(Vector
),向量变量类型代表了一个包含了多bit数据的一个数据类型。
下面这段代码定义了一个线网型wire
类型数据的向量signal
,signal
变量包含了32bit数据。[31:0]
代表了32bit数据的最高位角标位31,最低为角标为0。
wire [31:0] signal
下面这段代码定义了一个线网型reg
类型数据的向量signal
,signal
变量包含了32bit数据。[31:0]
代表了32bit数据的最高位角标位31,最低为角标为0。
reg [31:0] signal
2.1.5 存储器类型数据
寄存器变量组成的数组就是存储器类型数据。定义语句如下所示:
reg [15:0] memo [7:0];
上面的语句定义类一个存储器memo
,有8个存储单元,每个存储单元有16位。
2.1.6 Verilog常量表示
Verilog中的常量主要有整数型和参数型常量
对于整型常量最完整的描述为<位宽><数制><数值>。位宽和数制可以根据需要或者指定或者省略。对于整型数据的数制类型主要有二进制(b或B表示)、八进制(o或O表示)、十六进制(h或H表示)。可以以如下形式表示:
//指明数据位宽,二进制数据
4'b1011
//指明数据位宽、十六进制表示
4'hFF
//负数表示,符号标注在最前面
-4'b1001
参数型的常量是使用关键字parameter
来申明,被称为参数型变量。parameter
类型常量赋值语句的右边都必须是一个常数表达式。参数类型定义的示例:
para