Gast
#3092823
Hallo zusammen, ich habe in meinem VHDL Modul einen I2C Slave verbaut. Dieser kann Daten empfangen und senden. In meiner Top-Testbench habe ich einen I2C Master eingebunden, der den I2C Slave ansprechen soll. Leider hat der den Nachteil/die dumme Angewohnheit, dass er die Leitungen nur auf '0' treiben kann und ansonsten SCL und SDA auf 'Z' legt. Mit einem 'Z' kann mein I2C Slave nur leider nicht anfangen. Da sowohl Slave, als auch Master hier im Uninetzwerk im Bibliotheken vorliegen, kann ich diese auch nicht ändern. Ein Änderungsvorschlag habe ich schon gemacht, der wird gerade geprüft. SDA ist ein Port vom Typ INOUT. Ich habe also in meinem VHDL Modul eine Art Buffer verbaut, der für SDA die Umschaltung vornimmt. Er schaltet also SDA_IN und SDA_OUT mit einem OEN Pin um und damit auf dem INOU Port meines Top-Moduls. Nun muss ich mir was einfallen lassen, wie ich den "Fehler" mit dem Zustand 'Z' behandeln soll. Wenn ich es so versuche:
1 | |
2 | |
klappt es zwar für SCL, denn der ist unidirektional, aber nicht für SDA. Sobald der Slave versucht die Daten auf '0' zu ziehen, gibt es ein 'X', weil dann SDA_IN_SLAVE und SDA_IN_MASTER gegeneinander treiben. Gibt es eine Möglichkeit, wie ich die bidirektionalen Daten sicher umschalten kann? Vielen Dank! Ralf