- 1、本文档共60页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二讲:语法入门5课件
第11章结构建模;11.2端口
模块的端口可以是输入端口、输出端口或双向端口。缺省的端口类型为线网类型(即wire类型)。
输出或输入输出端口能够被重新声明为reg型寄存器。
无论是在线网说明还是寄存器说明中,线网或寄存器必须与端口说明中指定的长度相同。例:
Module Micro(PC,Instr,Next_Addr);
input[3:1] PC;//端口说明
output[1:8] Instr;
inout[16:1] Next_Addr;
//重新说明端口类型:
wire[16:1] Next_Addr;//该说明是可选的,但如果指定了,就必须与它的端口说明保持相同长度。
reg[1:8] Instr;//Instr已被重新说明为reg类型,因此它能在always语句或在initial语句中赋值。
endmodule;11.3模块实例语句
一个模块能够在另外一个模块中被引用。模块实例语句形式如下:
module_name instance_name(port_associations);
信号端口可以通过位置或名称关联;但是关联方式不能够混合使用。端口关联形式如下:
port_expr//通过位置。
.PortName(port_expr)//通过名称。
Port_expr可以是以下的任何类型:
1)标识符(reg或net);2)位选择
3)部分选择;4)上述类型的合并
5)表达式(只适用于输入端口)
在位置关联中,端口表达式按指定的顺序与模块中的端口关联。在通过名称实现的关联中,模块端口和端口表达式的关联被显式地指定,因此端口的关联顺序并不重要。;使用两个半加器模块构造全加器;逻辑图如下所示。;在第一个模块实例语句中,HA是模块的名字,h1是实例名称,并且端口按位置关联,即信号P与模块(HA)的端口A连接,信号Q与端口B连接,S1与S连接,C1与模块端口C连接。
在第二个实例中,端口按名称关联,即模块(HA)和端口表达式间的连接是显示地定义的。;下例是使用不同端口表达式形式的模块实例语句。
MicroM1(UdIn[3:0],{WrN,RdN},Status[0],Status[1],UdOut[0:7],TxData);
这个实例语句表示端口表达式可以是标识符(TxData)、位选择(Status[0])、部分位选择(UdIn[3:0])、合并({WrN,RdN})或一个表达式(udOut[0:7]);表达式只能够连接到输入端口。;11.3.1悬空端口
在实例语句中,悬空端口可通过将端口表达式表示为空白来指定为悬空端口,例如:
DFFd1(.Q(QS),.Qbar(),.Data(D),.Preset(),.Clock(CK));//名称对应方式。
DFFd2(QS,,D,,CK);//位置对应方式。
//输出端口Qbar悬空。
//输入端口Preset打开,其值设定为z。
在这两个实例语句中,端口Qbar和Preset悬空。
模块的输入端悬空,值为高阻态z。模块的输出端口悬空,表示该输出端口废弃不用。
;11.3.2不同的端口长度
当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配。例如:
Module Child(Pba,Ppy);
input[5:0]Pba;output[2:0]Ppy;
endmodule
Module Top;
wire[1:2]Bdl;wire[2:6]Mpr;
ChildC1(Bdl,Mpr);
endmodule
在对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]。;11.3.3模块参数值
当某个模块在另一个模块内被引用时,高层模块能够改变低层模块的参数值。模块参数值的改变可采用下述两种方式:
1)参数定义语句(defparam);
2)带参数值的模块引用。
1.参数定义语句
参数定义语句形式如下:
defparamhier_path_name1=value1,hier_path_name2=value2,...;
较低层模块中的层次路径名参数可以使用如下语句显式定义.;例:
Module TOP(NewA,NewB,NewS,NewC);
Input NewA,NewB;
Output NewS,NewC;
Defparam Ha1.XOR_DELAY=5,
//实例Ha1中的参数XOR_DELAY。
Ha1.AND_DELAY=2;
//实例Ha1中参数的AND_DELAY。
HAHal(NewA,NewB,NewS,NewC);
end
文档评论(0)