Skip to content

Parity Error Check Bug - When D1-mini sends 0x22 for a reread after a parity error the FPGA does not decrement the address by 8. #19

Description

@dennowiggle

I tested using the incrementing byte pattern that vram is initialized too by file vram_test.txt, and then loading the canvas.html page on the standalone D1-mini programmer with the relevant "verbose = true" in function romulatorReadVramBlock() in module libRomulatorDebug.cpp to print out the returned data values.

To produce a parity error to test the FPGA I forced a send of 0x22 to the FPGA when a specific vram address was accessed and looked at the data returned by the FPGA.

The error in the FPGA verilog code is in the VERIFY_PARITY_BYTE section of the state machine in "diagnostics.v". Change line 219 from "if (rx_dv <= 1'b1)" to "if (rx_dv == 1'b1)"

VERIFY_PARITY_BYTE:
begin
  tx_dv <= 0;
  // if (rx_dv <= 1'b1)
  if (rx_dv == 1'b1)
  begin
    if (rx_byte == PARITY_ERROR)
    begin
      vram_address <= vram_address - 8;
    end
    state <= NEXT_VRAM_BYTE;
  end
end

Now that "if (rx_dv == 1'b1)" is functioning properly, the D1-mini code needs to be modified in file "libRomulatorDebug.cpp".

Between lines 356 and 357 add
// Advance FPGA so it can prepare the next vram byte for sending over SPI.
xfer(0x0);

A similar change should also be made on the Raspberry Pi code for that version of debugger.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions