Hallo allerseits, ich arbeite zum ersten mal mit einem FPGA (Lattice XP2), daher meine (Neulings) Fragen. In dem Projekt werden große Daten Mengen (bis 120 KB) zwischen einen Mikrocontroller und dem FPGA seriel ausgetauscht, diese Daten werden im FPGA RAM (EBR Pseudo DUAL RAM) geschrieben (oder davon ausgelesen). Bei einem Trigger soll der FPGA einen SteuerungsProzess starten: FPGA liest mit einer bestimmten Frequenz seine RAMzellen nach einander und gibt den Wert über bestimmte IOs wieder aus. Wie kann man das am besten realisieren? ICh habe mir gedacht ein Modul für die Kommunikation mit dem uC, der Daten im/vom RAM schreiben/auslesen kann, und ein Modul für die Steuerung der IOs, dieses Modul liest dann auch werte vom RAM aus. - Wie kann ich es machen das beide Module Daten vom gleichen RAM auslesen? - Werden da keine Konflikte auftauchen, wenn beide Module gleichzeitig verschiedene RAM Adressen lesen wollen? Vielen Dank
Jochen schrieb: > - Werden da keine Konflikte auftauchen, wenn beide Module gleichzeitig > verschiedene RAM Adressen lesen wollen? Das Stichwort hier heisst Dual Ported RAM
Jochen schrieb: > ich arbeite zum ersten mal mit einem FPGA (Lattice XP2), daher meine > (Neulings) Fragen. > In dem Projekt werden große Daten Mengen (bis 120 KB) zwischen einen Übrigens, der grösste XP2 hat 48 Ramblöcke -> 96 KB. Also nix mit 120 KB.
Jochen schrieb: > - Werden da keine Konflikte auftauchen, wenn beide Module gleichzeitig > verschiedene RAM Adressen lesen wollen? Ganz im Gegenteil, es wird Probleme geben, wenn gleichzeitig auf die selbe Adresse geschrieben wie gelesen wird. Tom
Thomas Reinemann schrieb: > Ganz im Gegenteil, es wird Probleme geben, wenn gleichzeitig auf die > selbe Adresse geschrieben wie gelesen wird. Ganz im Gegenteil: es wird Probleme geben, wenn fast gleichzeitig auf die selbe Adresse geschrieben wie gelesen wird. ;-)
Hallo, >Das Stichwort hier heisst Dual Ported RAM ja, ein Port für schreiben und nur eins fürs Lesen. Beide Module lesen dann aus einen einzigen Port. >Übrigens, der grösste XP2 hat 48 Ramblöcke -> 96 KB. Also nix mit 120 KB. XP2-5 hat 166 Kbits als EBR SRAM >Ganz im Gegenteil, es wird Probleme geben, wenn gleichzeitig auf die >selbe Adresse geschrieben wie gelesen wird. Das ist ok, ich glaube es wird nur den alten Wert ausgelesen!!, beim nächsten Triggerwird dann der richtige Wert ausgelesen Mein Problem liegt eigentlich bei der Konzepterstellung: Gedacht habe ich mir das ganze in zwei Modulen: einer für die Kommunikation und einer für die Steuerung und eine RAM Instanz. Kann ich von beiden Modulen vom selben RAM lesen?? Muss ich das Lesen irgendwie in einer "Funktion" packen, die in beiden Modulen aufgerufen wird! Bin dankbar für richtige Ideen für den Anfang
Versuch doch zunächst einmal eine Art Spezifikation deines Projektes zu erstellen, ganz ohne Code. Einfach nur mit Prosa und Skizzen. Nicht das Codieren ist am Anfang wichtig, sondern die Vorstellungskraft bezüglich der Problemstellung.
>>Übrigens, der grösste XP2 hat 48 Ramblöcke -> 96 KB. Also nix mit 120KB. >XP2-5 hat 166 Kbits als EBR SRAM Dann klär vielleicht auch gleich mal den Unterschied zwischen KiloByte(KB) und KiloBit(Kb). Was brauchst du wirklich... Gruß
Jochen schrieb: > Kann ich von beiden Modulen vom selben RAM lesen?? Ja, sogar von der selben Adresse. Lesen ist unkritisch, weil ja nichts verändert wird.
Jochen schrieb: > Hallo, >>Das Stichwort hier heisst Dual Ported RAM > ja, ein Port für schreiben und nur eins fürs Lesen. Beide Module lesen > dann aus einen einzigen Port. Nein, der EBR kann als echter Dualport RAM konfiguriert werden, beide Ports können unabhängig voneinander lesen und schreiben.
Lattice User schrieb: > Nein, der EBR kann als echter Dualport RAM konfiguriert werden, beide > Ports können unabhängig voneinander lesen und schreiben. heißt das ich kann dieselbe RAM-Zelle aus zwei Ports lesen und schreiben?
ja, aber halt nicht gleichzeit (und halt wirklich gleichzeit in sinn von ns) schreiben.
Jochen schrieb: > heißt das ich kann dieselbe RAM-Zelle aus zwei Ports lesen und > schreiben? Radio Eriwan :-) Lesen ist kein Problem, wenn beide Seiten schreiben ist das Ergebnis undefiniert, insbesondere wenn beide Clocks asynchron sind. Es ist auch undefinert wenn von einer Adresse gelesen wird auf die, die andere Seite gerade schreibt. Im Extremfall sind ein paar Bits alter Inhalt und ein paar neuer. Der EBR hat noch ein Writethrough Feature, aber ob wie gut das den Konflikt auflösen kann weiss ich nicht. TN1137 studieren und ausprobieren.
Tja man kann auch im FPGA ein vergleich der Read/Write Pointer machen und wenn beide gleich sind ein Busy Bit an einem der Ports setzen. Arbitierungslogic genannt.
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.