



1995年,IEEE(Institute of Electrical and Electronics Engineers,电气电子工程师学会)正式颁布IEEE 1364-1995标准,标志着Verilog HDL首个国际标准(即Verilog-1995)的诞生。随后,该标准在2001年和2005年分别经历了修订,形成了Verilog-2001标准(IEEE 1364-2001)和Verilog-2005标准(IEEE 1364-2005)。尽管版本更迭,但各个版本的基本语法保持着高度的一致性。代码1-1展示了Verilog HDL中基本的模块结构。
module led_on (
output wire led_out
);
assign led_out = 1'b0 ;
endmodule
一个Verilog HDL模块包含以下基本要素。
(1)以关键字module开始,以关键字endmodule结束。
(2)关键字module后面紧跟模块的名称。代码1-1中,模块名为led_on。
(3)模块名称之后是模块端口列表,用半角圆括号“()”括起,并在括号外以半角分号“;”结束。有些模块不需要端口列表,如测试平台模块,这时在模块名称后直接以半角分号结束。
在模块端口列表中,若存在多个信号,它们之间以半角逗号“,”进行分隔,最后一个信号后不再添加半角逗号。在代码1-1中,由于只有一个端口信号,因此没有添加半角逗号。
(4)端口列表后是模块的主体部分,在这里使用Verilog HDL规定的语句完成逻辑功能的建模。
Verilog HDL是一种具有层次性的硬件描述语言,它能够用于描述从基础的逻辑门到复杂的数字系统。在传统的高级程序设计语言中,层次结构通常是通过模块调用来构建的。在Verilog HDL中,这一过程被称为例化(Instantiation)。由于Verilog HDL专注于硬件描述,因此例化一词不仅表示调用模块,还蕴含了将特定功能模块具体化或实例化的概念。
为了更清晰地说明问题,我们将代码1-1设计得复杂一些,参考代码1-2,并在代码1-3中例化它。代码1-3是代码1-2中描述的硬件模块led_on的测试平台模块。
module led_on
(
output wire led1_out,
output wire led2_out,
input wire SW1_2
);
assign led1_out = 1'0 ;
assign led2_out = SW1_2 ;
endmodule
module tb_led ;
wire led1 ;
wire led2 ;
reg sw_in = 0 ;
// 例化led_on模块
led_on led_en_inst0
(
/*output wire */.led1_out ( led1 ) ,
/*output wire */.led2_out ( led2 ) ,
/*input wire */.SW1_2 ( sw_in )
);
initial begin
#5 sw_in = 1 ;
#25 sw_in = 0 ;
#65 sw_in = 1 ;
end
endmodule
图1-1更直观地说明了这种例化关系。
图1-1
在tb_led模块中例化led_on模块,相当于在对应位置使用led_on模块中的设计内容。