| // Copyright 2020-2022 F4PGA Authors | 
 | // | 
 | // Licensed under the Apache License, Version 2.0 (the "License"); | 
 | // you may not use this file except in compliance with the License. | 
 | // You may obtain a copy of the License at | 
 | // | 
 | //     http://www.apache.org/licenses/LICENSE-2.0 | 
 | // | 
 | // Unless required by applicable law or agreed to in writing, software | 
 | // distributed under the License is distributed on an "AS IS" BASIS, | 
 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 | // See the License for the specific language governing permissions and | 
 | // limitations under the License. | 
 | // | 
 | // SPDX-License-Identifier: Apache-2.0 | 
 |  | 
 |  | 
 | module \$__QLF_RAM16K ( | 
 | 	output [31:0] RDATA, | 
 | 	input         RCLK, RE, | 
 | 	input  [8:0] RADDR, | 
 | 	input         WCLK, WE, | 
 | 	input  [8:0] WADDR, | 
 | 	input  [31:0] WENB, | 
 | 	input  [31:0] WDATA | 
 | ); | 
 |  | 
 | 	generate | 
 | 		DP_RAM16K #() | 
 | 			_TECHMAP_REPLACE_ ( | 
 | 			.d_out(RDATA), | 
 | 			.rclk (RCLK ), | 
 | 			.wclk (WCLK ), | 
 | 			.ren  (RE   ), | 
 | 			.raddr(RADDR), | 
 | 			.wen  (WE   ), | 
 | 			.waddr(WADDR), | 
 | 			.wenb (WENB ), | 
 | 			.d_in (WDATA) | 
 | 		); | 
 | 	endgenerate | 
 |  | 
 | endmodule | 
 |  | 
 |  | 
 | module \$__QLF_RAM16K_M0 (CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); | 
 |  | 
 |  | 
 | 	parameter [4095:0] INIT = 4096'bx; | 
 |  | 
 | 	input CLK1; | 
 |  | 
 | 	input [8:0] A1ADDR; | 
 | 	output [31:0] A1DATA; | 
 | 	input A1EN; | 
 |  | 
 | 	input [8:0] B1ADDR; | 
 | 	input [31:0] B1DATA; | 
 | 	input B1EN; | 
 |  | 
 | 	wire [31:0] WENB; | 
 | 	assign WENB = 32'hFFFFFFFF; | 
 |  | 
 | 	\$__QLF_RAM16K #() | 
 | 		 _TECHMAP_REPLACE_ ( | 
 | 		.RDATA(A1DATA), | 
 | 		.RADDR(A1ADDR), | 
 | 		.RCLK (CLK1  ), | 
 | 		.RE   (A1EN  ), | 
 | 		.WDATA(B1DATA), | 
 | 		.WADDR(B1ADDR), | 
 | 		.WCLK (CLK1  ), | 
 | 		.WE   (B1EN  ), | 
 | 		.WENB (WENB  ) | 
 | 	); | 
 | endmodule | 
 |  | 
 |  | 
 | module \$__QLF_RAM16K_M1 (CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); | 
 |  | 
 |  | 
 | 	parameter [4095:0] INIT = 4096'bx; | 
 |  | 
 | 	input CLK1; | 
 |  | 
 | 	input [9:0] A1ADDR; | 
 | 	output [31:0] A1DATA; | 
 | 	input A1EN; | 
 |  | 
 | 	input [9:0] B1ADDR; | 
 | 	input [31:0] B1DATA; | 
 | 	input B1EN; | 
 |  | 
 | 	wire [31:0] WENB; | 
 | 	wire [31:0] WDATA; | 
 |  | 
 | 	generate | 
 | 		wire A1BAR; | 
 | 		assign A1BAR = ~A1ADDR[0]; | 
 | 		assign WDATA = { {2{B1DATA[15:0]}}}; | 
 | 	endgenerate | 
 |  | 
 | 	assign WENB = { {16{A1ADDR[0]}} , {16{A1BAR}}}; | 
 |  | 
 |  | 
 | 	\$__QLF_RAM16K #() | 
 | 		 _TECHMAP_REPLACE_ ( | 
 | 		.RDATA(A1DATA     ), | 
 | 		.RADDR(A1ADDR     ), | 
 | 		.RCLK (CLK1       ), | 
 | 		.RE   (A1EN       ), | 
 | 		.WDATA(WDATA      ), | 
 | 		.WADDR(B1ADDR[9:1]), | 
 | 		.WCLK (CLK1       ), | 
 | 		.WENB (WENB       ), | 
 | 		.WE   (B1EN       ) | 
 | 	); | 
 |  | 
 | endmodule | 
 |  | 
 | module \$__QLF_RAM16K_M2 (CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); | 
 |  | 
 |  | 
 | 	parameter [4095:0] INIT = 4096'bx; | 
 |  | 
 | 	input CLK1; | 
 |  | 
 | 	input [10:0] A1ADDR; | 
 | 	output [31:0] A1DATA; | 
 | 	input A1EN; | 
 |  | 
 | 	input [10:0] B1ADDR; | 
 | 	input [7:0] B1DATA; | 
 | 	input B1EN; | 
 |  | 
 | 	wire [31:0] WENB; | 
 | 	wire [31:0] WDATA; | 
 |  | 
 | 	generate | 
 | 		wire A1BAR0, A1BAR1; | 
 | 		assign A1BAR0 = ~A1ADDR[0]; | 
 | 		assign A1BAR1 = ~A1ADDR[1]; | 
 | 		assign WDATA = { {4{B1DATA[7:0]}}}; | 
 | 	endgenerate | 
 |  | 
 | 	assign WENB = { {8{A1ADDR[1]& A1ADDR[0]}}, | 
 | 			{8{A1ADDR[1]& A1BAR0}}   ,  | 
 | 			{8{A1BAR1   & A1ADDR[0]}},  | 
 | 			{8{A1BAR1   & A1BAR0}}}	 ; | 
 |  | 
 |  | 
 | 	\$__QLF_RAM16K #() | 
 | 		 _TECHMAP_REPLACE_ ( | 
 | 		.RDATA(A1DATA      ), | 
 | 		.RADDR(A1ADDR      ), | 
 | 		.RCLK (CLK1        ), | 
 | 		.RE   (A1EN        ), | 
 | 		.WDATA(B1DATA      ), | 
 | 		.WADDR(B1ADDR[10:2]), | 
 | 		.WCLK (CLK1        ), | 
 | 		.WENB (WENB        ), | 
 | 		.WE   (B1EN        ) | 
 | 	); | 
 |  | 
 | endmodule | 
 |  | 
 | module \$__QLF_RAM16K_M3 (CLK1, A1ADDR, A1DATA, A1EN, B1ADDR, B1DATA, B1EN); | 
 |  | 
 | 	parameter [4095:0] INIT = 4096'bx; | 
 |  | 
 | 	input CLK1; | 
 |  | 
 | 	input [11:0] A1ADDR; | 
 | 	output [31:0] A1DATA; | 
 | 	input A1EN; | 
 |  | 
 | 	input [11:0] B1ADDR; | 
 | 	input [3:0] B1DATA; | 
 | 	input B1EN; | 
 |  | 
 | 	wire [31:0] WENB; | 
 | 	wire [31:0] WDATA; | 
 |  | 
 | 	generate | 
 | 		assign WDATA = { {8{B1DATA[3:0]}}}; | 
 | 		wire A1BAR0, A1BAR1, A1BAR2; | 
 | 		assign A1BAR0 = ~A1ADDR[0]; | 
 | 		assign A1BAR1 = ~A1ADDR[1]; | 
 | 		assign A1BAR2 = ~A1ADDR[2]; | 
 | 	endgenerate | 
 |  | 
 | 		assign WENB = { {4{A1ADDR[2] &A1ADDR[1] & A1ADDR[0]}},  | 
 | 				{4{A1ADDR[2] &A1ADDR[1] & A1BAR0}}   ,  | 
 | 				{4{A1ADDR[2] &A1BAR1    & A1ADDR[0]}},  | 
 | 				{4{A1ADDR[2] &A1BAR1    & A1BAR0}}   ,  | 
 | 				{4{A1BAR2    &A1ADDR[1] & A1ADDR[0]}},  | 
 | 				{4{A1BAR2    &A1ADDR[1] & A1BAR0}}   ,  | 
 | 				{4{A1BAR2    &A1BAR1    & A1ADDR[0]}},  | 
 | 				{4{A1BAR2    &A1BAR1    & A1BAR0}}}  ;  | 
 |  | 
 | 	\$__QLF_RAM16K #() | 
 | 		 _TECHMAP_REPLACE_ ( | 
 | 		.RDATA(A1DATA      ), | 
 | 		.RADDR(A1ADDR      ), | 
 | 		.RCLK (CLK1        ), | 
 | 		.RE   (A1EN        ), | 
 | 		.WDATA(B1DATA      ), | 
 | 		.WADDR(B1ADDR[11:3]), | 
 | 		.WCLK (CLK1        ), | 
 | 		.WENB (WENB        ), | 
 | 		.WE   (B1EN        ) | 
 | 	); | 
 |  | 
 | endmodule | 
 |  |