Skip to content

Commit

Permalink
Separate memory data and ECC
Browse files Browse the repository at this point in the history
Internal-tag: [#52529]
Signed-off-by: Robert Szczepanski <rszczepanski@antmicro.com>
  • Loading branch information
robertszczepanski committed Dec 14, 2023
1 parent 45f63fe commit 8a31c01
Show file tree
Hide file tree
Showing 9 changed files with 163 additions and 90 deletions.
4 changes: 4 additions & 0 deletions design/el2_mem.sv
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,17 @@ import el2_pkg::*;
assign mem_export .iccm_wren_bank = mem_export_local.iccm_wren_bank;
assign mem_export .iccm_addr_bank = mem_export_local.iccm_addr_bank;
assign mem_export .iccm_bank_wr_data = mem_export_local.iccm_bank_wr_data;
assign mem_export .iccm_bank_wr_ecc = mem_export_local.iccm_bank_wr_ecc;
assign mem_export_local.iccm_bank_dout = mem_export. iccm_bank_dout;
assign mem_export_local.iccm_bank_ecc = mem_export. iccm_bank_ecc;

assign mem_export .dccm_clken = mem_export_local.dccm_clken;
assign mem_export .dccm_wren_bank = mem_export_local.dccm_wren_bank;
assign mem_export .dccm_addr_bank = mem_export_local.dccm_addr_bank;
assign mem_export .dccm_wr_data_bank = mem_export_local.dccm_wr_data_bank;
assign mem_export .dccm_wr_ecc_bank = mem_export_local.dccm_wr_ecc_bank;
assign mem_export_local.dccm_bank_dout = mem_export .dccm_bank_dout;
assign mem_export_local.dccm_bank_ecc = mem_export .dccm_bank_ecc;

// DCCM Instantiation
if (pt.DCCM_ENABLE == 1) begin: Gen_dccm_enable
Expand Down
12 changes: 7 additions & 5 deletions design/ifu/el2_ifu_iccm_mem.sv
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,13 @@ import el2_pkg::*;
iccm_rw_addr[pt.ICCM_BITS-1 : pt.ICCM_BANK_INDEX_LO]);

always_comb begin
iccm_mem_export.iccm_clken[i] = iccm_clken[i];
iccm_mem_export.iccm_wren_bank[i] = wren_bank[i];
iccm_mem_export.iccm_addr_bank[i] = addr_bank[i];
iccm_mem_export.iccm_bank_wr_data[i][38:0] = iccm_bank_wr_data[i][38:0];
iccm_bank_dout[i][38:0] = iccm_mem_export.iccm_bank_dout[i][38:0];
iccm_mem_export.iccm_clken[i] = iccm_clken[i];
iccm_mem_export.iccm_wren_bank[i] = wren_bank[i];
iccm_mem_export.iccm_addr_bank[i] = addr_bank[i];
iccm_mem_export.iccm_bank_wr_data[i] = iccm_bank_wr_data[i][31:0];
iccm_mem_export.iccm_bank_wr_ecc[i] = iccm_bank_wr_data[i][38:32];
iccm_bank_dout[i][31:0] = iccm_mem_export.iccm_bank_dout[i];
iccm_bank_dout[i][38:32] = iccm_mem_export.iccm_bank_ecc[i];
end

