Forum: FPGA, VHDL & Co. mehrere Signale mit Vektor verbinden beim Instanziieren?


von Tom (Gast)


Lesenswert?

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

von Fpgakuechle K. (Gast)


Lesenswert?

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.

von Fpgakuechle K. (Gast)


Lesenswert?

Sorry rechts und links verwechselt.

von Tom (Gast)


Lesenswert?

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?

von Fpgakuechle K. (Gast)


Lesenswert?

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.

von Tom (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.