Found another weird thing.. I got AI to explain, I'm not sure if this is real or its actually a thing ?!
```
ARAM/BA Idle State - Signal Integrity Note
The idle clear inside cycle==0 when AS30_int==1 in the SDRAM module:
Code: Select all
if (AS30_int == 1'b1) begin
address <= 13'd0;
bank <= 2'd0;
end
is
NOT required by the SDRAM protocol. The W9825G6KH ignores ARAM and BA during NOP/idle cycles - they are genuine don't-care inputs between commands.
However it
IS required on this hardware for signal integrity reasons.
WITHOUT the idle clear:
ARAM and BA hold whatever value was last driven during the previous access column address phase. The starting state before each new access is therefore random and depends on access history. When a new access begins, the number of ARAM/BA bits switching simultaneously varies unpredictably. On sequential memory tests (such as YAARTTT moving through addresses in order) this produces correlated worst-case switching patterns that cause sufficient ground bounce on the SDRAM VSS pins to corrupt data. The failure signature is bit 10 errors (fffb!=fbfb pattern) in TT-RAM, consistent with noise-induced data corruption rather than a logic error.
WITH the idle clear (to 0 or any other fixed value):
Every access starts from the same known baseline regardless of what the previous access was. The switching pattern from idle state to row address is consistent and bounded for any given address. Ground bounce stays within the margin the hardware tolerates and errors disappear.
The specific idle value does not matter - both
13'd0 and
13'h1FFF were tested and both pass. What matters is
consistency. Scope measurements confirmed approximately 1V overshoot on ARAM lines due to transmission line reflections from the ABT16245 bus buffer switching. Random simultaneous switching pushes this over the threshold that corrupts data.
Slow slew rate on ARAM/BA/RAS/CAS/RAMWE was investigated as an alternative fix but made things worse - it reduces setup margin from ~5ns to ~2ns which is insufficient at 100MHz. The idle clear costs only 2 product terms in the CPLD and has no timing impact since the SDRAM ignores these pins during idle anyway.
Important: The idle clear is inside
cycle==0 only - it cannot fire mid-access during tRCD between RAS and CAS which would corrupt the row address. The visible ARAM transitions between RAS and CAS on a scope are normal address multiplexing (row address then column address on the same pins) and are not related to the idle clear.
```