首页 > 解决方案 > 如何在 Verilog 的模块中传递特定的数组索引作为输入?

问题描述

我有一个 4:1 多路复用器,如下所示:

module mux4_1 (input [31:0]A, input [31:0]B, input [31:0]C, input [31:0]D, input sel[1:0], output [31:0]Y);

wire mux1o, mux2o;
mux2_1 mux1 (A, B, sel[0], mux1o);
mux2_1 mux2 (C, D, sel[0], mux2o);
mux2_1 mux3 (mux1o, mux2o, sel[1], Y);

endmodule

在另一个模块中,我有一个长度为 4 的数组F作为输入,并且需要该模块中的 4:1 多路复用器的实例,其中包含元素F[1]F[3]ofF作为选择器。声明实例时如何指定这个?当然,下面的这段代码不起作用,但它应该说明我想要实现的目标。

module someModule (inputs... F[3:0], outputs...);
 // some code...
 mux mux4_1 (A, B, C, D, F[1]F[3], Y);
endmodule

标签: verilogsystem-veriloghdlmultiplexing

解决方案


要创建选择器信号,您可以简单地连接阵列中所需的信号。

wire [1:0] selector;
assign selector = {F[1], F[3]};

// selector is a 2 bit vector where 
// selector[0] == F[3]
// selector[1] == F[1]

在您的情况下,更快的实施将是:

module someModule (inputs... F[3:0], outputs...);
     // some code...
     mux4_1 myInstance (A, B, C, D, {F[1], F[3]} , Y);
endmodule

在这种情况下,选择器的 LSB 为 F[3],其 MSB 为 F[1]


推荐阅读