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 |