yosys/techlibs/nexus/lrams_map.v

57 lines
1.1 KiB
Verilog

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