From 7aad290931dde9f96a1ecfd43fd1c1086135010b Mon Sep 17 00:00:00 2001 From: Filip Filmar Date: Sat, 28 Jun 2025 08:18:44 +0000 Subject: [PATCH] fix: initialize the last 4 bytes of `mem` to zero These last 4 bytes are, in fact, used for register `x0`, and must be zero. In multi-valued simulators, however, without an explicit init, these bytes start as undefined. Moving `x0` to anywhere results in those undefined bytes "infecting" other registers. Issue: #148 --- serving/serving_ram.v | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/serving/serving_ram.v b/serving/serving_ram.v index a8017ced..178fb0ee 100644 --- a/serving/serving_ram.v +++ b/serving/serving_ram.v @@ -37,9 +37,17 @@ module serving_ram o_rdata <= mem[i_raddr]; end - initial + initial begin if(|memfile) begin $display("Preloading %m from %s", memfile); $readmemh(memfile, mem); end + + // The last 4 bytes are the `x0` (zero) register. Zero them out + // to avoid starting the simulation with `x0` undefined. + mem[depth-4] = 8'h0; + mem[depth-3] = 8'h0; + mem[depth-2] = 8'h0; + mem[depth-1] = 8'h0; + end endmodule