目录
1.Verilog简介
Verilog语言是1983年由GDA(Gateway Design Automation)公司的Phil Moorby首创的,之后Moorby又设计了Verilog-XL仿真器,Verilog-XL仿真器大获成功,也使得Verilog语言得到推广使用。
1989年,Cadence收购了GDA
1990年,Cadence公开发表了Verilog HDL,并成立了OVI组织(Open Verilog International)专门负责Verilog HDL的发展。
Verilog于1995年成为IEEE标准,称为IEEE Standard 1364-1995(Verilog-1995)
IEEE“1364-2001”标准(Verilog-2001)也获得了通过,多数综合器、仿真器都已经支持Verilog-2001标准
2.Verilog设计举例
3.Verilog程序的特点
(1)Verilog程序是由模块构成的。每个模块的内容都嵌在module和endmodule两个关键字之间;每个模块实现特定的功能;模块是可以进行层次嵌套的。
(2)每个模块首先要进行端口定义,并说明输入和输出口(input、output或inout),然后对模块的功能进行逻辑描述。
(3)Verilog程序书写格式自由,一行可以写几个语句,一个语句也可以分多行写。
(4)除了endmodule等少数语句外,每个语句的最后必须有分号。
(5)可以用 /*……*/ 和 //…… 对Verilog程序作注释。好的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。
4.Verilog模块的结构
module AOI (A,B,C,D,F); //模块名为AOI
input A,B,C,D; //模块的输入端口为A,B,C,D
output F; //模块的输出端口为F
wire A,B,C,D,F; //定义信号的数据类型
assign F= ~((A&B)|(~(C&D))); //逻辑功能描述
endmodule
该程序的第1行为模块的名字、模块的端口列表;第2、3行为输入输出端口声明,第4行定义了端口的数据类型;在第5行中对输入、输出信号间的逻辑关系进行了描述。
module <顶层模块名> (<输入输出端口列表>);
output 输出端口列表; //输出端口声明
input 输入端口列表; //输入端口声明
/*定义数据,信号的类型,函数声明*/
reg 信号名;
//逻辑功能定义
assign <结果信号名>=<表达式>; //使用assign语句定义逻辑功能
//用always块描述逻辑功能
always @ (<敏感信号表达式>)
begin
//过程赋值
//if-else,case语句
//while,repeat,for循环语句
//task,function调用
end
//调用其他模块
<调用模块名module_name > <例化模块名> (<端口列表port_list >);
//门元件例化
门元件关键字 <例化门元件名> (<端口列表port_list>);
endmodule
5.Verilog语言要素
Verilog 程序由符号流构成,符号包括
空白符(White space)
注释(Comments)
操作符(Operators)
数字(Numbers)
字符串(Strings)
标识符(Identifiers)
关键字(Keywords)等
空白符(White space)
空白符包括:空格、tab、换行和换页。空白符使代码错落有致,阅读起来更方便。在综合时空白符被忽略。
注释(Comment)
◆ 单行注释:以“//”开始到本行结束,不允许续行
◆ 多行注释:多行注释以“/*”开始,到“*/”结束
标识符(Identifiers)
Verilog中的标识符可以是任意一组字母、数字以及符号“$”和“_”(下划线)的组合,但标识符的第一个字符必须是字母或者下划线。另外,标识符是区分大小写的。
6.常量
程序运行中,值不能被改变的量称为常量(constants),Verilog中的常量主要有如下3种类型:
整数
实数
字符串
Verilog有下面四种基本的逻辑状态。
◆ 0:低电平、逻辑0或逻辑非
◆ 1:高电平、逻辑1或“真”
◆ x或X:不确定或未知的逻辑状态
◆ z或Z:高阻态
Verilog中的所有数据类型都在上述4类逻辑状态中取值,其中x和z都不区分大小写,也就是说,值0x1z与值0X1Z是等同的。
7.参数
在Verilog语言中,用参数parameter来定义符号常量,即用parameter来定义一个标志符代表一个常量。参数常用来定义时延和变量的宽度。
其定义格式如下:
parameter 参数名1=表达式1,参数名2=表达式2,参数名3=表达式3, …… ;
例如:
parameter sel=8,code=8'ha3;
//分别定义参数sel代表常数8(10进制),参数code代表常量a3(16进制)