/* fex4perm: by karttu, Jan 2 2005. Output the permutation corresponding to factorial expansion that is given in f0 - f3. The result is output in out_d0 - out_d4, i.e. five digits 0-4 given in the order specified by "A060118 algorithm". Should be used together with the module inc4fexb.v */ module fex4perm(input f0, input [1:0] f1, // 0-2 (2b'00, 2b'01 or 2b'10) input [1:0] f2, // 0-3 (2b'00, 2b'01, 2b'10 or 2b'11) input [2:0] f3, // 0-4 (3b'000 - 3b'100) output [2:0] d0, output [2:0] d1, output [2:0] d2, output [2:0] d3, output [2:0] d4); parameter w = 2; parameter [w:0] lev0_0 = 3'b000; parameter [w:0] lev0_1 = 3'b001; parameter [w:0] lev0_2 = 3'b010; parameter [w:0] lev0_3 = 3'b011; parameter [w:0] lev0_4 = 3'b100; wire [w:0] lev1_0 = (0 == f0 ? lev0_0 : lev0_1); wire [w:0] lev1_1 = (0 == f0 ? lev0_1 : lev0_0); wire [w:0] lev2_0 = (2 == f1 ? lev0_2 : lev1_0); wire [w:0] lev2_1 = (1 == f1 ? lev0_2 : lev1_1); wire [w:0] lev2_2 = (2 == f1 ? lev1_0 : (1 == f1 ? lev1_1 : lev0_2)); wire [w:0] lev3_0 = (3 == f2 ? lev0_3 : lev2_0); wire [w:0] lev3_1 = (2 == f2 ? lev0_3 : lev2_1); wire [w:0] lev3_2 = (1 == f2 ? lev0_3 : lev2_2); wire [w:0] lev3_3 = (3 == f2 ? lev2_0 : (2 == f2 ? lev2_1 : (1 == f2 ? lev2_2 : lev0_3))); wire [w:0] lev4_0 = (4 == f3 ? lev0_4 : lev3_0); wire [w:0] lev4_1 = (3 == f3 ? lev0_4 : lev3_1); wire [w:0] lev4_2 = (2 == f3 ? lev0_4 : lev3_2); wire [w:0] lev4_3 = (1 == f3 ? lev0_4 : lev3_3); wire [w:0] lev4_4 = (4 == f3 ? lev3_0 : (3 == f3 ? lev3_1 : (2 == f3 ? lev3_2 : (1 == f3 ? lev3_3 : lev0_4)))); assign d0 = lev4_0; assign d1 = lev4_1; assign d2 = lev4_2; assign d3 = lev4_3; assign d4 = lev4_4; endmodule