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