Verilog 端口

2025年3月17日 | 阅读 3 分钟

端口是 Verilog 模块的一个重要组成部分。端口用于模块通过输入和输出来与外部世界通信。

它通过芯片的引脚与芯片通信,因为模块就像一个安装在 PCB 上的制造芯片。

端口列表中的每个端口都必须声明为 input, outputinout。所有声明为其中之一的端口默认都假定为 wire,才能声明它,否则需要再次声明。

端口,也称为引脚或端子,用于将模块与其他模块连接起来。

  • 如果模块不与环境交换任何信号,则列表中没有端口。
  • 考虑一个在顶层模块内部实例化的 4 位全加器。
  • 模块 fulladd4 在端口 a、b 和 c_in 上接收输入,并在端口 sum 和 c_out 上产生输出。
Verilog Ports

端口声明

端口列表中的每个端口都根据端口信号的方向定义为 input、output 或 inout。

如果端口声明包含 net 或变量类型,则该端口被认为已完全声明。在 net 或变量类型声明中声明同一端口是非法的。

如果端口声明不包含 net 或变量类型,则可以在 net 或变量类型声明中再次声明该端口。

例如,考虑上图中顶层和全加器的端口。

注意:按照惯例,模块的输出始终位于端口列表的第一位。此约定也用于 Verilog 中的预定义模块。

线和寄存器

Verilog 中,所有端口声明都隐式声明为 wire。如果一个端口要作为 wire,则将其声明为 output、input 或 inout 即可。

输入和 inout 端口通常声明为 wires。但是,如果输出端口要保持其值,则必须将其声明为 reg,如下所示

注意:类型为 inputinout 的端口不能声明为 reg。

端口连接规则

在模块实例化中指定的信号与模块定义中的端口之间进行连接有两种方法。

1. 按顺序列表连接: 这是初学者使用的简单方法。要连接的信号必须以与模块定义中的端口相同的顺序出现在模块实例化中。

2. 按名称连接端口: 对于大型设计,模块大约有 50 个或更多端口。在这种情况下,记住模块定义中端口的顺序既复杂又不切实际。

Verilog 提供了通过端口名称而不是位置将外部信号连接到端口的功能。

通过名称连接端口的另一个主要原因是,只要端口名称未更改,就可以重新排列模块的端口列表中的端口顺序,而无需更改模块实例化中的端口连接。

端口的变化

  • Verilog 经历了一些研究,1995 年的原始 IEEE 版本具有以下端口声明方式。

此处,模块声明必须首先列出括号内的端口名称。然后,稍后在模块的内部定义这些端口的方向。

  • ANSI-C 风格的端口命名于 2001 年推出。它允许在端口列表中指定类型。

下一个主题赋值语句