| // 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 my_ram ( | 
 |     CLK, | 
 |     WADR, | 
 |     WDAT, | 
 |     WEN, | 
 |     RADR, | 
 |     RDAT, | 
 |     REN | 
 | ); | 
 |  | 
 |   parameter DBITS = 36; | 
 |   parameter ABITS = 9; | 
 |  | 
 |   input wire CLK; | 
 |  | 
 |   input wire [ABITS-1:0] WADR; | 
 |   input wire [DBITS-1:0] WDAT; | 
 |   input wire WEN; | 
 |  | 
 |   input wire [ABITS-1:0] RADR; | 
 |   output reg [DBITS-1:0] RDAT; | 
 |   input wire REN; | 
 |  | 
 |   localparam SIZE = 1 << ABITS; | 
 |   reg [DBITS-1:0] mem[0:SIZE-1]; | 
 |  | 
 |   always @(posedge CLK) begin | 
 |     if (WEN) mem[WADR] <= WDAT; | 
 |   end | 
 |  | 
 |   always @(posedge CLK) begin | 
 |     RDAT <= mem[RADR]; | 
 |   end | 
 |  | 
 | endmodule | 
 |  | 
 | // ============================================================================ | 
 |  | 
 | module top_bram_9_16 ( | 
 |     CLK, | 
 |     WADR, | 
 |     WDAT, | 
 |     WEN, | 
 |     RADR, | 
 |     RDAT | 
 | ); | 
 |  | 
 |   input wire CLK; | 
 |  | 
 |   input wire [8 : 0] WADR; | 
 |   input wire [15:0] WDAT; | 
 |   input wire WEN; | 
 |  | 
 |   input wire [8 : 0] RADR; | 
 |   output wire [15:0] RDAT; | 
 |  | 
 |   my_ram #( | 
 |       .DBITS(16), | 
 |       .ABITS(9) | 
 |   ) the_ram ( | 
 |       .CLK (CLK), | 
 |       .WADR(WADR), | 
 |       .WDAT(WDAT), | 
 |       .WEN (WEN), | 
 |       .RADR(RADR), | 
 |       .RDAT(RDAT), | 
 |       .REN (1'b0) | 
 |   ); | 
 |  | 
 | endmodule | 
 |  | 
 | module top_bram_9_32 ( | 
 |     CLK, | 
 |     WADR, | 
 |     WDAT, | 
 |     WEN, | 
 |     RADR, | 
 |     RDAT | 
 | ); | 
 |  | 
 |   input wire CLK; | 
 |  | 
 |   input wire [8 : 0] WADR; | 
 |   input wire [31:0] WDAT; | 
 |   input wire WEN; | 
 |  | 
 |   input wire [8 : 0] RADR; | 
 |   output wire [31:0] RDAT; | 
 |  | 
 |   my_ram #( | 
 |       .DBITS(32), | 
 |       .ABITS(9) | 
 |   ) the_ram ( | 
 |       .CLK (CLK), | 
 |       .WADR(WADR), | 
 |       .WDAT(WDAT), | 
 |       .WEN (WEN), | 
 |       .RADR(RADR), | 
 |       .RDAT(RDAT), | 
 |       .REN (1'b0) | 
 |   ); | 
 |  | 
 | endmodule | 
 |  | 
 | module top_bram_10_16 ( | 
 |     CLK, | 
 |     WADR, | 
 |     WDAT, | 
 |     WEN, | 
 |     RADR, | 
 |     RDAT | 
 | ); | 
 |  | 
 |   input wire CLK; | 
 |  | 
 |   input wire [9 : 0] WADR; | 
 |   input wire [15:0] WDAT; | 
 |   input wire WEN; | 
 |  | 
 |   input wire [9 : 0] RADR; | 
 |   output wire [15:0] RDAT; | 
 |  | 
 |   my_ram #( | 
 |       .DBITS(16), | 
 |       .ABITS(10) | 
 |   ) the_ram ( | 
 |       .CLK (CLK), | 
 |       .WADR(WADR), | 
 |       .WDAT(WDAT), | 
 |       .WEN (WEN), | 
 |       .RADR(RADR), | 
 |       .RDAT(RDAT), | 
 |       .REN (1'b0) | 
 |   ); | 
 |  | 
 | endmodule | 
 |  | 
 | module top_bram_init ( | 
 |     CLK, | 
 |     WADR, | 
 |     WDAT, | 
 |     WEN, | 
 |     RADR, | 
 |     RDAT | 
 | ); | 
 |  | 
 |   input wire CLK; | 
 |  | 
 |   input wire [9 : 0] WADR; | 
 |   input wire [17:0] WDAT; | 
 |   input wire WEN; | 
 |  | 
 |   input wire [9 : 0] RADR; | 
 |   output wire [17:0] RDAT; | 
 |  | 
 |   RAM_8K_BLK #( | 
 |       .INIT_FILE     ("init.txt"), | 
 |       .addr_int      (9), | 
 |       .data_depth_int(1 << 9), | 
 |       .data_width_int(16) | 
 |   ) the_ram ( | 
 |       .WClk   (CLK), | 
 |       .RClk   (CLK), | 
 |       .WClk_En(1'b1), | 
 |       .RClk_En(1'b1), | 
 |       .WA     (WADR), | 
 |       .WD     (WDAT), | 
 |       .WEN    (WEN), | 
 |       .RA     (RADR), | 
 |       .RD     (RDAT) | 
 |   ); | 
 |  | 
 | endmodule | 
 |  |