Hi! Ich habe einen Bus dessen Pins ich in VHDL als "inout" realisiert habe. Es kann nun aber ein anderer Master meinen Bus auf "LOW" ziehen wärend ich ein "HIGH" darauf gebe. Kann ich wenn ich in VHDL den PIN auf "HIGH" setzte ihn dann einlesen und bekomme ein "LOW" wenn der Bus von einem anderen Master "LOW" gesetzt wird oder muss ich meinen PIN auf high impedance setzen um ihn einzulesen? Danke hmann
Es soll immer nur ein Treiber pro Signal aktiv sein, da du sonst einen Kurzschluß zwischen den zwei Treiber produzierst. Einzige Ausnahme sind Treiber einer Open-Kollektor oder Open-Drain Schaltung, die nur in die gleiche Richtung ziehen können. Deshalb immer bei INOUT auf 'Z' setzen, da sonst der Ausgang nicht abgeschalten und der Eingang nicht einlesbar wird. Gruß Max
Hallo wenn ich das richtig verstehe, ist das ein OpenCollector-Bus. Dazu der Busmaster 'H' auf dem Pin/Bus ausgeben. Wenn ein anderes Gerät den Pin/Bus auf low ziehen will, musst es '0' ausgeben. VHDL-Referenz (in IEEE.STD_LOGIC_1164.ALL definiert): type std_logic is ( 'U', --uninitialized 'X', --forcing unknown '0', --forcing zero '1', --forcing one 'Z', --high impendance 'W', --weak unknown 'L', --weak zero 'H', --weak one '-'); --don't care
Das 'H' wird durch einen externen Pull-up definiert. Nur das 'L' musst du durch deinen Treiber definieren. Der Treiber darf nicht den 'H' Pegel treiben!! Gruß Max
hi! Ich muss das Thema nochmal aufgreifen. Ich hatte ne längere Pause. Es handelt sich um einen I2C Bus den ich implementieren will (nur einen Master) und ich will das ACKNOWLEDGE BIT vom Slave einlesen. Am Oszi sieht es auch schön aus. Das 9. Bit zieht der Slave auf '0' Intern ist SDA auf 'H' gesetzt und ich bekomme eine '1' wenn ich SDA abfrage... :( Es ist egal ob ich 'Z' oder 'H' setze es geht mit keinem von beiden... Kann mir vieleicht jemand nen Tip geben? Danke!!
es hängt nun vom jeweiligen Tool ab, arbeitest du mit Quartus oder WebPack. Desweiteren hängt es vom CPLD ab, ist es ein Altera oder Xilinx Stein. Wenn ich nicht weiterweis in VHDL so arbeite ich mit den integrierten Schematic Editoren beider Tools. Dort musst du "Buffer" finden wie "OpenDrain" etc. pp. Im Schematic solche Buffer einbauen und das Schematic als VHDL exportieren. In diesem VHDL findest du exakt die Instanzierungen der nötigen Componenten für dich. Das musst du dann nur in dein VHDL kopieren. Fazit: du musst im VHDL die speziellen Komponenten für deinen Chip instanzieren damit der VHDL Compiler weis was du erzeugen willst. Oder aber du benutzt den Pin-Assignment-Editor. Dort legst du fest auf welchen Pins welches Signal kommen soll. Nebenbei kannst du dort verschiedene Optionen definieren, wie Slew-Rate, PowerUp State, etc. pp. und eben auch ob OpenDrain, TriState usw. Gruß Hagen
hi Hagen! Ich arbeite mit einem Xilinx CPLD XC9572XL und dem Webpack. Ne Schlatung mit dem Schematics Editor aufzubauen krieg ich nicht hin. Bin noch Anfänger... Aber es muss doch auch irgendwie in VHDL gehen. Sonst bringt doch der inout typ nix... Ciao hmann
architecture Behavioral of XYZ is component OBUFE port (O: out STD_ULOGIC; E: in STD_ULOGIC; I: in STD_ULOGIC); end component; begin B1: OBUFE port map (O => user_O, E => user_E, I => user_I); end.... Du benutzt einen OBUFE, bei User_O setzt du dein inout Pin rein das als Ausgabe/Eingabe dient, bei User_I das zum Lesen als Eingang und mit User_E schaltest du zwischen beiden um. E ist Active High, wenn E = '0' dann ist der Output High "Z". Schau mal in den Ordner C:\Xilinx\doc\usenglish\de\libs\ dir die PDF's genauer an. Echte PullUps gibt bei den XC Typen nicht. Gruß Hagen
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.