104 lines
2.5 KiB
Coq
104 lines
2.5 KiB
Coq
|
module mux_512x1 (in,sel,out);
|
||
|
input [511:0] in;
|
||
|
input [8:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_256x1 m512_0(.in(in[255:0]),.sel(sel[7:0]),.out(out0_w));
|
||
|
mux_256x1 m512_1(.in(in[511:256]),.sel(sel[7:0]),.out(out1_w));
|
||
|
mux_2x1 m512_2(.a(out0_w),.b(out1_w),.sel(sel[8]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_256x1 (in,sel,out);
|
||
|
input [255:0] in;
|
||
|
input [7:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_128x1 m256_0(.in(in[127:0]),.sel(sel[6:0]),.out(out0_w));
|
||
|
mux_128x1 m256_1(.in(in[255:128]),.sel(sel[6:0]),.out(out1_w));
|
||
|
mux_2x1 m256_2(.a(out0_w),.b(out1_w),.sel(sel[7]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_128x1 (in,sel,out);
|
||
|
input [127:0] in;
|
||
|
input [6:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_64x1 m128_0(.in(in[63:0]),.sel(sel[5:0]),.out(out0_w));
|
||
|
mux_64x1 m128_1(.in(in[127:64]),.sel(sel[5:0]),.out(out1_w));
|
||
|
mux_2x1 m128_2(.a(out0_w),.b(out1_w),.sel(sel[6]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_64x1 (in,sel,out);
|
||
|
input [63:0] in;
|
||
|
input [5:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_32x1 m64_0(.in(in[31:0]),.sel(sel[4:0]),.out(out0_w));
|
||
|
mux_32x1 m64_1(.in(in[63:32]),.sel(sel[4:0]),.out(out1_w));
|
||
|
mux_2x1 m64_2(.a(out0_w),.b(out1_w),.sel(sel[5]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_32x1 (in,sel,out);
|
||
|
input [31:0] in;
|
||
|
input [4:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_16x1 m32_0(.in(in[15:0]),.sel(sel[3:0]),.out(out0_w));
|
||
|
mux_16x1 m32_1(.in(in[31:16]),.sel(sel[3:0]),.out(out1_w));
|
||
|
mux_2x1 m32_2(.a(out0_w),.b(out1_w),.sel(sel[4]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_16x1 (in,sel,out);
|
||
|
input [15:0] in;
|
||
|
input [3:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_8x1 m16_0(.in(in[7:0]),.sel(sel[2:0]),.out(out0_w));
|
||
|
mux_8x1 m16_1(.in(in[15:8]),.sel(sel[2:0]),.out(out1_w));
|
||
|
mux_2x1 m16_2(.a(out0_w),.b(out1_w),.sel(sel[3]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_8x1 (in,sel,out);
|
||
|
input [7:0] in;
|
||
|
input [2:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_4x1 m8_0(.in(in[3:0]),.sel(sel[1:0]),.out(out0_w));
|
||
|
mux_4x1 m8_1(.in(in[7:4]),.sel(sel[1:0]),.out(out1_w));
|
||
|
mux_2x1 m8_2(.a(out0_w),.b(out1_w),.sel(sel[2]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_4x1 (in,sel,out);
|
||
|
input [3:0] in;
|
||
|
input [1:0]sel;
|
||
|
output out;
|
||
|
wire out0_w, out1_w;
|
||
|
|
||
|
mux_2x1 m4_0(.a(in[0]),.b(in[1]),.sel(sel[0]),.out(out0_w));
|
||
|
mux_2x1 m4_1(.a(in[2]),.b(in[3]),.sel(sel[0]),.out(out1_w));
|
||
|
mux_2x1 m4_2(.a(out0_w),.b(out1_w),.sel(sel[1]),.out(out));
|
||
|
|
||
|
endmodule
|
||
|
|
||
|
module mux_2x1 (a,b,sel,out);
|
||
|
input a,b;
|
||
|
input sel;
|
||
|
output out;
|
||
|
|
||
|
assign out = sel ? b : a;
|
||
|
|
||
|
endmodule
|