diff options
Diffstat (limited to 'techlibs/nexus/lrams_map.v')
-rw-r--r-- | techlibs/nexus/lrams_map.v | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/techlibs/nexus/lrams_map.v b/techlibs/nexus/lrams_map.v new file mode 100644 index 000000000..938a0e843 --- /dev/null +++ b/techlibs/nexus/lrams_map.v @@ -0,0 +1,56 @@ +module \$__NX_PDPSC512K (CLK2, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); + parameter CFG_ABITS = 14; + parameter CFG_DBITS = 32; + parameter CFG_ENABLE_A = 4; + + parameter CLKPOL2 = 1; + parameter [524287:0] INIT = 524287'b0; + + input CLK2; + + input [CFG_ABITS-1:0] A1ADDR; + input [CFG_DBITS-1:0] A1DATA; + input [CFG_ENABLE_A-1:0] A1EN; + + input [CFG_ABITS-1:0] B1ADDR; + output [CFG_DBITS-1:0] B1DATA; + input B1EN; + + wire clk; + wire [31:0] rd; + assign B1DATA = rd[CFG_DBITS-1:0]; + + generate + if (CLKPOL2) + assign clk = CLK2; + else + INV clk_inv_i (.A(CLK2), .Z(clk)); + endgenerate + + wire we = |A1EN; + + localparam INIT_CHUNK_SIZE = 4096; + + function [5119:0] permute_init; + input [INIT_CHUNK_SIZE-1:0] chunk; + integer i; + begin + for (i = 0; i < 128; i = i + 1'b1) + permute_init[i * 40 +: 40] = {8'b0, chunk[i * 32 +: 32]}; + end + endfunction + + generate + PDPSC512K #( + .OUTREG("NO_REG"), + .ECC_BYTE_SEL("BYTE_EN"), +`include "lrams_init.vh" + .GSR("DISABLED") + ) _TECHMAP_REPLACE_ ( + .CLK(clk), .RSTR(1'b0), + .DI(A1DATA), .ADW(A1ADDR), .CEW(we), .WE(we), .CSW(1'b1), + .ADR(B1ADDR), .DO(rd), .CER(B1EN), .CSR(1'b1), + ); + endgenerate + +endmodule |