资源描述:
《verilog_hdl硬件描述语言(下)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、下载第9章结构建模本章讲述VerilogHDL中的结构建模方式。结构建模方式用以下三种实例语句描述:¥Gate实例语句¥UDP实例语句¥Module实例语句第5章和第6章已经讨论了门级建模方式和UDP建模方式,本章讲述模块实例语句。9.1模块VerilogHDL中,基本单元定义成模块形式,如下所示:modulemodule_name(port_list);Declarations_and_Statementsendmodule端口队列port_list列出了该模块通过哪些端口与外部模块通信。9.2端口模块的端口可以是输入端口、输出端口或双向端口。缺省的端口类型为线网类型(即wire类型)。
2、但是,端口可被显式地指定为线网。输出或输入输出端口能够被重新声明为reg型寄存器。无论是在线网说明还是寄存器说明中,线网或寄存器必须与端口说明中指定的长度相同。下面是一些端口说明实例。moduleMicro(PC,Instr,NextAddr);//端口说明input[3:1]PC;output[1:8]Instr;inout[16:1]NextAddr;//重新说明端口类型:wire[16:1]NextAddr;//该说明是可选的,但如果指定了,就必须与它的端口说明保持相同长度。reg[1:8]Instr;//Instr已被重新说明为reg类型,因此它能在always语句或在initia
3、l语句中赋值。...endmodule9.3模块实例语句一个模块能够在另外一个模块中被引用,这样就建立了描述的层次。模块实例语句形式如下:module_nameinstance_name(port_associations);信号端口可以通过位置或名称关联;但是关联方式不能够混合使用。端口关联形式如下:84VerilogHDL硬件描述语言下载port_expr//通过位置。.PortName(port_expr)//通过名称。port_expr可以是以下的任何类型:1)标识符(reg或net)2)位选择3)部分选择4)上述类型的合并5)表达式(只适用于输入端口)在位置关联中,端口表达式按指
4、定的顺序与模块中的端口关联。在通过名称实现的关联中,模块端口和端口表达式的关联被显式地指定,因此端口的关联顺序并不重要。下例使用两个半加器模块构造全加器;逻辑图如图9-1所示。moduleHA(A,B,S,C);inputA,B;outputS,C;parameterAND_DELAY=1,XOR_DELAY=2;assign#XOR_DELAYS=A^B;assign#AND_DELAYC=A&B;endmodulemoduleFA(P,Q,Cin,Sum,Cout);图9-1使用两个半加器模块构造inputP,Q,Cin;outputSum,Cout;的全加器parameterOR_D
5、ELAY=1;wireS1,C1,C2;//两个模块实例语句HAh1(P,Q,S1,C1);//通过位置关联。HAh2(.A(Cin),.S(Sum),.B(S1),.C(C2));//通过端口与信号的名字关联。//门实例语句:or#OR_DELAYO1(Cout,C1,C2);endmodule在第一个模块实例语句中,HA是模块的名字,h1是实例名称,并且端口按位置关联,即信号P与模块(HA)的端口A连接,信号Q与端口B连接,S1与S连接,C1与模块端口C连接。在第二个实例中,端口按名称关联,即模块(HA)和端口表达式间的连接是显示地定义的。下例是使用不同端口表达式形式的模块实例语句。M
6、icroM1(UdIn[3:0],{WrN,RdN},Status[0],Status[1],&UdOut[0:7],TxData);这个实例语句表示端口表达式可以是标识符(TxData)、位选择(Status[0])、部分位选择(UdIn[3:0])、合并({WrN,RdN})或一个表达式(&udOut[0:7]);表达式只能够连接到输入端口。9.3.1悬空端口在实例语句中,悬空端口可通过将端口表达式表示为空白来指定为悬空端口,例如:第9章结构建模85下载DFFd1(.Q(QS),.Qbar(),.Data(D),.Preset(),.Clock(CK));//名称对应方式。DFFd2(
7、QS,,D,,CK);//位置对应方式。//输出端口Qbar悬空。//输入端口Preset打开,其值设定为z。在这两个实例语句中,端口Qbar和Preset悬空。模块的输入端悬空,值为高阻态z。模块的输出端口悬空,表示该输出端口废弃不用。9.3.2不同的端口长度当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配。例如:moduleChild(Pba,Ppy);input[5:0]Pba;out