一、概述
Verilog HDL是一种用于数字系统设计的语言。用Verilog HDL描述电路设计就是该电路的Verilog HDL模型,也称为模块。Verilog HDL既是一种行为描述的语言也是一种结构描述的语言,这就是说,如果按照一定的规则风格编写,功能行为模块可以通过工具自动的转换为门级互联的结构模块。Verilog 模型可以是实际电路的不同级别的抽象,这些抽象的级别和他们所对应的模型类型共有以下5种,现分别给意见简述。
(1)系统级(system level):用语言提供的高级结构能够实现待设计模块的外部性能的模型。
(2)算法级(algorithem level):用语言提供的高级结构能够实现算法运行的模型。
(3)RTL级(register transfer level):描述数据在寄存器之间的流动和如何处理,控制这些数据流动的模型。
以上三种都属于行为描述,只有RTL级才与逻辑电路有明确的对应关系。
(4)门级(gate level):描述逻辑门以及逻辑门之间的连接的模型,与逻辑电路有明确的连接关系。
(5)开关级(swtich level):描述器件中三极管和存储节点以及它们之间连接的模型。
二、Verilog模块的基本概念
下面先介绍几个简单的Verilog HDL程序,从中了解Verilog模块的特性。
例2.1 下面是二选一的多路选择器的Verilog HDL程序如下:
module muxtwo(out,a,b,sl):
input a,b,sl;
output out;
reg out;
always @(sl or a or b)
if (!sl) out =a ;
else out = b;
endmodule
从上述例子中可以看到,它是一个二选一的多路选择器,输出out与输入a一致,还是与输入b一致,由sl的电平决定。当控制信号sl为非(低电平0时)输出out与输入a相同,否则与b相同。always @(sl or a or b)表示只要这三者其中的一个发生变化就执行下面的语句。人们并不关心他的电路结构,关心的是如何从描述逻辑功能上来描述它。Verilog支持这种逻辑行为描述。
为了实现这个电路的逻辑功能,也能用布尔表达式来描述,Verilog语言中,可以用“~”、“&”、“|”操作符分别表示:求反、相与、和相或运算操作。
所以上述的逻辑功能也能用下面的逻辑代码来实现:
module muxtwo(out,a,b,sl);
input a,b,sl; //输入信号名
output out; //输出信号名
wire nsl,sela,selb;
assign nsl = ~sl;
assign sela = a&nsl;
assign selb = b&nsl;
assign out = sela | selb;
endmodule
上面的例子实现的是,本质上就是一个逻辑表达式,表达的是一个二选一多路选择器。
三、小结
1、Verilog HDL程序是由模块构成的。每个模块的内容都是位于module和endmodule两个语句之间。每个模块实现特定的功能。
2、模块是可以进行层次嵌套的,正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能。
3、如果每个模块都是可以综合的,则通过综合工具可以把它们的功能描述全部都转换为最基本的逻辑单元描述,最后可以用上层模块通过实例引用把这些模块连接起来,把他们整合成一个很大的逻辑系统。
4、Verilog模块可以跟为两种类型;一种是为了让模块最终能生成电路的结构,另一种只是为了测试所设计电路的逻辑功能是否正确。
5、每个模块要进行端口定义,并说明输入、输出口,然后对模块的功能进行描述。
6、Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句可以分写多行。
7、除了endmodule语句外,每个语句和数据定义的最后必须有分号。
8、可以用/*...*/和//....对代码进行做注释。可以增强程序的可读性和可维护性。