模块module例化时,允许一个模块将另一个模块包含在其内部,但模块定义时则不能嵌套。换句话说,一个模块定义的 module-endmodule 关键字对中不得包含另一个模块定义的相关内容。一个模块通过例化自身的方式来与另一个模块连接,例化的模块会创建一个或多个已定义的模块实例。例如,一个计数器模块可以通过例化D触发器模块,来创建多个D触发器实例。下表给出了模块例化的标准语法结构:
表1:模块例化的语法
通过模块声明的名称连接模块端口时,可以在端口列表中省略未连接的端口,或在括号中不提供表达式 [即.port_name () ]。下面咱们举几个例子说明模块的用法:
例1--下面的示例说明了由波形模块(上层模块)驱动的电路模块(下层模块),其中电路模块被例化在波形模块内:
例2-下面的示例创建了例 1 中定义的触发器模块 ffnand 的两个实例。其中一个实例只连接 q 输出,另一个实例只连接 qbar 输出:
// a waveform description for testing
// the nand flip-flop, without the output ports
module ffnand_wave;
reg in1, in2; //variables to drive the circuit
parameter d = 10;
// make two copies of the circuit ffnand
// ff1 has qbar unconnected, ff2 has q unconnected
ffnand ff1(out1, , in1, in2),
ff2(.qbar(out2), .clear(in2), .preset(in1), .q());
// ff3(.q(out3),.clear(in1),,,); is illegal
// define the waveform to stimulate the circuit
initial begin
#d in1 = 0; in2 = 1;
#d in1 = 1;
#d in2 = 0;
#d in2 = 1;
end
endmodule
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!