[otbn] Expand OTBN DMem/IMem width
Extra upper bits are ignored. This increase is required to aid area
estimations for an OTBN design including integrity features.
Signed-off-by: Greg Chadwick <gac@lowrisc.org>
diff --git a/hw/ip/otbn/rtl/otbn.sv b/hw/ip/otbn/rtl/otbn.sv
index 3dc7b73..032bfd6 100644
--- a/hw/ip/otbn/rtl/otbn.sv
+++ b/hw/ip/otbn/rtl/otbn.sv
@@ -112,7 +112,7 @@
logic [ImemIndexWidth-1:0] imem_index;
logic [31:0] imem_wdata;
logic [31:0] imem_wmask;
- logic [31:0] imem_rdata;
+ logic [38:0] imem_rdata;
logic imem_rvalid;
logic [1:0] imem_rerror_vec;
logic imem_rerror;
@@ -141,7 +141,7 @@
assign unused_imem_addr_core_wordbits = imem_addr_core[1:0];
prim_ram_1p_adv #(
- .Width (32),
+ .Width (39),
.Depth (ImemSizeWords),
.DataBitsPerMask (32), // Write masks are not supported.
.CfgW (8)
@@ -151,8 +151,8 @@
.req_i (imem_req),
.write_i (imem_write),
.addr_i (imem_index),
- .wdata_i (imem_wdata),
- .wmask_i (imem_wmask),
+ .wdata_i (39'(imem_wdata)),
+ .wmask_i (39'(imem_wmask)),
.rdata_o (imem_rdata),
.rvalid_o (imem_rvalid),
.rerror_o (imem_rerror_vec),
@@ -215,8 +215,8 @@
// Explicitly tie off bus interface during core operation to avoid leaking
// the currently executed instruction from IMEM through the bus
// unintentionally.
- assign imem_rdata_bus = !imem_access_core ? imem_rdata : 32'b0;
- assign imem_rdata_core = imem_rdata;
+ assign imem_rdata_bus = !imem_access_core ? imem_rdata[31:0] : 32'b0;
+ assign imem_rdata_core = imem_rdata[31:0];
assign imem_rvalid_bus = !imem_access_core ? imem_rvalid : 1'b0;
assign imem_rvalid_core = imem_access_core ? imem_rvalid : 1'b0;
@@ -246,7 +246,7 @@
logic [DmemIndexWidth-1:0] dmem_index;
logic [WLEN-1:0] dmem_wdata;
logic [WLEN-1:0] dmem_wmask;
- logic [WLEN-1:0] dmem_rdata;
+ logic [(WLEN+7*8)-1:0] dmem_rdata;
logic dmem_rvalid;
logic [1:0] dmem_rerror_vec;
logic dmem_rerror;
@@ -276,7 +276,7 @@
assign unused_dmem_addr_core_wordbits = ^dmem_addr_core[DmemAddrWidth-DmemIndexWidth-1:0];
prim_ram_1p_adv #(
- .Width (WLEN),
+ .Width (WLEN+7*8),
.Depth (DmemSizeWords),
.DataBitsPerMask (32), // 32b write masks for 32b word writes from bus
.CfgW (8)
@@ -286,8 +286,8 @@
.req_i (dmem_req),
.write_i (dmem_write),
.addr_i (dmem_index),
- .wdata_i (dmem_wdata),
- .wmask_i (dmem_wmask),
+ .wdata_i (312'(dmem_wdata)),
+ .wmask_i (312'(dmem_wmask)),
.rdata_o (dmem_rdata),
.rvalid_o (dmem_rvalid),
.rerror_o (dmem_rerror_vec),
@@ -338,8 +338,8 @@
// Explicitly tie off bus interface during core operation to avoid leaking
// DMEM data through the bus unintentionally.
- assign dmem_rdata_bus = !dmem_access_core ? dmem_rdata : '0;
- assign dmem_rdata_core = dmem_rdata;
+ assign dmem_rdata_bus = !dmem_access_core ? dmem_rdata[WLEN-1:0] : '0;
+ assign dmem_rdata_core = dmem_rdata[WLEN-1:0];
assign dmem_rvalid_bus = !dmem_access_core ? dmem_rvalid : 1'b0;
assign dmem_rvalid_core = dmem_access_core ? dmem_rvalid : 1'b0;