第二讲:语法入门5课件.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档