| // 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 |
| |