Forum: FPGA, VHDL & Co. Spartan6 als Peripherie Erweiterung über FMC Bus


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nutze einen Spartan6 LX9, welcher 5 identische Instanzen beinhaltet 
und über LUTs / FlipFlops die Daten vom Controller (STM32L4) abgerufen 
werden / geschrieben werden.

Die Frage ist nun, ob es eine bessere Lösung gibt die Daten 
auszutauschen?
Jede Instanz benötigt 32 Adressen und ist mit 8 Bit Daten an den Bus 
angebunden.
1
if we = '1' then
2
  case address is
3
    when "0" & x"0" =>
4
        Bit0    <= datain(0);
5
        Bit1    <= datain(1);
6
        Bit2    <= datain(2);
7
    when "0" & x"2" => Val1 <= datain;
8
    when "1" & x"2" => Val2 <= datain;
9
    ....

Meine Überlegung war nun, ob es Sinnvoller ist die Daten in dem Internen 
Block Ram zu packen (als Dual Port) und dann in der Instanz auszulesen 
bzw direkt vom FMC Bus aus darauf zuzugreifen.

Peter

von Duke Scarring (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Peter schrieb:
> Die Frage ist nun, ob es eine bessere Lösung gibt die Daten
> auszutauschen?
Was gefällt Dir denn an Deiner Lösung nicht?

Duke

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Das für diese Variante einige Ressourcen genutzt werden, welche für 
andere Dinge nicht mehr zur Verfügung stehen.

Viele der Signale werden in der Ziel Instanz eh zwischen gespeichert und 
können nach einem Durchlauf in den RAM geschoben werden.

Im Moment nutze ich den LX9 und würde gerne den LX4 einsetzen, da dieser 
einiges günstiger ist.

Peter

von Weltbester FPGA-Pongo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wenn die Signale, oder deren Zustand identisch ist, erkennt das die 
Synthese und optimiert es weg.

Das dürfte bei Dir aber nicht so sein.

Wenn anders herum, das ein Ram ergibt, das sich zu implementieren lohnt, 
wird die Synthese das auch erkennen.

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Im Grunde ist es ein Modul, welches 5 mal instanziert wird und jedes das 
gleiche macht (5 Kanäle). Jede Instanz wird mit 100kHz aufgerufen und 
durchläuft einmal.
Da wenn der Kanal eingeschaltet wird die vorgegebenen Werte über den Bus 
gespeichert werden, da die meisten nicht zur Laufzeit verändert werden 
sollen sind die doppelt vorhanden. Aus dem Grund war mein Gedanke diese 
in den RAM auszulagern.
Des weiteren bin ich am überlegen die Daten aus dem RAM auf die Signale 
zu legen und die einzelnen Daten sequenziell über eine Instanz 
abzuarbeiten auch wenn die Daten jeweils gleichzeitig ankommen. Vom 
Timing her sollte es klappen, da der FPGA mit 75 MHz getaktet ist (nach 
oben wäre auch noch Luft) derzeit hätte ich 150 Takte pro Durchlauf 
Zeit.

von Jürgen S. (engineer) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Weltbester FPGA-Pongo schrieb im Beitrag #4934706:
> Wenn die Signale, oder deren Zustand identisch ist, erkennt das die
> Synthese und optimiert es weg.

Nur, wenn auch das Zeitverhalten wirklich identisch ist oder infolge der
Optimierung etwas derartiges rauskommt. Wenn man das ungeschickt
ansteuert, haben Signale mitunter dieselben Werte, können aber nur über
die time domain hinweg wegoptimiert werden. Das hat man regelmäßig bei
pipelines mit Zählerständen unterschiedlicher Module: Man kann dann
sehen, dass das Hinzufügen von irgendwelchen verzögerten Signalen nicht
zu einem Mehr an Flächenverbrauch führt, weil diese Signale in der
Zeitebene schon existieren.

> Wenn anders herum, das ein Ram ergibt, das sich zu implementieren lohnt,
> wird die Synthese das auch erkennen.
Das kommt aber auch ein wenig auf die Beschreibung an. Man kann das
ungeschickt beschreiben, sodass es die Synthese nicht kapiert.

Es gibt aber noch einen Rettungsanker:

Auch die Kombinatorik, die nach der Synthese als normale LUT über
bleibt, kann per "Dekret" mit dem Mapper ins BRAM verfrachtet werden.
Heisst so ähnlich wie "Move slice logic into unsused block rams" oder
so.


Peter schrieb:
> Im Grunde ist es ein Modul, welches 5 mal instanziert wird und jedes das
> gleiche macht (5 Kanäle). Jede Instanz wird mit 100kHz aufgerufen und
> durchläuft einmal.

Sowas kann man als state machine schreiben, die mit gemultiplexten Daten
arbeitet. Das kann man sehr einfach lösen, indem man die fsm kapselt.
Man kann es auch so machen, dass die fsm ausgerollt wird und parallel
mehrere fsm state unabhängig abarbeiten kann. Das ist aber sehr
aufwändig und nur nötig, um die maximale Bandbreite zu generieren.

von Peter (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Jürgen S. schrieb:
> Sowas kann man als state machine schreiben, die mit gemultiplexten Daten
> arbeitet. Das kann man sehr einfach lösen, indem man die fsm kapselt.
> Man kann es auch so machen, dass die fsm ausgerollt wird und parallel
> mehrere fsm state unabhängig abarbeiten kann. Das ist aber sehr
> aufwändig und nur nötig, um die maximale Bandbreite zu generieren.

Ja, an die Variante habe ich auch gedacht nur sind es schon einige 
Signale, welche ich dann durch die ganze Instanz schieben muss.

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]
  • [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.