Hallo Ich plage mich gerade mit einem als inout definierten Pin herum... Eigentlich sollte doch diese Anweisung die Daten von data_in nach data_inout schreiben: data_inout <= data_in; Tut sie auch, aber nur so lange data_inout als out definiert ist. Ist es ein inout, so funktioniert es nicht. Seltsam, oder habe ich irgend etwas vergessen? (Bzw. noch keine Kenntnisse davon.) Gruss Michael
Hallo, hast du denn alle drei Zustände von data_inout definiert?? Der dritte Zustand ist ja high Z!! Die Zeile gibt Daten aus data_inout <= data_in; irgendwo in deinem Quelltext steht bestimmt auch eine Dateneingabe..... aber hast du auch definiert wie data_inout sich verhalten soll wenn nix ein- oder ausgeben werden soll??? In diesem Fall mußt du dieses Signal auf high_z setzten!!! data_inout <= 'Z' ; Dann sollte es funktionieren Gruß Stephan
Was funktioniert nicht? Funktioniert die Schaltung nicht, oder gibt es beim compilieren einen Fehler?
> Was funktioniert nicht? > Funktioniert die Schaltung nicht, oder gibt es beim compilieren einen > Fehler? Es gab in der Simulation einen Fehler, jetzt allerdings geht es. > aber hast du auch definiert wie data_inout sich verhalten soll wenn nix > ein- oder ausgeben werden soll??? > In diesem Fall mußt du dieses Signal auf high_z setzten!!! > data_inout <= 'Z' ; Auf Z nur dann, wenn gar nix passiert? Bedarf es noch irgendwelchen Vorkehrungen, wenn ich von Eingabe auf Ausgabe bzw. umgekehrt umschalte?
Es ist wie bei richtiger Hardware. Auf 'Z' (hochohmig) wird geschalten, wenn an den Pin von außen ein Signal gelegt wird, wenn also der FPGA/CPLD beschrieben wird. Wenn der Chip gelesen wird, d.h. wenn das FPGA/CPLD das Signal auf dem externen Bus bestimmen soll, dann wird nicht 'Z', sondern eben das gewünschte Signal an den inout port geschalten.
@mr.chip: Ich habe das gleiche Problem, dass ich einen inout-Port nicht zuweisen kann. Was hast du gemacht, dass es funktioniert hat? @all: Ich habe folgendes versucht (syntax könnte event. fehler enthalten, es geht nur um die funktionsweise. und bitte seht davon ab, dass read, write keine gültigen variablennamen sind): -------------------------------------------------------------------- entity Modul_1 is port (iopin : inout std_logic); end Modul_1; architecture bhv of Modul_1 is signal read : std_logic; signal write : std_logic := '1'; signal wenable : std_logic := '0'; begin read <= iopin; iopin <= write when wenable = '1' else 'Z'; process is begin wait for 10 ns; wenable <= '1'; wait for 10 ns; wenable <= '0'; wait until read = '0'; report "module 2 done its job" severity note; wait; end process; end bhv; entity Modul_2 is port (iopin : inout std_logic); end Modul_2; architecture bhv of Modul_2 is signal read : std_logic; signal write : std_logic := '0'; signal wenable : std_logic := '0'; begin read <= iopin; iopin <= write when wenable = '1' else 'Z'; process is begin wait until read = '1' report "module 1 done its job" severity note; wait for 50 ns; wenable <= '1'; wait for 10 ns; wenable <= '0'; wait; end process; end bhv; entity testbench is end testbench; architecture bhv of Modul_2 is signal iosignal : std_logic; begin instance : module_1 port map (iopin => iosignal); instance : module_2 port map (iopin => iosignal); end bhv; -------------------------------------------------------------------- Eigentlich müsste ja jetzt zuerst Modul 1 den io-Port auf high ziehen und danach den Port wieder freigeben. Dann ist Modul 2 an der Reihe, zieht den io-Port auf Low und gibt in nach 10 ns wieder frei. Allerdings werden in der Simulation (mit Modelsim) die Portveränderungen in den betreffenden Modulen (entities) nicht verzeichnet. Kann mir jemand sagen, was ich da falsch gemacht habe? mfg Johnsn
Rückzug! Ich ziehe den Beitrag zurück! Der Code den ich gepostet habe, funktioniert "komischerweise" doch. Ich hatte einfach den komplexen VHDL-Code on-the-fly vereinfacht und dabei ist dann doch was richtiges rausgekommen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.