赞
踩
1.单个模块的例化
verilog中模块的例化有两种方式,一种是基于端口位置来例化模块,另一种则是根据端口名称来例化。首先介绍第一种基于端口位置来例化。在此之前,我们先给出一个简单的模块如下:
上图中的mod_a模块声明如下:
module mod_a ( output, output, input, input, input, input );
为了在模块top_module例化上面的模块,我们首先声明top_module。
module top_module ( input a, input b, input c, input d, output out1, output out2 );
采用基于端口位置的例化方法,要注意例化时连接六个端口(out1,out2,a,b,c,d)与该模块声明时对应的位置顺序是一样的。比如上面mod_a模块端口声明 先是两个输出,再是四个输入,所以例化应该为,
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a inst(
out1,out2,a,b,c,d);
endmodule
上面第一种例化方式书写上较为简单,但在实际中我们往往用的是第二种基于端口名称的例化方式。
module top_module (
input a,
input b,
input c,
input d,
output out1,
output out2
);
mod_a inst(
.in1(a),
.in2(b),
.in3(c),
.in4(d),
.out1(out1),
.out2(out2)
);
endmodule
例化格式是
模块名 例化名(
.模块端口(连接到的端口名称)
);
在实际verilog编程中第二种应用最多。
2.多个模块的例化
在实际中往往会遇到多个模块的例化,下面我们以D触发器为例,在top_module中串联例化三个D触发器模块。
首先给出D触发器模块my_dff的声明
module my_dff ( input clk, input d, output q );
理想的连接框图如下:
从图中看到,在top_module模块中要例化三个my_dff,所以模块的例化名不能相同,其次每个模块的输入输出都不一样,且中间还需要进行不同D触发器之间的连接,所以还需要先声明两根导线。剩下的连接具体看图连线就好了。具体代码如下:
module top_module ( input clk, input d, output q );
wire q_d_1,q_d_2;
my_dff inst0(
.clk(clk),
.d(d),
.q(q_d_1)
);
my_dff inst1(
.clk(clk),
.d(q_d_1),
.q(q_d_2)
);
my_dff inst2(
.clk(clk),
.d(q_d_2),
.q(q)
);
endmodule
例化补充:
如果例化的端口需要悬空、持续高或低电平、啥都不接,应该的例化格式为
module top_module ( input clk, input d, output q );
my_dff inst0(
.clk(clk),
.d(1)//持续高电平,
.q(),//悬空
);
如果针对第一种严格按位置的例化,不需要的端口需要保留逗号
my_dff inst0(clk,d , );
);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。