Verilog HDL 结构建模实例化语句
发布时间:2008/5/28 0:00:00 访问次数:2755
5.3 实例化语句
1. 例化语法
一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块实例化语句形式如
下:
module_name instance_name(port_associations) ;
信号端口可以通过位置或名称关联;但是关联方式不能够混合使用。端口关联形式如下:
port_expr / / 通过位置。
.portname (port_expr) / / 通过名称。
例[1]:
....
module and (c,a,b);
input a,b;
output c;
...
and a1 (t3, a, b ); //实例化时采用位置关联,t3对应输出端口c,a对应a,b对应b。
and a2( //实例化时采用名字关联,.c是and 器件的端口,其与信号t3相连
.c(t3),
.a(a),
.b(b)
);
2004-08-16 第29页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
....
port_expr 可以是以下的任何类型:
1) 标识符(reg 或net )如 .c(t3),t3为wire型标识符。
2) 位选择,如 .c(d[0]),c端口接到d信号的第0bit 位。
3) 部分选择,如 .bus (din[5:4])。
4) 上述类型的合并,如 .addr({ a1,a2[1:0]}。
5) 表达式(只适用于输入端口),如 .a (wire zire = 0 )。
建议:在例化的端口映射中请采用名字关联,这样,当被调用的模块管脚改变时不易出错。
2. 悬空端口的处理
在我们的实例化中,可能有些管脚没用到,可在映射中采用空白处理,如:
dff d1 (
.q(qs),
.qbar ( ),
.data (d ) ,
.preset ( ), // 该管脚悬空
.clock (ck)
); //名称对应方式。
对输入管脚悬空的,则该管脚输入为高阻 z,输出管脚被悬空的,该输出管脚废弃不用。
3. 不同端口长度的处理
当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配。
例如:
module child (pba, ppy) ;
input [5:0] pba;
output [2:0] ppy;
. . .
endmodule
module top;
wire [1:2] bdl;
wire [2:6] m p r;
child c1 (bdl, mpr) ;
endmodule
2004-08-16 第30页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
在对child 模块的实例中,bdl[2]连接到pba[ 0 ],bdl[1] 连接到pba[ 1 ] ,余下的输入端口
pba[5] 、pba[4] 和pba[3] 悬空,因此为高阻态z 。与之相似,mpr[6]连接到ppy[0],mpr[5]连接到
ppy[1],mpr[4] 连接到ppy[2 ] 。参见下图:
图8 端口匹配
5.3 实例化语句
1. 例化语法
一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块实例化语句形式如
下:
module_name instance_name(port_associations) ;
信号端口可以通过位置或名称关联;但是关联方式不能够混合使用。端口关联形式如下:
port_expr / / 通过位置。
.portname (port_expr) / / 通过名称。
例[1]:
....
module and (c,a,b);
input a,b;
output c;
...
and a1 (t3, a, b ); //实例化时采用位置关联,t3对应输出端口c,a对应a,b对应b。
and a2( //实例化时采用名字关联,.c是and 器件的端口,其与信号t3相连
.c(t3),
.a(a),
.b(b)
);
2004-08-16 第29页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
....
port_expr 可以是以下的任何类型:
1) 标识符(reg 或net )如 .c(t3),t3为wire型标识符。
2) 位选择,如 .c(d[0]),c端口接到d信号的第0bit 位。
3) 部分选择,如 .bus (din[5:4])。
4) 上述类型的合并,如 .addr({ a1,a2[1:0]}。
5) 表达式(只适用于输入端口),如 .a (wire zire = 0 )。
建议:在例化的端口映射中请采用名字关联,这样,当被调用的模块管脚改变时不易出错。
2. 悬空端口的处理
在我们的实例化中,可能有些管脚没用到,可在映射中采用空白处理,如:
dff d1 (
.q(qs),
.qbar ( ),
.data (d ) ,
.preset ( ), // 该管脚悬空
.clock (ck)
); //名称对应方式。
对输入管脚悬空的,则该管脚输入为高阻 z,输出管脚被悬空的,该输出管脚废弃不用。
3. 不同端口长度的处理
当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配。
例如:
module child (pba, ppy) ;
input [5:0] pba;
output [2:0] ppy;
. . .
endmodule
module top;
wire [1:2] bdl;
wire [2:6] m p r;
child c1 (bdl, mpr) ;
endmodule
2004-08-16 第30页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
在对child 模块的实例中,bdl[2]连接到pba[ 0 ],bdl[1] 连接到pba[ 1 ] ,余下的输入端口
pba[5] 、pba[4] 和pba[3] 悬空,因此为高阻态z 。与之相似,mpr[6]连接到ppy[0],mpr[5]连接到
ppy[1],mpr[4] 连接到ppy[2 ] 。参见下图:
图8 端口匹配