aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/nexus/lrams_map.v
blob: 938a0e84345db2c737753eda501676ffa6c0916f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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