blob: 48dbebd48ad23056719a6d4d3224c5c82a5a298f [file] [log] [blame]
// Copyright (C) 2019-2022 The SymbiFlow Authors
//
// Use of this source code is governed by a ISC-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/ISC
//
// SPDX-License-Identifier: ISC
module BRAM_SDP_SPLIT #(parameter AWIDTH = 9,
parameter DWIDTH = 32)(
clk,
rce,
ra,
rq,
wce,
wa,
wd
);
input clk;
input rce;
input [AWIDTH-1:0] ra;
output reg [DWIDTH-1:0] rq;
input wce;
input [AWIDTH-1:0] wa;
input [DWIDTH-1:0] wd;
reg [DWIDTH-1:0] memory[0:(1<<AWIDTH)-1];
always @(posedge clk) begin
if (rce)
rq <= memory[ra];
if (wce)
memory[wa] <= wd;
end
integer i;
initial
begin
for(i = 0; i < (1<<AWIDTH)-1; i = i + 1)
memory[i] = 0;
end
endmodule
module BRAM_SDP_SPLIT_2x18K #(parameter AWIDTH = 10, parameter DWIDTH = 18)(
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_0 (.clk(clk_0),
.rce(rce_0),
.ra(ra_0),
.rq(rq_0),
.wce(wce_0),
.wa(wa_0),
.wd(wd_0));
BRAM_SDP_SPLIT #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_1 (.clk(clk_1),
.rce(rce_1),
.ra(ra_1),
.rq(rq_1),
.wce(wce_1),
.wa(wa_1),
.wd(wd_1));
endmodule
module BRAM_SDP_SPLIT_2x18x1024 (
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
parameter AWIDTH = 10;
parameter DWIDTH = 18;
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT_2x18K #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_2x18x1024 (
.clk_0(clk_0),
.rce_0(rce_0),
.ra_0(ra_0),
.rq_0(rq_0),
.wce_0(wce_0),
.wa_0(wa_0),
.wd_0(wd_0),
.clk_1(clk_1),
.rce_1(rce_1),
.ra_1(ra_1),
.rq_1(rq_1),
.wce_1(wce_1),
.wa_1(wa_1),
.wd_1(wd_1));
endmodule
module BRAM_SDP_SPLIT_2x16x1024 (
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
parameter AWIDTH = 10;
parameter DWIDTH = 16;
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT_2x18K #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_2x16x1024 (
.clk_0(clk_0),
.rce_0(rce_0),
.ra_0(ra_0),
.rq_0(rq_0),
.wce_0(wce_0),
.wa_0(wa_0),
.wd_0(wd_0),
.clk_1(clk_1),
.rce_1(rce_1),
.ra_1(ra_1),
.rq_1(rq_1),
.wce_1(wce_1),
.wa_1(wa_1),
.wd_1(wd_1));
endmodule
module BRAM_SDP_SPLIT_2x9x2048 (
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
parameter AWIDTH = 11;
parameter DWIDTH = 9;
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT_2x18K #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_2x9x2048 (
.clk_0(clk_0),
.rce_0(rce_0),
.ra_0(ra_0),
.rq_0(rq_0),
.wce_0(wce_0),
.wa_0(wa_0),
.wd_0(wd_0),
.clk_1(clk_1),
.rce_1(rce_1),
.ra_1(ra_1),
.rq_1(rq_1),
.wce_1(wce_1),
.wa_1(wa_1),
.wd_1(wd_1));
endmodule
module BRAM_SDP_SPLIT_2x8x2048 (
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
parameter AWIDTH = 11;
parameter DWIDTH = 8;
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT_2x18K #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_2x8x2048 (
.clk_0(clk_0),
.rce_0(rce_0),
.ra_0(ra_0),
.rq_0(rq_0),
.wce_0(wce_0),
.wa_0(wa_0),
.wd_0(wd_0),
.clk_1(clk_1),
.rce_1(rce_1),
.ra_1(ra_1),
.rq_1(rq_1),
.wce_1(wce_1),
.wa_1(wa_1),
.wd_1(wd_1));
endmodule
module BRAM_SDP_SPLIT_2x4x4096 (
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
parameter AWIDTH = 12;
parameter DWIDTH = 4;
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT_2x18K #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_2x4x4096 (
.clk_0(clk_0),
.rce_0(rce_0),
.ra_0(ra_0),
.rq_0(rq_0),
.wce_0(wce_0),
.wa_0(wa_0),
.wd_0(wd_0),
.clk_1(clk_1),
.rce_1(rce_1),
.ra_1(ra_1),
.rq_1(rq_1),
.wce_1(wce_1),
.wa_1(wa_1),
.wd_1(wd_1));
endmodule
module BRAM_SDP_SPLIT_2x2x8192 (
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
parameter AWIDTH = 13;
parameter DWIDTH = 2;
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT_2x18K #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_2x2x8192 (
.clk_0(clk_0),
.rce_0(rce_0),
.ra_0(ra_0),
.rq_0(rq_0),
.wce_0(wce_0),
.wa_0(wa_0),
.wd_0(wd_0),
.clk_1(clk_1),
.rce_1(rce_1),
.ra_1(ra_1),
.rq_1(rq_1),
.wce_1(wce_1),
.wa_1(wa_1),
.wd_1(wd_1));
endmodule
module BRAM_SDP_SPLIT_2x1x16384 (
clk_0,
rce_0,
ra_0,
rq_0,
wce_0,
wa_0,
wd_0,
clk_1,
rce_1,
ra_1,
rq_1,
wce_1,
wa_1,
wd_1
);
parameter AWIDTH = 14;
parameter DWIDTH = 1;
input clk_0;
input rce_0;
input [AWIDTH-1:0] ra_0;
output [DWIDTH-1:0] rq_0;
input wce_0;
input [AWIDTH-1:0] wa_0;
input [DWIDTH-1:0] wd_0;
input clk_1;
input rce_1;
input [AWIDTH-1:0] ra_1;
output [DWIDTH-1:0] rq_1;
input wce_1;
input [AWIDTH-1:0] wa_1;
input [DWIDTH-1:0] wd_1;
BRAM_SDP_SPLIT_2x18K #(.AWIDTH(AWIDTH), .DWIDTH(DWIDTH))
BRAM_SDP_SPLIT_2x1x16384 (
.clk_0(clk_0),
.rce_0(rce_0),
.ra_0(ra_0),
.rq_0(rq_0),
.wce_0(wce_0),
.wa_0(wa_0),
.wd_0(wd_0),
.clk_1(clk_1),
.rce_1(rce_1),
.ra_1(ra_1),
.rq_1(rq_1),
.wce_1(wce_1),
.wa_1(wa_1),
.wd_1(wd_1));
endmodule