| 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 |