Danke fuer den Vorschlag.
Aber das macht ja mein workaround auch schon. Das Problem ist die
Bidirektionalitaet des Signals.
Wuerde ich nun mit der Funktion schreiben
1 | i2c_slave_sda <= i2c_logic_conv(i2c_sda);
|
dann klappt das wunderbar, solange der slave SDA liest. Will er dann
aber sein acknowledge oder Daten senden, also selbst SDA schreiben, dann
darf der SDA Bus nur 'H' sein (um ueberschrieben zu werden) aber nicht
aufgeloest auf '1', da es dann zum Konflikt kommt. Es darf also im
Prinzip nur der SDA input des slaves aufgeloest werden, nicht aber der
Bus. Das ist aber so nicht moeglich, da SDA am slave ja ein und dasselbe
Signal fuer input und output ist. Von aussen besteht keine Moeglichkeit
festzustellen, wann der Treiber an und aus ist.
In realer Hardware klappt es ja, weil es nun mal 'H' ist (pullup) und
als '1' erkannt wird, nur die Simulation mag das nicht in der Weise.