Spartan6 als Peripherie Erweiterung über FMC Bus

Gast #4934063
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
Gast #4934185
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
Gast #4934706
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.
Gast #4934750
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.
Persönliche Seite #4935019
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.
Gast #4935131
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [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 einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.