the smoking gun: an invalid bus transfer. both rd and wr are asserted at the same time. before that we see the missing data on the bus: 6DDB. so the card thinks it is in a DMA cycle even though it is not, and it's putting data on the bus when it shouldn't be!
i deleted 3 characters from my verilog and it works now. 😅
(i still need to test writes, and i need to test it without the logic analyzer card)