Sone033 Fixed -
Provide a detailed explanation of what "sone033" refers to. This could be a bug, an error code, or a known issue within a specific system or software. Understanding the root cause is crucial for both the writer and the reader.
Two complementary changes were introduced:
Idempotent Timer Update Logic
RTL Patch (excerpt):
// New lock‑step request handling
always @(posedge clk) begin
if (reset) begin
req_fifo <= 2'b00;
end else if (dma_done) begin
req_fifo <= req_fifo[0], 1'b1; // push
end else if (timer_ack) begin
req_fifo <= 1'b0, req_fifo[1]; // pop
end
end
// Idempotent timer update
always @(posedge clk) begin
if (timer_ack) begin
timer_reg <= timer_reg + 8'd0, pir;
pir <= 8'd0;
end else if (req_fifo[1]) begin
pir <= pir + 1'b1; // accumulate
end
end
Figure 1 illustrates the relevant portion of the SONE micro‑architecture. The DMA engine consists of a Channel Arbiter (CA) and a Transfer Engine (TE). TIMER0 resides in the Peripheral Register File (PRF) and is updated each clock cycle by the Timer Logic (TL). The CA signals the TE to perform bus transactions; the TE, in turn, can request a Timer Update (TU) when a transfer completes, to synchronize timestamps. sone033 fixed
+-----------------+ +-------------------+ +-----------------+
| DMA Channel Arb | ---> | Transfer Engine | ---> | System Bus |
+-----------------+ +-------------------+ +-----------------+
^ | |
| v v
| +------------+ +------------+
+--------------> | Timer Logic| <------- | PRF (TIMER0)|
+------------+ +------------+
Static analysis of the RTL (register‑transfer level) code revealed an off‑by‑one bug in the TU request generation logic:
// Original buggy code (verilog)
always @(posedge clk) begin
if (dma_done && (timer_req == 1'b0)) begin
timer_req <= 1'b1; // Request update
end else if (timer_ack) begin
timer_req <= 1'b0; // Clear request
end
end
When two DMA channels finish within one clock cycle, both assert dma_done. The first channel sets timer_req to 1. The second channel sees timer_req == 1'b1 (already asserted) and does not generate a second request, resulting in a missed timer update. The subsequent timer_ack clears the request prematurely, causing the timer register to be updated with stale data. This corrupts the fractional part of TIMER0, leading to the observed watchdog expiry. Provide a detailed explanation of what "sone033" refers to
| Domain | Failure Mode | Safety Level (ISO 26262) | Consequence | |--------|--------------|--------------------------|-------------| | Automotive ADAS | Unexpected MCU reset | ASIL B | Loss of sensor fusion → degraded assistance | | Industrial PLC | Peripheral mis‑configuration | ASIL A | Production line slowdown | | Medical Wearables | Watchdog reset during therapy | ASIL C | Potential patient harm |