模块和端口

学习目标

1.说明Verilog模块定义中各个组成部分。

2。理解如何定义模块的端口列表以及在Verilog中如何声明

3.讲述模块实例的端口连接规则

4.理解如何通过有序列表和名字将端口与外部信号相连

5.解释对Verilog标识符的层次引用

 1.模块

module模块名,

端口列表,端口声明(如果有端口)

参数声明(可选)

wire,reg和

其它类型的变量声明

数据流语句

(assign)

低层模块实例

always块和initial块,所有

行为语句全都在这些块中

任务和函数

endmodule模块语句结束

 2.端口

模块与外部环境交互的接口

2.1端口列表

在模块定义中包括一个可选的端口列表,但如果模块与外部环境没有交换任何信号,则可以没有端口列表。

2.2端口声明

Verilog关键字 端口类型
input 输入端口
output 输出端口
inout 输入/输出端口

在Verilog中,所有端口隐含地声明为wire类型,因此如果希望端口具有wire数据类型,将其声明为三种类型之一即可;如果输出类型的端口需要保存数据,则必须将其

显示地声明为reg数据类型。不能将input和inout类型的端口声明为reg数据类型。

2.3端口连接规则

端口由模块外部和内部两部分相互连接构成

端口 内部数据类型 外部数据类型
输入端口 net net/reg
输出端口 reg/net net
输入/输出端口 net net

位宽匹配

允许内外不同位宽,但会有警告

未连接端口

允许模块实例的端口保持未连接状态

2.4端口与外部信号的连接

对模块调用(实例调用)的时候,有两种方法将模块定义的端口与外部环境中的信号连接起来:

1.按顺序连接

2.按名字链接

顺序端口连接

直观的方法,需要连接到模块实例的信号必须与模块声明时目标端口在端口列表中的位置保持一致。

命名端口连接

在这种方法中端口和相应的外部信号按照其名字进行连接。端口连接可以以任意顺序出现,只要保证端口和外部信号的正确匹配性

在这种方法中,需要与外部信号连接的端口必须用名字进行说明,而不需要的端口只需要简单地忽略掉即可。

命名端口连接的另一个优点是,只要端口的名字不变,即使模块端口列表中端口的顺序发生了变化,模块实例的端口也无需进行调整。

3层次命名

层次名由一连串使用“.”分隔的标识符组成,每一个标识符代表一个层次,这样设计者就可以在设计中的任何地方通过指定完整的层次名对每一个

标识符进行访问。如果需要显示层次,用户可以在系统任务$display中使用特殊字符%m。

原文地址:https://www.cnblogs.com/fxygrzb/p/5920069.html