Forum: FPGA, VHDL & Co. Multiple Instantiierung in serielle Verarbeitung mit einer Instanz überführen


von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Hallo!

Wenn das FPGA noch genug Ressourcen zur Verfügung stellt neige ich dazu, 
Aufgaben parallel durch mehrere Instanzen verarbeiten zu lassen.
Soll eine FPGA z.B. mehrere Motoren regeln, würde ich erst mal für jeden 
Motor einen Regler instantiieren.
Mit fortschreitender Projektlaufzeit komme ich aber häufig an den Punkt, 
an dem die Ressourcen auf dem FPGA knapp werden, so dass ich darüber 
nachdenke welche Aufgaben ich seriell abfrühstücken könnte. Da der 
Regler aus obigem Beispiel "nur" mit 1kHz arbeitet wäre es gut möglich, 
den Regler nur noch ein mal zu instantiieren und alle Motoren mit diesem 
Regler anzusteuern.

Meine Fragen sind:
- Gibt es für dieses umwandeln eines parallelen Designs in ein serielles 
Design ein Kochschema nach dem ich vorgehen kann? A la "Füge einen 
Kanalzähler hinzu, füge BlockRam für Zwischenergebnisse hinzu, eine 
Statemachine die die Kanäle weiterzählt [...]"?
- Nach welchem Stichwort könnte ich eine Suchmaschine füttern??? Ich bin 
ja sicher nicht der erste der auf diese Idee gekommen ist...

Gruß,

     Hendrik

von Duke Scarring (Gast)


Lesenswert?

Heinrich H. schrieb:
> - Gibt es für dieses umwandeln eines parallelen Designs in ein serielles
> Design ein Kochschema nach dem ich vorgehen kann?
Mir ist bisher keine Veröffentlichung bekannt...

> A la "Füge einen
> Kanalzähler hinzu, füge BlockRam für Zwischenergebnisse hinzu, eine
> Statemachine die die Kanäle weiterzählt [...]"?
Genau so würde ich das auch machen.
Wenn Du gut bist, ist Dein Einzelmodul schon für die Steuerung durch 
eine externe Statemachine vorbereitet.

Da jedes zu serialisierende Modul andere Parameter zwischenspeichern 
muß, kann hier m.E. Schema F nicht wirklich funktionieren.

Duke

von Jodi (Gast)


Lesenswert?

Die brutale Methode ist, alle Inputs und Outputs zu multiplexen und sie 
mit 1/n to togglen. Dazu müssen sie natürlich zwischengespeichert 
werden, was dazu führt, dass man sie in jeder pipeline Tiefe benötigt.

-> Register-BRAM bauen, zeitversetzt alle Inputs des Moduls 
bereitstellen und jeweils einen kompletten Registersatz für jeden Takt 
mit dranhängen. Die Synthese sucht sich dann die richtige Beziehung 
raus. Du musst nur die zum Zeitversatz passende Registernummer 
verdrahten. Dies ergibt sich aus k+d mit k = Nummer des Kanals und 
d=Delay mit der das Register innerhlb der FSM benötigt wird.

Problem: Eine verschachtelte FSM baut Gabelungen in den Zeitebenen , was 
durch Fallunterscheidungen gelöst werden muss.

Besser ist es, die FSM läuft linear und hat die pipeline schon mit drin.

Dann ist es auch möglich, den gesamten Prozess von innen her zu 
multiplexen.

Wenn du nur das BRAM mit allen Parametern hast, musst Du einen 
kompletten Prozess abwarten, bevor Du die Kanäle umschalten kannst. Dann 
läuft das ding sozusagen, wie ein Prozessor.

von Heinrich H. (Firma: Ich.AG) (hhanff)


Lesenswert?

Jodi schrieb:
> Die brutale Methode ist, alle Inputs und Outputs zu multiplexen und sie
> [...]

Hallo und danke für Deine Antwort. Ich hatte Urlaub, deswegen reagiere 
ich erst jetzt.

Ich musste Deine Antwort mehrfach lesen, aber am Ende habe ich glaube 
ich verstanden was Du meinst. Im Grunde habe ich es bis jetzt auch so 
umgesetzt. Laufen tut es zwar noch nicht, aber ich arbeite dran.

Gruß aus dem sonnigen Norden,

     Hendrik

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.