blob: ae7b59f0b16b50e71a6f5541d520ddb7c9c8c433 [file] [log] [blame]
module MUX8LUT_frame_config (A, B, C, D, E, F, G, H, S0, S1, S2, S3, M_AB, M_AD, M_AH, M_EF, ConfigBits);
parameter NoConfigBits = 2;// has to be adjusted manually (we don't use an arithmetic parser for the value)
// IMPORTANT: this has to be in a dedicated line
input A; // MUX inputs
input B;
input C;
input D;
input E;
input F;
input G;
input H;
input S0;
input S1;
input S2;
input S3;
output M_AB;
output M_AD;
output M_AH;
output M_EF;
// GLOBAL all primitive pins that are connected to the switch matrix have to go before the GLOBAL label
input [NoConfigBits-1:0] ConfigBits;
wire AB, CD, EF, GH;
wire sCD, sEF, sGH, sEH;
wire AD, EH, AH;
wire EH_GH;
wire c0, c1;// configuration bits
assign c0 = ConfigBits[0];
assign c1 = ConfigBits[1];
// see figure (column-wise left-to-right)
//assign AB = S0 ? B : A;
my_mux2 my_mux2_AB(
.A0(A),
.A1(B),
.S(S0),
.X(AB)
);
//assign CD = sCD ? D : C;
my_mux2 my_mux2_CD(
.A0(C),
.A1(D),
.S(sCD),
.X(CD)
);
//assign EF = sEF ? F : E;
my_mux2 my_mux2_EF(
.A0(E),
.A1(F),
.S(sEF),
.X(EF)
);
//assign GH = sGH ? H : G;
my_mux2 my_mux2_GH(
.A0(G),
.A1(H),
.S(sGH),
.X(GH)
);
//assign sCD = c0 ? S0 : S1;
my_mux2 my_mux2_sCD(
.A0(S1),
.A1(S0),
.S(c0),
.X(sCD)
);
//assign sEF = c1 ? S0 : S2;
my_mux2 my_mux2_sEF(
.A0(S2),
.A1(S0),
.S(c1),
.X(sEF)
);
//assign sGH = c0 ? sEF : sEH;
my_mux2 my_mux2_sGH(
.A0(sEH),
.A1(sEF),
.S(c0),
.X(sGH)
);
//assign sEH = c1 ? S1 : S3;
my_mux2 my_mux2_sEH(
.A0(S3),
.A1(S1),
.S(c1),
.X(sEH)
);
//assign AD = S1 ? CD : AB;
my_mux2 my_mux2_AD(
.A0(AB),
.A1(CD),
.S(S1),
.X(AD)
);
//assign EH = sEH ? GH : EF;
my_mux2 my_mux2_EH(
.A0(EF),
.A1(GH),
.S(sEH),
.X(EH)
);
//assign AH = S3 ? EH : AD;
my_mux2 my_mux2_AH(
.A0(AD),
.A1(EH),
.S(S3),
.X(AH)
);
//assign EH_GH = c0 ? EH : GH;
my_mux2 my_mux2_EH_GH(
.A0(GH),
.A1(EH),
.S(c0),
.X(EH_GH)
);
assign M_AB = AB;
//assign M_AD = c0 ? AD : CD;
my_mux2 my_mux2_M_AD(
.A0(CD),
.A1(AD),
.S(c0),
.X(M_AD)
);
//assign M_AH = c1 ? AH : EH_GH;
my_mux2 my_mux2_M_AH(
.A0(EH_GH),
.A1(AH),
.S(c1),
.X(M_AH)
);
assign M_EF = EF;
endmodule