Selects each bit from one of two input words, based on a bitmask of the same width. For each bitmask bit, 0 selects the corresponding bit from word_in_0, and 1 selects from word_in_1.
This function may look trivial, but it implements the important and useful Shannon Decomposition, originally known as Boole's Expansion Theorem, which allows you to compose smaller Boolean functions of N variables into a larger one of N+1 variables.
`default_nettype none module Multiplexer_Bitwise_2to1 #( parameter WORD_WIDTH = 0 ) ( input wire [WORD_WIDTH-1:0] bitmask, input wire [WORD_WIDTH-1:0] word_in_0, input wire [WORD_WIDTH-1:0] word_in_1, output wire [WORD_WIDTH-1:0] word_out ); generate genvar j; for(j = 0; j < WORD_WIDTH; j = j+1) begin: per_bit Multiplexer_Binary_Behavioural #( .WORD_WIDTH (1), .ADDR_WIDTH (1), .INPUT_COUNT (2) ) bitwise ( .selector (bitmask[j]), .words_in ({word_in_1[j],word_in_0[j]}), .word_out (word_out[j]) ); end endgenerate endmodule