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?
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.