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?
Erst mal eine Rückfrage: Simson36 schrieb: > Ich habe 8 Vektoren (je 128 Bit Busbreite) die mit jedem Takt neue Daten > liefern. Je Takt also 1KBit (8*128)? > Es werden insgesamt 128 neue Daten generiert. Insgesamt also 128KBit (128*1KBit)? Welches FPGA? Wieviel (Block-)RAM?
Lothar Miller schrieb: > Insgesamt also 128KBit (128*1KBit)? Ja, genau. Lothar Miller schrieb: > Welches FPGA? > Wieviel (Block-)RAM? FPGA: Altera Cyclone III M9K Blocks 8192 × 1 (ich hoffe das meinstest du)
Du kannst doch einen ungleich breiten FiFo nehmen und wortweise beschreiben, dann geschieht die Wandlung von allein,
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.
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.
Simson36 schrieb: > 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. Welches Busses? Eines einzelnen RAM-Blocks? Wie wäre es mit parallelschalten?
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.