Parallelen Datenstrom mit VHDL in FIFO speichern

Gast #2485185
Lesenswert?
• ▲
▼
Hallo,

ich habe folgendes Problem. Ich habe 8 Vektoren (je 128 Bit Busbreite) 
die mit jedem Takt neue Daten liefern. Es werden insgesamt 128 neue 
Daten generiert. Diese möchte ich in ein FIFO mit 8 Bit Datenbus 
speichern, um diese anschließend seriell auszulesen.

Mein Problem dabei ist, dass mir nicht einfällt, wie ich die Daten der 
einzelnen Vektoren auf 8 Bit wandeln kann.

Dachte ich mache das mit einem Multiplexer, das wird aber wohl etwas 
viel Quelltext und es muss eine intelligientere Version geben.

Meine andere Idee ist es einen Zähler zu nehmen und diesen bis 128 
Zählen zu lassen. Mit Hilfe einer "intelligenten" Datenübergabe können 
die Daten anschließend in "Echtzeit" in den FIFO geladen werden.

Das mit dem Zähler ist nicht das Problem, aber wie bekomme ich die 
Datenübergabe hin?
Moderator (Firma: Titel) Persönliche Seite #2486696
Lesenswert?
• ▲
▼
Uli schrieb:
> Du kannst doch einen ungleich breiten FiFo nehmen und wortweise
> beschreiben, dann geschieht die Wandlung von allein,
Das wäre auch meine Wahl, wenn genug RAM-Blöcke vorhanden sind...

@ Simson36 (Gast)
Sieh mal nach, wie du die RAM-Blöcke als Dual-Ported-RAM mit 
unterschiedlichen Wortbreiten betreiben kannst. Und überleg dann, wie 
dir das helfen könnte.
Gast #2486715
Lesenswert?
• ▲
▼
Lothar Miller schrieb:
> Sieh mal nach, wie du die RAM-Blöcke als Dual-Ported-RAM mit
> unterschiedlichen Wortbreiten betreiben kannst. Und überleg dann, wie
> dir das helfen könnte.

Da habe ich mir auch schon Gedanken drüber gemacht, das funktioniert 
aber nicht, da die maximale Breite des Busses beim Einlesen auf 288 
begrenzt ist. Ich will das System etwas dynamisch haben und eventuell um 
Vektoren erweitern. Dies würde mir dabei nicht viel helfen.

Ich werde wohl definitiv die Daten vorher wandeln müssen.
Gast #2486768
Lesenswert?
• ▲
▼
Lothar Miller schrieb:
> Welches Busses?

Des Eingangs- sowie Ausgangsbusses des einzelnen RAMs

Lothar Miller schrieb:
> Eines einzelnen RAM-Blocks?

Ja

Lothar Miller schrieb:
> Wie wäre es mit parallelschalten?

Das ist zunächst auch eine gute Idee, aber ich will die jeweils ersten 
Daten der einzelnen Busse als erstes über SPI übertragen, danach die 
zweiten usw. . Das Problem, dass ich habe liegt nicht in der Ansteuerung 
oder Speicherung in ein RAM, sondern in der Wandlung der Busse.
#2486894
Lesenswert?
• ▲
▼
Simson36 schrieb:
> Das ist zunächst auch eine gute Idee, aber ich will die jeweils ersten
> Daten der einzelnen Busse als erstes über SPI übertragen, danach die
> zweiten usw. . Das Problem, dass ich habe liegt nicht in der Ansteuerung
> oder Speicherung in ein RAM, sondern in der Wandlung der Busse.

Das Auslesen der FIFOs in der richtigen Reihenfolge sollte eigentlich 
kein Problem sein, auch wenn du mehrere Speicher parallel schaltest: Du 
weißt ja, im welchem Speicher welches Byte steht.
z.B. bei einem 304 Bit Vector, aufgeteilt auf zwei RAM-Blöcke (288 u. 16 
Bit). Ausgelesen werden dann 36 Byte vom ersten Block, dann 2 Byte vom 
zweiten Block, wieder 36 Byte vom ersten, usw. Die Sequenz kannst du dir 
mit einer einfachen Statemachine oder einem Zähler realisieren.

Ich würde das Laden des kompletten Vektors dem zerstückeln des Vektors 
vorziehen. Denn im ersten Fall musst du dich um die Takte keine Sorge 
machen. Die Alternative ist, dass du einen zweiten Takt erzeugst, der 
(im obrigen Beispiel) dem 38 fachen des Bustaktes entspricht. In jedem 
dieser Taktzyklen nimmst du ein Byte vom Eingangsvektor uns schreibst es 
in das FIFO. Das Problem dabei ist aber die synchronisation der beiden 
Takte. Du musst besonders auf die Setup- und Holdzeiten achten!

Grüße,
Florian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren