Forum: FPGA, VHDL & Co. Synthes von Funktionen


von Frank (Gast)


Lesenswert?

Hallo,

eine Frage zur Synthese von Funktionen.

Ein Prozess ruft häufig ca. 40 mal mehrere Funktionen auf.

Wenn ich unter Xilinx ISE bei der Synthese nun alles umsetze, kann ich 
angeben, um Harwareresourcen zu sparen, das die Funktion nur einmal 
implementiert wird und über Multiplexer zugeschaltet wird?

Oder wird die Funktion bei jedem Aufruf an dieser Stelle implementiert?

Kann ich über VHDL so etwas erzwingen?

Besten Dank im Voraus!

Gruß

Frank

von Frank (Gast)


Lesenswert?

Noch als Ergänzung

Resource Sharing war bei der Synthese eingeschaltet.

Gruß

Frank

von Rick Dangerus (Gast)


Lesenswert?

Nein. Du brauchst sie ja ca. 40x gleichzeitig. Wenn Du multiplexen 
willst, dann schreib das hin.

Rick

von Achim (Gast)


Lesenswert?

Hallo Rick

besten Dank!

Es sieht im Prozess ca. so aus:

entity test (B in Studio_logig_vector (7 down to 0)
              y out Studio_logig_vector (7 down to 0);

process test (B)

variable a,c,k,o Studio_logig_vector (7 down to 0)

begin

A:=B;
C:=function1 (A);
K:=function1 (C);
O:=function1 (K);
y<=O;
end process

Also die Funktionen werden nacheinander aufgerufen. Sie werden aber 
trotzdem 3 mal realisiert richtig?

Wie kann ich die funktion1 denn explizit multiplexen so das sie nur 
einmal realisiert wird?

Gruß

Frank

von Mathi (Gast)


Lesenswert?

Dir muss klar werden, das ein Prozess lediglich die sequentielle 
Beschreibung eines parallelen Vorgangs ist. Deine Funktionsaufrufe 
"geschehen" alle zur exakt gleichen Zeit. D.h. das jeder Aufruf in ein 
Schaltnetz umgesetzt wird. Wenn Du Hardware einsparen willst, musst Du 
dafür sorgen das Zeit zwischen den Aufrufen vergeht. Das kannst Du z.B. 
mit einem Zustandsautomaten machen der Takt für Takt die Funktion mit 
einem anderen Parameter aufruft. Oder den "Eingang" der Funktion 
implizit durch ein Signalmapping ändert. Das sollte jedoch beides in die 
gleiche Struktur übersetzt werden.

von Mathi (Gast)


Lesenswert?

Ach ja, kombinatorisch geht das auch... Du rufst in einem Prozess die 
Methode auf und übergibst mit einem Anderen ein Quell- und Zielangabe.

von Achim (Gast)


Lesenswert?

Hallo Mathi,

wenn ich also die einzelnen Funktionsaufrufe in
einzelne Blöcke packe und über Signale verbinde, dann kann die Synthese 
dort die Funktion nur einmal realisieren.

Das Beispiel von oben, jetzt anders realisiert: (stark vereinfacht)

Original----------------
A:=B;
C:=function1 (A);
K:=function1 (C);
O:=function1 (K);
y<=O;
-----------------------
Jetzt als Sequenz von drei Blöcken


Block 1 (A in Studio_logig_vector (7 down to 0)
              B out Studio_logig_vector (7 down to 0);
begin
B<= funktion1 (A)
end Block1

Block 2 (A in Studio_logig_vector (7 down to 0)
              B out Studio_logig_vector (7 down to 0);
begin
B<= funktion1 (A)
end Block2

Block 3 (A in Studio_logig_vector (7 down to 0)
              B out Studio_logig_vector (7 down to 0);
begin
B<= funktion1 (A)
end Block3

Die Blöcke werden über Signale miteinander verbunden.

Wenn ich das jetzt richtig verstanden habe liegt jetzt eine zeiliche 
Abfolge dazwischen und die Synthese kann die Funktion einmal 
realisieren-

Richtig?


Gruß

Frank

von Jan M. (mueschel)


Lesenswert?

Nein. Auch ein Block ist nichts anderes als eine logische Einheit, 
vergleichbar mit einer Baugruppe. Da braucht es auch alle Gruppen 
nebeneinander.

Was du brauchst, ist eine state machine.

von Mathi (Gast)


Lesenswert?

Jan hat recht... So geht das nicht.
Du solltest lieber einen taktgesteuerten Zustandsautomaten verwenden. 
Eine kombinatorische Realisierung ist nicht ganz trivial.

von Frank (Gast)


Lesenswert?

Hallo Jan hallo Mathi,

besten Dank!

Ich werde es mal versuchen.

Gruß

Frank

von Heuler1970 (Gast)


Lesenswert?

Dort oben lugt mir entgegen:
1
Studio_logig_vector (7 down to 0)

Ist das eine neue Deklaration a la VHDL-2008????

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.