Menu
CoddyTech

按顺序映射端口

本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 35 课,共 90 课。

在上一课中,你学习了按名称映射端口,也就是用 .port(signal) 明确标记每个连接。现在我们来学习另一种方法:按顺序映射端口。

它会根据信号在模块定义中出现的顺序将信号连接到模块的端口。你只需在括号中列出信号,Verilog 就会逐个匹配它们。

语法:

module_name instance_name (signal1, signal2, signal3);

第一个信号连接到第一个端口,第二个信号连接到第二个端口,依此类推。

示例

模块定义:

module or_gate (
  input in1,      // 第一个端口
  input in2,      // 第二个端口
  output result   // 第三个端口
);
  assign result = in1 | in2;
endmodule

按顺序进行端口映射的实例化:

or_gate or1 (input_a, input_b, output_y);

这会连接:

  • 第一个信号 input_a → 第一个端口 in1
  • 第二个信号 input_b → 第二个端口 in2
  • 第三个信号 output_y → 第三个端口 result

顺序很重要

使用按顺序进行端口映射时,顺序至关重要:

// 顺序正确
or_gate or1 (input_a, input_b, output_y);

// 顺序错误:信号连接到了错误的端口!
or_gate or1 (input_b, input_a, output_y);
or_gate or1 (output_y, input_a, input_b);

如果顺序弄错,连接就会接到错误的端口上。这可能很难调试,因为乍一看代码似乎是正确的。

按名称映射端口与按顺序映射端口

特点按名称按顺序
语法.port(signal)signal1, signal2
顺序重要吗?不重要重要
是否能自我说明?是否
出错风险低高
推荐用于大多数设计仅限简单情况

何时使用按顺序映射端口

在以下情况下,可以按顺序映射端口:

  • 模块的端口很少(2-3 个)
  • 端口顺序一目了然,而且不太可能改变
  • 你正在编写快速测试平台

对于大多数设计,按名称映射端口更受推荐,因为这样更清晰,也不容易出错。

challenge icon

挑战

按端口顺序映射,按正确顺序列出信号,完成实例化。

要做什么:

模块端口(按此顺序):

  1. input en(使能)
  2. input [7:0] d(数据输入)
  3. output [7:0] q(数据输出)

要连接的信号:

  • enable_signal → 连接到 en
  • data_input → 连接到 d
  • data_output → 连接到 q

亲手试试

module register (
  input en,
  input [7:0] d,
  output [7:0] q
);
  assign q = en ? d : q;
endmodule

module top (
  input enable_signal,
  input [7:0] data_input,
  output [7:0] data_output
);
  
  // TODO: 使用 ORDER 映射实例化 register,并将实例命名为 reg1
  // 按正确顺序列出信号:enable_signal, data_input, data_output
  // 不要使用 .port(signal) 语法

endmodule
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Verilog 在线编译器