mikrocontroller.net

Forum: FPGA, VHDL & Co. Synthes von Funktionen


Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch als Ergänzung

Resource Sharing war bei der Synthese eingeschaltet.

Gruß

Frank

Autor: Rick Dangerus (Gast)
Datum:

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

Rick

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mathi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mathi (Gast)
Datum:

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

Autor: Achim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mathi (Gast)
Datum:

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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jan hallo Mathi,

besten Dank!

Ich werde es mal versuchen.

Gruß

Frank

Autor: Heuler1970 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dort oben lugt mir entgegen:
Studio_logig_vector (7 down to 0)

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.