Hallo, ich bin vhdl neuling und habe eine frage zur verknüpfung von unterprogrammen im hauptprogramm. ein einfaches beispiel aus unserem script ist ein andgatter, dessen ausgang (2x) auf ein orgatter gelegt wird. Fragen: 1. meiner meinung ist folgende zeile falsch: or_in1 => verbindung, or_in2 => verbindung, müsste das nicht andersrum sein??? verbindung => or_in1 ??? das signal verbindung ist doch jetzt das was aus dem or gatter raus kommt und muss auf die INs vom or gatter gelegt werden. 2. meckert das programm nicht weil And1 und Or1 nicht definiert ist? bei: And1: andgatter port map .... 3. wofür steht port MAP? Denke mal man schreibt immer "komponentenname" port map (Zuweisungen der Eingänge der components) ist das richtig so? LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY andgatter IS PORT ( and_in1 : IN std_logic; and_in2 : IN std_logic; andout : out std_logic ); END andgatter; ARCHITECTURE looks_like OF andgatter IS begin andout <= and_in1 and and_in2; END looks_like; ------------------------------------------------------------------------ --- --or.vhd---------------------------------------------------------------- -- LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY orgatter IS PORT ( or_in1 : IN std_logic; or_in2 : IN std_logic; orout : out std_logic ); END orgatter; ARCHITECTURE looks_like OF orgatter IS BEGIN orout <= or_in1 or or_in2; END looks_like; ------------------------------------------------------------------------ --- LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY andorgatter IS PORT ( in1_andor : IN std_logic; in2_andor : IN std_logic; out_andor : out std_logic ); END andorgatter; ARCHITECTURE looks_like OF andorgatter IS Component andgatter PORT ( and_in1 : IN std_logic; and_in2 : IN std_logic; andout : out std_logic ); end component; Component orgatter PORT ( or_in1 : IN std_logic; or_in2 : IN std_logic; orout : out std_logic ); end component; signal verbindung: std_logic; begin And1: andgatter port map (and_in1 => in1_andor, and_in2 => in2_andor, andout => verbindung); Or1: orgatter port map (or_in1 => verbindung, or_in2 => verbindung, orout => out_andor); END looks_like; ------------------------------------------------------------------------ -- Danke schon mal!
Hansi H. schrieb: > verknüpfung von unterprogrammen im hauptprogramm Da liegt der Gedankenfehler aus dem alles ergibt. VHDL kennt zwar Unterprogramme (functions) aber dein Beispiel verwendet "Components". Das sind nicht Aufrufe von Unterprogrammen, sondern Modelle von digitalen Bausteinen, die mittels Signale (entspricht einer (Kupfer?)-Leitung) verdrahtet werden. VHDL ist eben eine Sprache zum Simulieren und Testen digitaler Schaltungen.
ja dass die mithilfe von signalen verbunden werden weiß ich ;) hab für ein Digitaltechnik praktikum auch schon 3 einzelne components programmiert die in einem "hauptprogramm" zusammengefasst bzw. eingegliedert werden müssen! und dieses einfache beispiel steht bei uns auf nem plakat als allgemeine erklärung wie man components in einem programm eingliedert... aber mMn ist wie ich in frage 1 schon gesagt hab was falsch! der ausgang vom component and wird dem signal zugewiesen... und jetzt sollen zwi unbekannte INPUTs vom OR-Gatter ebenfalls dem signal zugewiesen werden? das ergibt ja keinen sinn! eigentlich sollte es andersrum sein! wäre nett wenn mir jemand die 3 fragen, v.A. die 1. beantworten könnte ;)
Hansi H. schrieb: > und jetzt sollen zwi > unbekannte INPUTs vom OR-Gatter ebenfalls dem signal zugewiesen werden? Da wird nichts zugewiesen, da wird verbunden! Das ist wie einen Kabel löten. Das Kabel mit Namen "verbindung" wird an den Ausgang von and1 gelötet, und dieses Kabel wird dann an die Eingänge von Or1 geführt (gelötet).
achso danke ;) und wenn ich z.B. ein case habe mit case .... is when .... => irgendeinen_port_out <= '0' -- bzw. irgendeinen wert bedeutet der pfeil dann was anderes? ich hab das noch so in erinnerung dass unser prof bei so einem beispiel meinte dass der 1. pfeil nach dem when wie ein folgepfeil ist und der 2. eine zuweisung. in dem beispiel zur verbindung mit den components hat dann der pfeil eine ganz andere bedeutung oder wie? ist die richtung des pfeils dann eigentlich egal? oder zeigt die immer vom port zum "verbindungsKabel" ?
Hansi H. schrieb: > bedeutet der pfeil dann was anderes? Ja, klar. Das ist ja ganz offensichtlich ein anderer Kontext (eben keine Portliste mehr) und zudem zeigt der Pfeil in die andere Richtung. bestenfalls könnte man noch die Frage durchgehen lassen: Ist '<=' jetzt eine Zuweisung oder ein "kleiner gleich"? Bei diesen Pfeilen kommt es ganz klar darauf an, wo im VHDL Text sie stehen. Das ist ganz einfach so, und du mußt dir das nur merken...
naja ich hab die pfiele eben bis jetzt nur als zuweisung gekannt, bzw. der pfeil => nach dem when als so eine art "daraus folgt" und dass das dann bei den ports auch ne zuweisung ist hätte für mich auch sinn ergeben, quasi einem signal ein OUT zuweisen, das signal kann dann zwischen components interagieren und dann das signal den INs zuweisen. das wäre dann ja auch wie eine verbindung... nur über wertzuweisungen.. aber jetzt weiß ich ja nach deiner erklärung dass es so nicht geht ;) OK fazit: => bedeutet bei signalen verbindung wertzuweisung bei signalen nur mit :=
Hansi H. schrieb: > wertzuweisung bei signalen nur mit := Auch nicht ganz: := wird einerseits als Wertzuweisung für Variablen (lass im Augenblick die Finger davon, die Verwirrung wird sonst noch grösser) andererseits als Initialwertzuweisung für Signale und Konstanten verwendet. Zuweisungen für Signale im Body (und nicht kleiner gleich): <=
Hansi H. schrieb: > OK fazit: Kauf dir ein VHDL-Buch. Im Ernst... Dort siehst du und lernst dann bald, wleche Pfeile und Doppelpunkte wohin passen und wo sie fehl am Platz sind. Der Rest ist Praxis. BTW: Hansi H. schrieb: > Component andgatter Warum muß jeder ein AND-Gatter in VHDL machen? Oder einen Halb- und dann einen Volladdierer? Warum nicht auch einen Inverter? Für solche trivialen Anwendungsfälle gibt es doch die passenden Operatoren (AND, OR, NAN, NOR, +, -, *, ...).
es gibt keine verwirrung.. habs doch nach der erklärung gecheckt.. und variablen benutz ich in nem programm auch mehrfach.. weiß nicht warum das mich noch mehr verwirren sollte o.O es funktioniert ja alles einzeln.. muss es ja nur noch zusammenfgen und deswegen das einfache beispiel hier
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.