module AL_MAP_SEQ ( output reg q, input ce, input clk, input sr, input d ); parameter DFFMODE = "FF"; //FF,LATCH parameter REGSET = "RESET"; //RESET/SET parameter SRMUX = "SR"; //SR/INV parameter SRMODE = "SYNC"; //SYNC/ASYNC wire clk_ce; assign clk_ce = ce ? clk : 1'b0; wire srmux; generate case (SRMUX) "SR": assign srmux = sr; "INV": assign srmux = ~sr; default: assign srmux = sr; endcase endgenerate wire regset; generate case (REGSET) "RESET": assign regset = 1'b0; "SET": assign regset = 1'b1; default: assign regset = 1'b0; endcase endgenerate initial q = regset; generate if (DFFMODE == "FF") begin if (SRMODE == "ASYNC") begin always @(posedge clk_ce, posedge srmux) if (srmux) q <= regset; else q <= d; end else begin always @(posedge clk_ce) if (srmux) q <= regset; else q <= d; end end else begin // DFFMODE == "LATCH" if (SRMODE == "ASYNC") begin always @(clk_ce, srmux) if (srmux) q <= regset; else q <= d; end else begin always @(clk_ce) if (srmux) q <= regset; else q <= d; end end endgenerate endmodule module AL_MAP_LUT1 ( output o, input a ); parameter [1:0] INIT = 2'h0; parameter EQN = "(A)"; assign o = a ? INIT[1] : INIT[0]; endmodule module AL_MAP_LUT2 ( output o, input a, input b ); parameter [3:0] INIT = 4'h0; parameter EQN = "(A)"; wire [1:0] s1 = b ? INIT[ 3:2] : INIT[1:0]; assign o = a ? s1[1] : s1[0]; endmodule module AL_MAP_LUT3 ( output o, input a, input b, input c ); parameter [7:0] INIT = 8'h0; parameter EQN = "(A)"; wire [3:0] s2 = c ? INIT[ 7:4] : INIT[3:0]; wire [1:0] s1 = b ? s2[ 3:2] : s2[1:0]; assign o = a ? s1[1] : s1[0]; endmodule module AL_MAP_LUT4 ( output o, input a, input b, input c, input d ); parameter [15:0] INIT = 16'h0; parameter EQN = "(A)"; wire [7:0] s3 = d ? INIT[15:8] : INIT[7:0]; wire [3:0] s2 = c ? s3[ 7:4] : s3[3:0]; wire [1:0] s1 = b ? s2[ 3:2] : s2[1:0]; assign o = a ? s1[1] : s1[0]; endmodule module AL_MAP_LUT5 ( output o, input a, input b, input c, input d, input e ); parameter [31:0] INIT = 32'h0; parameter EQN = "(A)"; assign o = INIT >> {e, d, c, b, a}; endmodule module AL_MAP_LUT6 ( output o, input a, input b, input c, input d, input e, input f ); parameter [63:0] INIT = 64'h0; parameter EQN = "(A)"; assign o = INIT >> {f, e, d, c, b, a}; endmodule module AL_MAP_ALU2B ( input cin, input a0, b0, c0, d0, input a1, b1, c1, d1, output s0, s1, cout ); parameter [15:0] INIT0 = 16'h0000; parameter [15:0] INIT1 = 16'h0000; parameter FUNC0 = "NO"; parameter FUNC1 = "NO"; endmodule module AL_MAP_ADDER ( input a, input b, input c, output [1:0] o ); parameter ALUTYPE = "ADD"; generate case (ALUTYPE) "ADD": assign o = a + b + c; "SUB": assign o = a - b - c; "A_LE_B": assign o = a - b - c; "ADD_CARRY": assign o = { a, 1'b0 }; "SUB_CARRY": assign o = { ~a, 1'b0 }; "A_LE_B_CARRY": assign o = { a, 1'b0 }; default: assign o = a + b + c; endcase endgenerate endmodule