From ad6e0b4e77480343e3e0d218f8fc61885ed75a4d Mon Sep 17 00:00:00 2001 From: Blaise Tine Date: Fri, 15 Jan 2021 16:28:03 -0800 Subject: [PATCH] sp_ram byteen fix --- hw/opae/README | 1 + hw/rtl/libs/VX_sp_ram.v | 53 ++++++++++++++++------------------------- 2 files changed, 21 insertions(+), 33 deletions(-) diff --git a/hw/opae/README b/hw/opae/README index 33c0a918..c4879b39 100644 --- a/hw/opae/README +++ b/hw/opae/README @@ -96,6 +96,7 @@ gtkwave ./build_ase_1c/work/vortex.vcd & # kill process by Users ps -u tinebp kill -9 +ps -u tinebp | grep "blackbox" | awk '{print $1}' | xargs kill -9 # fixing device resource busy issue when deleting /build_ase_1c/ lsof +D build_ase_1c diff --git a/hw/rtl/libs/VX_sp_ram.v b/hw/rtl/libs/VX_sp_ram.v index 37974096..14d0c5da 100644 --- a/hw/rtl/libs/VX_sp_ram.v +++ b/hw/rtl/libs/VX_sp_ram.v @@ -22,23 +22,18 @@ module VX_sp_ram #( `STATIC_ASSERT((1 == BYTEENW) || ((BYTEENW > 1) && 0 == (BYTEENW % 4)), ("invalid parameter")) - localparam DATA32W = DATAW / 32; - localparam BYTEEN32W = BYTEENW / 4; - if (FASTRAM) begin if (BUFFERED) begin reg [DATAW-1:0] dout_r; if (BYTEENW > 1) begin - `USE_FAST_BRAM reg [DATA32W-1:0][3:0][7:0] mem [SIZE-1:0]; + `USE_FAST_BRAM reg [BYTEENW-1:0][7:0] mem [SIZE-1:0]; always @(posedge clk) begin if (wren) begin - for (integer j = 0; j < BYTEEN32W; j++) begin - for (integer i = 0; i < 4; i++) begin - if (byteen[j * 4 + i]) - mem[addr][j][i] <= din[j * 32 + i * 8 +: 8]; - end + for (integer i = 0; i < BYTEENW; i++) begin + if (byteen[i]) + mem[addr][i] <= din[i * 8 +: 8]; end end if (rden) @@ -58,15 +53,13 @@ module VX_sp_ram #( end else begin `UNUSED_VAR (rden) if (BYTEENW > 1) begin - `USE_FAST_BRAM reg [DATA32W-1:0][3:0][7:0] mem [SIZE-1:0]; + `USE_FAST_BRAM reg [BYTEENW-1:0][7:0] mem [SIZE-1:0]; always @(posedge clk) begin if (wren) begin - for (integer j = 0; j < BYTEEN32W; j++) begin - for (integer i = 0; i < 4; i++) begin - if (byteen[j * 4 + i]) - mem[addr][j][i] <= din[j * 32 + i * 8 +: 8]; - end + for (integer i = 0; i < BYTEENW; i++) begin + if (byteen[i]) + mem[addr][i] <= din[i * 8 +: 8]; end end end @@ -86,15 +79,13 @@ module VX_sp_ram #( reg [DATAW-1:0] dout_r; if (BYTEENW > 1) begin - reg [DATA32W-1:0][3:0][7:0] mem [SIZE-1:0]; + reg [BYTEENW-1:0][7:0] mem [SIZE-1:0]; always @(posedge clk) begin if (wren) begin - for (integer j = 0; j < BYTEEN32W; j++) begin - for (integer i = 0; i < 4; i++) begin - if (byteen[j * 4 + i]) - mem[addr][j][i] <= din[j * 32 + i * 8 +: 8]; - end + for (integer i = 0; i < BYTEENW; i++) begin + if (byteen[i]) + mem[addr][i] <= din[i * 8 +: 8]; end end if (rden) @@ -115,15 +106,13 @@ module VX_sp_ram #( `UNUSED_VAR (rden) if (RWCHECK) begin if (BYTEENW > 1) begin - reg [DATA32W-1:0][3:0][7:0] mem [SIZE-1:0]; + reg [BYTEENW-1:0][7:0] mem [SIZE-1:0]; always @(posedge clk) begin if (wren) begin - for (integer j = 0; j < BYTEEN32W; j++) begin - for (integer i = 0; i < 4; i++) begin - if (byteen[j * 4 + i]) - mem[addr][j][i] <= din[j * 32 + i * 8 +: 8]; - end + for (integer i = 0; i < BYTEENW; i++) begin + if (byteen[i]) + mem[addr][i] <= din[i * 8 +: 8]; end end end @@ -139,15 +128,13 @@ module VX_sp_ram #( end end else begin if (BYTEENW > 1) begin - `NO_RW_RAM_CHECK reg [DATA32W-1:0][3:0][7:0] mem [SIZE-1:0]; + `NO_RW_RAM_CHECK reg [BYTEENW-1:0][7:0] mem [SIZE-1:0]; always @(posedge clk) begin if (wren) begin - for (integer j = 0; j < BYTEEN32W; j++) begin - for (integer i = 0; i < 4; i++) begin - if (byteen[j * 4 + i]) - mem[addr][j][i] <= din[j * 32 + i * 8 +: 8]; - end + for (integer i = 0; i < BYTEENW; i++) begin + if (byteen[i]) + mem[addr][i] <= din[i * 8 +: 8]; end end end