| module EFX_LUT4( | |
| output O, | |
| input I0, | |
| input I1, | |
| input I2, | |
| input I3 | |
| ); | |
| parameter LUTMASK = 16'h0000; | |
| wire [7:0] s3 = I3 ? LUTMASK[15:8] : LUTMASK[7:0]; | |
| wire [3:0] s2 = I2 ? s3[ 7:4] : s3[3:0]; | |
| wire [1:0] s1 = I1 ? s2[ 3:2] : s2[1:0]; | |
| assign O = I0 ? s1[1] : s1[0]; | |
| endmodule | |
| module EFX_ADD( | |
| output O, | |
| output CO, | |
| input I0, | |
| input I1, | |
| input CI | |
| ); | |
| parameter I0_POLARITY = 1; | |
| parameter I1_POLARITY = 1; | |
| wire i0; | |
| wire i1; | |
| assign i0 = I0_POLARITY ? I0 : ~I0; | |
| assign i1 = I1_POLARITY ? I1 : ~I1; | |
| assign {CO, O} = i0 + i1 + CI; | |
| endmodule | |
| module EFX_FF( | |
| output reg Q, | |
| input D, | |
| input CE, | |
| input CLK, | |
| input SR | |
| ); | |
| parameter CLK_POLARITY = 1; | |
| parameter CE_POLARITY = 1; | |
| parameter SR_POLARITY = 1; | |
| parameter SR_SYNC = 0; | |
| parameter SR_VALUE = 0; | |
| parameter SR_SYNC_PRIORITY = 0; | |
| parameter D_POLARITY = 1; | |
| wire clk; | |
| wire ce; | |
| wire sr; | |
| wire d; | |
| wire prio; | |
| wire sync; | |
| wire async; | |
| assign clk = CLK_POLARITY ? CLK : ~CLK; | |
| assign ce = CE_POLARITY ? CE : ~CE; | |
| assign sr = SR_POLARITY ? SR : ~SR; | |
| assign d = D_POLARITY ? D : ~D; | |
| initial Q = 1'b0; | |
| generate | |
| if (SR_SYNC == 1) | |
| begin | |
| if (SR_SYNC_PRIORITY == 1) | |
| begin | |
| always @(posedge clk) | |
| if (sr) | |
| Q <= SR_VALUE; | |
| else if (ce) | |
| Q <= d; | |
| end | |
| else | |
| begin | |
| always @(posedge clk) | |
| if (ce) | |
| begin | |
| if (sr) | |
| Q <= SR_VALUE; | |
| else | |
| Q <= d; | |
| end | |
| end | |
| end | |
| else | |
| begin | |
| always @(posedge clk or posedge sr) | |
| if (sr) | |
| Q <= SR_VALUE; | |
| else if (ce) | |
| Q <= d; | |
| end | |
| endgenerate | |
| endmodule | |
| module EFX_GBUFCE( | |
| input CE, | |
| input I, | |
| output O | |
| ); | |
| parameter CE_POLARITY = 1'b1; | |
| wire ce; | |
| assign ce = CE_POLARITY ? CE : ~CE; | |
| assign O = I & ce; | |
| endmodule | |
| module EFX_RAM_5K( | |
| input [WRITE_WIDTH-1:0] WDATA, | |
| input [WRITE_ADDR_WIDTH-1:0] WADDR, | |
| input WE, | |
| input WCLK, | |
| input WCLKE, | |
| output [READ_WIDTH-1:0] RDATA, | |
| input [READ_ADDR_WIDTH-1:0] RADDR, | |
| input RE, | |
| input RCLK | |
| ); | |
| parameter READ_WIDTH = 20; | |
| parameter WRITE_WIDTH = 20; | |
| parameter OUTPUT_REG = 1'b0; | |
| parameter RCLK_POLARITY = 1'b1; | |
| parameter RE_POLARITY = 1'b1; | |
| parameter WCLK_POLARITY = 1'b1; | |
| parameter WE_POLARITY = 1'b1; | |
| parameter WCLKE_POLARITY = 1'b1; | |
| parameter WRITE_MODE = "READ_FIRST"; | |
| parameter INIT_0 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_1 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_2 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_3 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_4 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_5 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_6 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_7 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_8 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_9 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_A = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_B = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_C = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_D = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_E = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_F = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_10 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_11 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_12 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| parameter INIT_13 = 256'h0000000000000000000000000000000000000000000000000000000000000000; | |
| localparam READ_ADDR_WIDTH = | |
| (READ_WIDTH == 16) ? 8 : // 256x16 | |
| (READ_WIDTH == 8) ? 9 : // 512x8 | |
| (READ_WIDTH == 4) ? 10 : // 1024x4 | |
| (READ_WIDTH == 2) ? 11 : // 2048x2 | |
| (READ_WIDTH == 1) ? 12 : // 4096x1 | |
| (READ_WIDTH == 20) ? 8 : // 256x20 | |
| (READ_WIDTH == 10) ? 9 : // 512x10 | |
| (READ_WIDTH == 5) ? 10 : -1; // 1024x5 | |
| localparam WRITE_ADDR_WIDTH = | |
| (WRITE_WIDTH == 16) ? 8 : // 256x16 | |
| (WRITE_WIDTH == 8) ? 9 : // 512x8 | |
| (WRITE_WIDTH == 4) ? 10 : // 1024x4 | |
| (WRITE_WIDTH == 2) ? 11 : // 2048x2 | |
| (WRITE_WIDTH == 1) ? 12 : // 4096x1 | |
| (WRITE_WIDTH == 20) ? 8 : // 256x20 | |
| (WRITE_WIDTH == 10) ? 9 : // 512x10 | |
| (WRITE_WIDTH == 5) ? 10 : -1; // 1024x5 | |
| endmodule |