blob: a8ea0a21a9e462acd205d9a3baa4a539b6087a5a [file] [log] [blame]
// 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 spram_18x1024_2x (
WEN0_i,
REN0_i,
clock0,
WR_ADDR0_i,
RD_ADDR0_i,
WDATA0_i,
RDATA0_o,
WEN1_i,
REN1_i,
clock1,
WR_ADDR1_i,
RD_ADDR1_i,
WDATA1_i,
RDATA1_o
);
parameter WR_ADDR_WIDTH0 = 10;
parameter RD_ADDR_WIDTH0 = 10;
parameter WR_DATA_WIDTH0 = 18;
parameter RD_DATA_WIDTH0 = 18;
parameter BE_WIDTH0 = 2;
parameter WR_ADDR_WIDTH1 = 10;
parameter RD_ADDR_WIDTH1 = 10;
parameter WR_DATA_WIDTH1 = 18;
parameter RD_DATA_WIDTH1 = 18;
parameter BE_WIDTH1 = 2;
input wire WEN0_i;
input wire REN0_i;
input wire clock0;
input wire [WR_ADDR_WIDTH0-1 :0] WR_ADDR0_i;
input wire [RD_ADDR_WIDTH0-1 :0] RD_ADDR0_i;
input wire [WR_DATA_WIDTH0-1 :0] WDATA0_i;
output wire [RD_DATA_WIDTH0-1 :0] RDATA0_o;
input wire WEN1_i;
input wire REN1_i;
input wire clock1;
input wire [WR_ADDR_WIDTH0-1 :0] WR_ADDR1_i;
input wire [RD_ADDR_WIDTH0-1 :0] RD_ADDR1_i;
input wire [WR_DATA_WIDTH0-1 :0] WDATA1_i;
output wire [RD_DATA_WIDTH0-1 :0] RDATA1_o;
RAM_18K_BLK #(
.WR_ADDR_WIDTH(WR_ADDR_WIDTH0),
.RD_ADDR_WIDTH(RD_ADDR_WIDTH0),
.WR_DATA_WIDTH(WR_DATA_WIDTH0),
.RD_DATA_WIDTH(RD_DATA_WIDTH0),
.BE_WIDTH(BE_WIDTH0)
) spram_x18_inst1 (
.WEN_i(WEN0_i),
.WR_BE_i(2'b11),
.REN_i(REN0_i),
.WR_CLK_i(clock0),
.RD_CLK_i(clock0),
.WR_ADDR_i(WR_ADDR0_i),
.RD_ADDR_i(RD_ADDR0_i),
.WDATA_i(WDATA0_i),
.RDATA_o(RDATA0_o)
);
RAM_18K_BLK #(
.WR_ADDR_WIDTH(WR_ADDR_WIDTH1),
.RD_ADDR_WIDTH(RD_ADDR_WIDTH1),
.WR_DATA_WIDTH(WR_DATA_WIDTH1),
.RD_DATA_WIDTH(RD_DATA_WIDTH1),
.BE_WIDTH(BE_WIDTH1)
) spram_x18_inst2 (
.WEN_i(WEN1_i),
.WR_BE_i(2'b11),
.REN_i(REN1_i),
.WR_CLK_i(clock1),
.RD_CLK_i(clock1),
.WR_ADDR_i(WR_ADDR1_i),
.RD_ADDR_i(RD_ADDR1_i),
.WDATA_i(WDATA1_i),
.RDATA_o(RDATA1_o)
);
endmodule
module spram_9x2048_x2 (
WEN0_i,
REN0_i,
clock0,
WR_ADDR0_i,
RD_ADDR0_i,
WDATA0_i,
RDATA0_o,
WEN1_i,
REN1_i,
clock1,
WR_ADDR1_i,
RD_ADDR1_i,
WDATA1_i,
RDATA1_o
);
parameter WR_ADDR_WIDTH0 = 11;
parameter RD_ADDR_WIDTH0 = 11;
parameter WR_DATA_WIDTH0 = 9;
parameter RD_DATA_WIDTH0 = 9;
parameter BE_WIDTH0 = 1;
parameter WR_ADDR_WIDTH1 = 11;
parameter RD_ADDR_WIDTH1 = 11;
parameter WR_DATA_WIDTH1 = 9;
parameter RD_DATA_WIDTH1 = 9;
parameter BE_WIDTH1 = 1;
input wire WEN0_i;
input wire REN0_i;
input wire clock0;
input wire [WR_ADDR_WIDTH0-1 :0] WR_ADDR0_i;
input wire [RD_ADDR_WIDTH0-1 :0] RD_ADDR0_i;
input wire [WR_DATA_WIDTH0-1 :0] WDATA0_i;
output wire [RD_DATA_WIDTH0-1 :0] RDATA0_o;
input wire WEN1_i;
input wire REN1_i;
input wire clock1;
input wire [WR_ADDR_WIDTH1-1 :0] WR_ADDR1_i;
input wire [RD_ADDR_WIDTH1-1 :0] RD_ADDR1_i;
input wire [WR_DATA_WIDTH1-1 :0] WDATA1_i;
output wire [RD_DATA_WIDTH1-1 :0] RDATA1_o;
RAM_18K_BLK #(
.WR_ADDR_WIDTH(WR_ADDR_WIDTH0),
.RD_ADDR_WIDTH(RD_ADDR_WIDTH0),
.WR_DATA_WIDTH(WR_DATA_WIDTH0),
.RD_DATA_WIDTH(RD_DATA_WIDTH0),
.BE_WIDTH(BE_WIDTH0)
) spram_x18_inst1 (
.WEN_i(WEN0_i),
.WR_BE_i(2'b11),
.REN_i(REN0_i),
.WR_CLK_i(clock0),
.RD_CLK_i(clock0),
.WR_ADDR_i(WR_ADDR0_i),
.RD_ADDR_i(RD_ADDR0_i),
.WDATA_i(WDATA0_i),
.RDATA_o(RDATA0_o)
);
RAM_18K_BLK #(
.WR_ADDR_WIDTH(WR_ADDR_WIDTH1),
.RD_ADDR_WIDTH(RD_ADDR_WIDTH1),
.WR_DATA_WIDTH(WR_DATA_WIDTH1),
.RD_DATA_WIDTH(RD_DATA_WIDTH1),
.BE_WIDTH(BE_WIDTH1)
) spram_x18_inst2 (
.WEN_i(WEN1_i),
.WR_BE_i(2'b11),
.REN_i(REN1_i),
.WR_CLK_i(clock1),
.RD_CLK_i(clock1),
.WR_ADDR_i(WR_ADDR1_i),
.RD_ADDR_i(RD_ADDR1_i),
.WDATA_i(WDATA1_i),
.RDATA_o(RDATA1_o)
);
endmodule
module spram_9x2048_18x1024 (
WEN0_i,
REN0_i,
clock0,
WR_ADDR0_i,
RD_ADDR0_i,
WDATA0_i,
RDATA0_o,
WEN1_i,
REN1_i,
clock1,
WR_ADDR1_i,
RD_ADDR1_i,
WDATA1_i,
RDATA1_o
);
parameter WR_ADDR_WIDTH0 = 11;
parameter RD_ADDR_WIDTH0 = 11;
parameter WR_DATA_WIDTH0 = 9;
parameter RD_DATA_WIDTH0 = 9;
parameter BE_WIDTH0 = 1;
parameter WR_ADDR_WIDTH1 = 10;
parameter RD_ADDR_WIDTH1 = 10;
parameter WR_DATA_WIDTH1 = 18;
parameter RD_DATA_WIDTH1 = 18;
parameter BE_WIDTH1 = 2;
input wire WEN0_i;
input wire REN0_i;
input wire clock0;
input wire [WR_ADDR_WIDTH0-1 :0] WR_ADDR0_i;
input wire [RD_ADDR_WIDTH0-1 :0] RD_ADDR0_i;
input wire [WR_DATA_WIDTH0-1 :0] WDATA0_i;
output wire [RD_DATA_WIDTH0-1 :0] RDATA0_o;
input wire WEN1_i;
input wire REN1_i;
input wire clock1;
input wire [WR_ADDR_WIDTH1-1 :0] WR_ADDR1_i;
input wire [RD_ADDR_WIDTH1-1 :0] RD_ADDR1_i;
input wire [WR_DATA_WIDTH1-1 :0] WDATA1_i;
output wire [RD_DATA_WIDTH1-1 :0] RDATA1_o;
RAM_18K_BLK #(
.WR_ADDR_WIDTH(WR_ADDR_WIDTH0),
.RD_ADDR_WIDTH(RD_ADDR_WIDTH0),
.WR_DATA_WIDTH(WR_DATA_WIDTH0),
.RD_DATA_WIDTH(RD_DATA_WIDTH0),
.BE_WIDTH(BE_WIDTH0)
) spram_x18_inst1 (
.WEN_i(WEN0_i),
.WR_BE_i(1'b1),
.REN_i(REN0_i),
.WR_CLK_i(clock0),
.RD_CLK_i(clock0),
.WR_ADDR_i(WR_ADDR0_i),
.RD_ADDR_i(RD_ADDR0_i),
.WDATA_i(WDATA0_i),
.RDATA_o(RDATA0_o)
);
RAM_18K_BLK #(
.WR_ADDR_WIDTH(WR_ADDR_WIDTH1),
.RD_ADDR_WIDTH(RD_ADDR_WIDTH1),
.WR_DATA_WIDTH(WR_DATA_WIDTH1),
.RD_DATA_WIDTH(RD_DATA_WIDTH1),
.BE_WIDTH(BE_WIDTH1)
) spram_x18_inst2 (
.WEN_i(WEN1_i),
.WR_BE_i(2'b11),
.REN_i(REN1_i),
.WR_CLK_i(clock1),
.RD_CLK_i(clock1),
.WR_ADDR_i(WR_ADDR1_i),
.RD_ADDR_i(RD_ADDR1_i),
.WDATA_i(WDATA1_i),
.RDATA_o(RDATA1_o)
);
endmodule