Hallo, ich möchte ein VHDL Modul instanziieren welches einen sagen wir 5 bit breiten Eingangsvektor besitzt (zum Beispiel das Busy Signal von 5 Kanälen eines anderen Moduls). Ich wollte das so machen instanz_name : modul port map ( busy => busy_1 & busy_2 & busy_3 & busy_4 & busy_5 ); .... das scheint so aber nicht zu gehen (Fehlermeldung beim Synthetisieren). Geht das wirklich nicht oder mache ich nur einen Formfehler? (theroetisch ist ja damit klar ausgedrückt was womit verbunden werden soll, also könnte es eigentlich gehen) Wenn es wirklich so nicht geht wie macht man sowas dann? Was ich mir vorstellen könnte wäre eine nebenläufige Anweisung wie: zwischensignal (4 downto 0) <= busy_1 & busy_2 & busy_3 & busy_4 & busy_5; und dann die zuweisung des zwischensignals bei der Instanziierung. Wäre das der richtige Weg? Grüße Tom
Das mit den zwischensignal ist richtig, die erste Variante geht nicht, da links kein Signal steht sondern eine Operation ( &). Tom wrote: > ich möchte ein VHDL Modul instanziieren welches einen sagen wir 5 bit > breiten Eingangsvektor besitzt (zum Beispiel das Busy Signal von 5 > Kanälen eines anderen Moduls). > Ich wollte das so machen > > instanz_name : modul > > port map ( busy => busy_1 & busy_2 & busy_3 & busy_4 & busy_5 > ); > > Was ich mir vorstellen könnte wäre eine nebenläufige Anweisung wie: > > zwischensignal (4 downto 0) <= busy_1 & busy_2 & busy_3 & busy_4 & > busy_5; > > und dann die zuweisung des zwischensignals bei der Instanziierung.
OK dann werde ich das über das Zwischensignal lösen. Warum funktioniert dann aber eigentlich die Sache mit dem Verkettungsoperator & beim Erstellen des Zwischensignals? Da ist es doch auch eine Signalzuweisung und man schreibt eine Operation hin?
Tom wrote: > OK dann werde ich das über das Zwischensignal lösen. > > Warum funktioniert dann aber eigentlich die Sache mit dem > Verkettungsoperator & beim Erstellen des Zwischensignals? Da ist es doch > auch eine Signalzuweisung und man schreibt eine Operation hin? Hm interessant. "Weil es VHDL nicht zuläßt!" - wäre eine korrekte Antwort, aber damit wäre ich auch nicht zufrieden. "Weil man so Hardware nicht vollständig beschreiben kann" scheint den nagel auf den Kopf zu treffen, ist aber auch nicht für den frager verständlich. Also: Port Map (=>)und Signalzuweisung (<=) sind zweierlei, der Effekt nur scheinbar derselbe. Wenn man VHDL laut list sagt man bei dem Portmap Pfeil "gets" und bei der Signalzuweisung "is connected to". Der feine Unterschied liegt im zeitliche Verhalten. In der Signalzuweisung ist immer eine Verzögerung enthalten. Mindestens ein Simulationsschritt (Delta-cycle) in echt einige Pico bis Nanosekunden. Die zeit schreibt man für die Simulation auch an die Zuweisung (a <= b after 2 ns;) ran. Bei der Portmap wird die verzögerung nicht mit beschrieben, die Portmap ist verzögerungsfrei. In Echt hast du nun 4 leitungen die du an die Komponente führst, jede unterschiedlich lang und dadurch mit unterschiedlichen Verzögerungen behaftet. Ohne das Zwischensignal kann die Simulation keine Verzögerungen berechnen, also wirst du gezwungen diese Zwischensignal vorzugeben. Daher stammt wohl die festlegeung nur signale (Modelle mit verzögerung) in portmaps zu verwenden und keine Operatoren. Wenn ich es mir recht Überlege ist "&" das Problem, weil dadurch das Verzögerungsmodel verkürzt wird. Meint a <= b & c & d after 3 ns; verschleiert die unterschiedlichen verzögerungen. Ist aber leichter zu überschauen als. a(2) <= b after 3 ns; a(1) <= c after 3 ns; a(0) <= d after 3 ns; Also kurz gesagt, da in VHDL Signale mit Verzögerungen modelleirt werden, kann man die Signalzuweisung nicht wie eine Speicherstellenzuweisung in C verwenden. ist halt ne andere Philosophie di dahinter steht.
Vielen Dank, für die ausführliche Antwort. Den Unterschied habe ich erst nicht gesehn und konnte deshalb nicht nachvollziehen warum es in der port map nicht gehen soll. Aus der von Dir beschriebenen Sicht macht diese Regel (Operatoren in port maps unzulässig) aber jetzt auch für mich Sinn. Grüße Tom
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.