Verilog HDL 基本语法
Verilog HDL程序的基本结构
Verilog HDL程序由模块组成
一个完整的模块由模块端口定义和模块内容组成
模块内容包括I/O声明,信号类型声明和功能表述
基本结构
module 模块名(端口定义);
I/O声明; //代码
功能描述; //代码
endmodule
语法:
- module 与 endmodule 定义一个模块的起始与解释
module后跟模块名
模块名必须以英文字母开头可以包括英文字母,数字和下划线 - 除了endmodule,所有的语句以英文结尾结尾
- 语句可以是单条语句,也可以是begin和end构成的复合语句 (后面会讲到)
- 注释风格与C语言类似
模块端口定义
模块端口定义用来声明设计模块的输入/输出端口
格式:module 模块名 (端口1,端口2,端口3,···) ;
模块的端口是设计实体的对外引脚,是使用时外界可以看到的部分,多个端口之间用逗号
模块内容
模块内容用于对信号的I/O状态及信号类型进行声明,并描述模块的功能
I/O声明
模块的I/O声明用来声明各端口信号流动方向,包括输入,输出,双向
格式:
-
输入声明
信号位宽为1位,声明格式:input 端口1,端口2,端口3,.....
信号位宽大于1位,声明格式:input[msb:lsb] 端口1,端口2,端口3,....
-
输出声明
信号位宽为1位,声明格式:output 端口1,端口2,端口3,....
信号位宽大于1位,声明格式:output[msb,lsb] 端口1,端口2,端口3,....
-
输入/输出声明
inout
信号类型声明
信号类型声明用来说明电路的功能描述中所用信号的数据类型
常用的信号类型有wire(连线型)
,reg(寄存器型)
,整型(integer)
,实型(real)
,时间型(time)
功能描述
功能描述是Verilog HDL程序的主要部分,在电路上相当于器件的内部结构
- assign语句
assign后加赋值语句,一般对组合逻辑进行描述,称为连续赋值方式 - 实例元件实现
利用Verilog HDL提供的元件库实现一个逻辑关系
格式:元件名 实例化后元件名(输入/输出端)
模块中的实例化后的元件名称必须唯一 - always块
常用于组合和时序逻辑的功能描述
程序运行中,某些条件满足时,就重复执行always块中的语句
格式:`always@(触发条件) - initial块实现
与always块语句相似,但只执行一次,用于电路初始化
Verilog HDL的数据类型
Verilog HDL中共有19种数据类型
常量
程序运行过程中,值不能改变的量称为常量,分为三种:整型,实型,字符串型
整型
整型常量格式为:<位宽>'<进制><数值>
位宽:为对应的二进制宽度
进制:二进制&#x