Skip to content

i2c proxy bug3: invalid start hold time on handoff #498

@nathanaelhuffman

Description

@nathanaelhuffman

PLAY_STORED_START has an immediate handoff that bypasses start-condition hold time

-- line 310-312
if sample_r.state = SAMPLE_START and cpu_scl_in = '1' then
    v.state := CPU_HAS_BUS;
    v.playback_done := '1';

CPU_HAS_BUS immediately clears dimm_sda_oe, releasing SDA. The start condition hold time (t_HD;STA, minimum 600 ns for Fast Mode) requires SDA to stay low while SCL is high for that duration. Releasing SDA after a single system clock cycle will not satisfy this hold time. We have a state ENSURE_PLAYBACK_HOLD that exists specifically to cover this gap but this path bypasses it.

Possible Fix: route through ENSURE_PLAYBACK_HOLD here too, same as the other branches.

Reproduced in simulation, not caught in hardware by me.

Metadata

Metadata

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions