0

I have a 4:1 Mux as follows:

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

In another module I have an array F of length 4 as input and need an instance of the 4:1 mux in this module with elements F[1] and F[3] of F as selectors. How can I specifiy this when declaring the instance? Surely this code below does not work, but it should illustrate what I am trying to achieve.

module someModule (inputs... F[3:0], outputs...);
 // some code...
 mux mux4_1 (A, B, C, D, F[1]F[3], Y);
endmodule
1
  • 2
    {F[1],F[3]} but make sure you got the order the right way around. Normally the select goes MS to LS: {F[3] , F[1]} Commented Apr 6, 2020 at 11:26

1 Answer 1

1

To create you selector signal, you can simply concatenate the signal you need from your array.

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]

A faster implementation would be in your case:

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

In this case, the LSB of the selector is F[3] and its MSB is F[1]

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.