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