// match the redundant rows
Expand Down
38 changes: 21 additions & 17 deletions design/lib/el2_mem_if.sv
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import el2_pkg::*;
interface el2_mem_if #(
`include "el2_param.vh"
) ();

localparam DCCM_ECC_WIDTH = pt.DCCM_FDATA_WIDTH - pt.DCCM_DATA_WIDTH;

//////////////////////////////////////////
// Clock
Expand All @@ -35,53 +35,57 @@ interface el2_mem_if #(
logic [pt.ICCM_NUM_BANKS-1:0] iccm_wren_bank;
logic [pt.ICCM_NUM_BANKS-1:0][pt.ICCM_BITS-1:pt.ICCM_BANK_INDEX_LO] iccm_addr_bank;

logic [pt.ICCM_NUM_BANKS-1:0][ 38:0] iccm_bank_wr_data;
logic [pt.ICCM_NUM_BANKS-1:0][ 38:0] iccm_bank_dout;
logic [pt.ICCM_NUM_BANKS-1:0][ 31:0] iccm_bank_wr_data;
logic [pt.ICCM_NUM_BANKS-1:0][ 6:0] iccm_bank_wr_ecc;
logic [pt.ICCM_NUM_BANKS-1:0][ 31:0] iccm_bank_dout;
logic [pt.ICCM_NUM_BANKS-1:0][ 6:0] iccm_bank_ecc;


//////////////////////////////////////////
// DCCM
logic [pt.DCCM_NUM_BANKS-1:0] dccm_clken;
logic [pt.DCCM_NUM_BANKS-1:0] dccm_wren_bank;
logic [pt.DCCM_NUM_BANKS-1:0][pt.DCCM_BITS-1:(pt.DCCM_BANK_BITS+2)] dccm_addr_bank;
logic [pt.DCCM_NUM_BANKS-1:0][ pt.DCCM_FDATA_WIDTH-1:0] dccm_wr_data_bank;
logic [pt.DCCM_NUM_BANKS-1:0][ pt.DCCM_FDATA_WIDTH-1:0] dccm_bank_dout;
logic [pt.DCCM_NUM_BANKS-1:0][ pt.DCCM_DATA_WIDTH-1:0] dccm_wr_data_bank;
logic [pt.DCCM_NUM_BANKS-1:0][ DCCM_ECC_WIDTH-1:0] dccm_wr_ecc_bank;
logic [pt.DCCM_NUM_BANKS-1:0][ pt.DCCM_DATA_WIDTH-1:0] dccm_bank_dout;
logic [pt.DCCM_NUM_BANKS-1:0][ DCCM_ECC_WIDTH-1:0] dccm_bank_ecc;


//////////////////////////////////////////
// MODPORTS
modport veer_iccm(
input clk,
// ICCM
output iccm_clken, iccm_wren_bank, iccm_addr_bank, iccm_bank_wr_data,
input iccm_bank_dout
output iccm_clken, iccm_wren_bank, iccm_addr_bank, iccm_bank_wr_data, iccm_bank_wr_ecc,
input iccm_bank_dout, iccm_bank_ecc
);

modport veer_dccm(
input clk,
// DCCM
output dccm_clken, dccm_wren_bank, dccm_addr_bank, dccm_wr_data_bank,
input dccm_bank_dout
output dccm_clken, dccm_wren_bank, dccm_addr_bank, dccm_wr_data_bank, dccm_wr_ecc_bank,
input dccm_bank_dout, dccm_bank_ecc
);

modport veer_sram_src(
output clk,
// ICCM
output iccm_clken, iccm_wren_bank, iccm_addr_bank, iccm_bank_wr_data,
input iccm_bank_dout,
output iccm_clken, iccm_wren_bank, iccm_addr_bank, iccm_bank_wr_data, iccm_bank_wr_ecc,
input iccm_bank_dout, iccm_bank_ecc,
// DCCM
output dccm_clken, dccm_wren_bank, dccm_addr_bank, dccm_wr_data_bank,
input dccm_bank_dout
output dccm_clken, dccm_wren_bank, dccm_addr_bank, dccm_wr_data_bank, dccm_wr_ecc_bank,
input dccm_bank_dout, dccm_bank_ecc
);

modport veer_sram_sink(
input clk,
// ICCM
input iccm_clken, iccm_wren_bank, iccm_addr_bank, iccm_bank_wr_data,
output iccm_bank_dout,
input iccm_clken, iccm_wren_bank, iccm_addr_bank, iccm_bank_wr_data, iccm_bank_wr_ecc,
output iccm_bank_dout, iccm_bank_ecc,
// DCCM
input dccm_clken, dccm_wren_bank, dccm_addr_bank, dccm_wr_data_bank,
output dccm_bank_dout
input dccm_clken, dccm_wren_bank, dccm_addr_bank, dccm_wr_data_bank, dccm_wr_ecc_bank,
output dccm_bank_dout, dccm_bank_ecc
);

endinterface
12 changes: 7 additions & 5 deletions design/lsu/el2_lsu_dccm_mem.sv
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,13 @@ module el2_lsu_dccm_mem

// Connect to exported RAM Banks
always_comb begin
dccm_mem_export.dccm_clken[i] = dccm_clken[i];
dccm_mem_export.dccm_wren_bank[i] = wren_bank[i];
dccm_mem_export.dccm_addr_bank[i] = addr_bank[i];
dccm_mem_export.dccm_wr_data_bank[i] = wr_data_bank[i];
dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0] = dccm_mem_export.dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:0];
dccm_mem_export.dccm_clken[i] = dccm_clken[i];
dccm_mem_export.dccm_wren_bank[i] = wren_bank[i];
dccm_mem_export.dccm_addr_bank[i] = addr_bank[i];
dccm_mem_export.dccm_wr_data_bank[i] = wr_data_bank[i][pt.DCCM_DATA_WIDTH-1:0];
dccm_mem_export.dccm_wr_ecc_bank[i] = wr_data_bank[i][pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH];
dccm_bank_dout[i][pt.DCCM_DATA_WIDTH-1:0] = dccm_mem_export.dccm_bank_dout[i];
dccm_bank_dout[i][pt.DCCM_FDATA_WIDTH-1:pt.DCCM_DATA_WIDTH] = dccm_mem_export.dccm_bank_ecc[i];
end

end : mem_bank
Expand Down
Loading

0 comments on commit 8a31c01

Please sign in to comment.