学习目标
1.说明Verilog模块定义中各个组成部分。
2。理解如何定义模块的端口列表以及在Verilog中如何声明
3.讲述模块实例的端口连接规则
4.理解如何通过有序列表和名字将端口与外部信号相连
5.解释对Verilog标识符的层次引用
1.模块
module模块名, 端口列表,端口声明(如果有端口) 参数声明(可选) |
||||||
|
||||||
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。