Forum: FPGA, VHDL & Co. Plasma SoftCore, suche Dokumentation


von Dimi S. (ilovespeccy)


Lesenswert?

Guten Abend,

ich habe schn länger nach eine gute und kleine 16/32-bit
SoftCore gesucht. "Plasma" ist, wie es aussieht, das richtige
für mich. Habe kleinen Projekt für Altera DE1 Board gebastelt
und eine kleine C-Programm geschrieben. Es klappt auch!

Jetzt habe ich vor Flash und SRAM bzw. SDRAM anzubinden.
Flash im Adressraum von 0x00000000 bis 0x00200000
SRAM oder SDRAM ab Adresse 0x01000000
Wie kann ich dem Kompiler/Linker mitteilen, das Programm im
Flash-Adressraum sich befinden soll, und Daten im SRAM/SDRAM?

Leider ist nur DDR-SDRAM Kontroller dabei, aber kein SDRAM.
Ich habe vor 2 Jahren schon einen SDRAM-Kontroller Programmiert
und der klappt auch, aber ziemlich langsam. Bis die Daten beim
Lesen kommen dauert es 60-70 ns. Es muss einen Cache rein.
Ich habe aber noch nie sowas gemacht uch habe ehrlich zu sagen
keine Ahnung wie sowas funktioniert. Gibt es gute Informationen
dazu?

MfG aus Westerwald

von dose (Gast)


Lesenswert?

> ich habe schn länger nach eine gute und kleine 16/32-bit
> SoftCore gesucht. "Plasma" ist, wie es aussieht, das richtige
> für mich. Habe kleinen Projekt für Altera DE1 Board gebastelt
> und eine kleine C-Programm geschrieben. Es klappt auch!


> Leider ist nur DDR-SDRAM Kontroller dabei, aber kein SDRAM.
> Ich habe vor 2 Jahren schon einen SDRAM-Kontroller Programmiert
> und der klappt auch, aber ziemlich langsam. Bis die Daten beim
> Lesen kommen dauert es 60-70 ns. Es muss einen Cache rein.
> Ich habe aber noch nie sowas gemacht uch habe ehrlich zu sagen
> keine Ahnung wie sowas funktioniert. Gibt es gute Informationen
> dazu?

Ich bin auf der gleichen Schiene.
Ich habe den Plasma abgewandelt und ein paar Optimierungen eingebaut. 
Bis jetzt bin ich im Simulator und sehe genau das gleiche Problem auf 
mich zukommen. Als Basis werde ich den Spartan 6 nutzen, da gibt es ein 
Memory Controller im FPGA. Was nicht inkusive ist, ist der Cache.

Die Literatur hört genau an der Cache Stelle auf.

Was ich schon weiss.
Der Cache ist zwei geteilt.
Es gibt einen Instruction Cache (I-Cache) und einen Daten Cache 
(D-Cache).

Diese beiden Cache unterscheiden sich in der Art.
Der I Cache muss nur Daten aus dem Ram vorhalten und keine Daten 
zurückschreiben.
Der D-Cache dagegen ist bidirektional.

Der I-cache hält Daten in der Nahe des PC bereit.
Der D-Cache hat Daten von Datenpointer.

von Fpgakuechle K. (Gast)


Lesenswert?

dose schrieb:

>> Leider ist nur DDR-SDRAM Kontroller dabei, aber kein SDRAM.
>> Ich habe vor 2 Jahren schon einen SDRAM-Kontroller Programmiert
>> und der klappt auch, aber ziemlich langsam. Bis die Daten beim
>> Lesen kommen dauert es 60-70 ns. Es muss einen Cache rein.
>> Ich habe aber noch nie sowas gemacht uch habe ehrlich zu sagen
>> keine Ahnung wie sowas funktioniert. Gibt es gute Informationen
>> dazu?
>
> Ich bin auf der gleichen Schiene.
> Ich habe den Plasma abgewandelt und ein paar Optimierungen eingebaut.
> Bis jetzt bin ich im Simulator und sehe genau das gleiche Problem auf
> mich zukommen. Als Basis werde ich den Spartan 6 nutzen, da gibt es ein
> Memory Controller im FPGA. Was nicht inkusive ist, ist der Cache.
>
> Die Literatur hört genau an der Cache Stelle auf.

Cachearchitekturen werden so gut wie in jedem Buch über 
Computerarchitektur beschrieben, persönlich finde ich die in ISBN 
978-3-486-59190-3 am detailiertesten.

Kernstück eines Caches ist der Assoziativspeicher, 
engl."Content-addressable memory", kurz CAM. Es sollten sich bei jedem 
FPGA-Hersteller Makros für diese finden lassen. Für die Grundbegriffe 
lohnt sich ein Blick in 
http://www.google.com/url?sa=t&source=web&cd=1&ved=0CBUQFjAA&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.110.9923%26rep%3Drep1%26type%3Dpdf&rct=j&q=an%20automatic%20cache%20generator&ei=j9RnTuLSOMWN-waQ3ei-Cw&usg=AFQjCNEncFeom2tgtuVGmidIvHRMDjIe3g&sig2=7V20lhdVGHfU3unfX3nXTw&cad=rja 
(Fürchterliche Link-URL, sorry).

Ein reiner Lese-cache, den man doppelt jeweils als Instruction- und 
datenchache instanziiert dürfte schon einiges beschleunigen, raffinierte 
Schreib-Strategien kann man als Sahnehäubchen später dazubauen. Könnte 
ein schönes Open-Source Project werden.

MfG,

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

>
> Cachearchitekturen werden so gut wie in jedem Buch über
> Computerarchitektur beschrieben, persönlich finde ich die in
> 978-3-486-59190-3 am detailiertesten.
>
SO tief bin ich noch nie in eine Rechnerarchitektur vorgedrungen.
Muss ich mir sicher mal rein ziehen.
>
> Ein reiner Lese-cache, den man doppelt jeweils als Instruction- und
> datenchache instanziiert dürfte schon einiges beschleunigen, raffinierte
> Schreib-Strategien kann man als Sahnehäubchen später dazubauen. Könnte
> ein schönes Open-Source Project werden.
>
> MfG,

Mal sehen was ich daraus mache. Es gibt noch ein paar Lücken im System. 
Eine ordentliche Speicheranbindung wäre ein großer Ruck nach vorne.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Fpga Kuechle schrieb:

> Kernstück eines Caches ist der Assoziativspeicher,
> engl."Content-addressable memory", kurz CAM. Es sollten sich bei jedem
> FPGA-Hersteller Makros für diese finden lassen. Für die Grundbegriffe
> lohnt sich ein Blick in

Es stellt sich hier die Fragstellung. Eine Mips hat ein Memmory manage 
Unit. Da es in der Architektur zwei Speicher gibt den I-Mem und den 
D-Mem, sind hier in Wirklichkeit zwei MMU zu realisieren?

Wie weit würde sich der Cache mit der MMU erschlagen werden?

Wie viele Taktverzögerung haben vergleichbare Systeme?

von Dimi S. (ilovespeccy)


Lesenswert?

leider sind mit gccmips keine Libs dabei.
wie kann ich z.B. printf u.s.w. fur UART-Ausgabe verwenden?

MfG

von Martin S. (strubi)


Lesenswert?

Dimi S. schrieb:
> leider sind mit gccmips keine Libs dabei.
> wie kann ich z.B. printf u.s.w. fur UART-Ausgabe verwenden?
>
> MfG

Du musst dir ein board-supply-package schreiben. Das einfachste ist, die 
newlib C library zu nehmen und sich per simplem "syscall"-Layer die 
basic I/O-Kommandos zu implementieren. Beispiel dazu gibts in syscalls.c 
aus der shell.tgz unter 
http://www.section5.ch/forum/viewtopic.php?f=2&t=118

Schöner ist's per libgloss...(einfach mal die Stichworte googeln).

Gruss,

- Strubi

von Fpgakuechle K. (Gast)


Lesenswert?

René D. schrieb:
> Fpga Kuechle schrieb:
>

> Es stellt sich hier die Fragstellung. Eine Mips hat ein Memmory manage
> Unit. Da es in der Architektur zwei Speicher gibt den I-Mem und den
> D-Mem, sind hier in Wirklichkeit zwei MMU zu realisieren?

M.E. nicht, bereits kurze Schleifen würden von einem I-Cache 
profitieren. für einen D-Cache braucht es mehrmaligen zugriff auf den 
selben datenbereich damit dieser von den Cache-Hits profitiert. Das 
sollte eher selten der Fall sein, insbesonders bei Architecturen mit 
großen Registerbänken.

MfG,

von Martin S. (strubi)


Lesenswert?

>> Es stellt sich hier die Fragstellung. Eine Mips hat ein Memmory manage
>> Unit. Da es in der Architektur zwei Speicher gibt den I-Mem und den
>> D-Mem, sind hier in Wirklichkeit zwei MMU zu realisieren?
>
> M.E. nicht, bereits kurze Schleifen würden von einem I-Cache
> profitieren. für einen D-Cache braucht es mehrmaligen zugriff auf den
> selben datenbereich damit dieser von den Cache-Hits profitiert. Das
> sollte eher selten der Fall sein, insbesonders bei Architecturen mit
> großen Registerbänken.
>

Also bei SDRAM lohnt sich's fast immer, schon rein wegen der 
Burst-Zugriffe.
Z.B. wenn du Daten durch einen FIR-Filter nudelst, oder Bilder mit einem 
3x3-Filter faltest. Da gewinnst du im Schnitt sicher etwa Faktor 4-5 
gegenüber Einzelzugriffen (mit Wartezylen..)
Normalerweise braucht man pro physikalisches Memory nur eine MMU, aber 
die Caches muss man natuerlich zweimal (D, I) instanzieren.

Gruss,

- Strubi

von Dimi S. (ilovespeccy)


Lesenswert?

Um die reale Performace des Plasma-Cores zu testen würde ich gern
den "Plasma" mit anderen Prozessoren vergleichen. z.B. AVR, PIC18/24/32.
Gibt es fertige Geschwindigkeitstest-Programme mit C geschrieben um
einen Prozessor zu bewerten?

MfG

von Fpgakuechle K. (Gast)


Lesenswert?

Dimi S. schrieb:
> Um die reale Performace des Plasma-Cores zu testen würde ich gern
> den "Plasma" mit anderen Prozessoren vergleichen. z.B. AVR, PIC18/24/32.
> Gibt es fertige Geschwindigkeitstest-Programme mit C geschrieben um
> einen Prozessor zu bewerten?
>
> MfG

Ja, der Klassiker sind Dhrystone und Whetstone. Sind allerdings schone 
einige
Jahrzehnte alt.

MfG,

von Dimi S. (Gast)


Lesenswert?

Hallo,

ich habe meinen SDRAM-Controller optimiert.
Realisiert habe ich das ganze auf Altera DE1 Board.
SDRAM läuft mit 90MHz mit burst length = 2.
1 Speicherzugriff dauert denau 7 Takte. Plasma läuft also
mit 12.857MHz. Jede 205 Plasma-Takte wird einen Autorefresh
ausgeführt.

Dhrystone-Ergebnisse:

für 1.000.000 Dhrystones braucht Plasma ohne cache
genau 55 Sekunden. Das heisst 10.3 DMIPS oder 0.8DMIPS/MHz

AVR ATmega64 schafft z.B. bei 20MHz 6.56DMIPS oder 0.33DMIPS/MHz

MfG

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

> Dhrystone-Ergebnisse:
>
> für 1.000.000 Dhrystones braucht Plasma ohne cache
> genau 55 Sekunden. Das heisst 10.3 DMIPS oder 0.8DMIPS/MHz
>

Hallo Dimi,

kannst du mir den Testcode für den Plasma zur Verfügung stellen?


Ich sitze gerade auch an einem MIPS Softcore. Es tauchen immer noch Bugs 
auf. Da wäre es interessant ob ich den Code auch ausführen. Vielleicht 
bekomme ich auch ein paar Werte raus. Bin aber noch im Simulator. Eine 
CPU mit pipeline ist schon sehr komplex.

von Dimi S. (Gast)


Lesenswert?

Hallo René,

natürlich kann ich die Sources zur Verfügung stellen!
Ich habe einfach fertige Dhrystone ver.1 auf Plasma
"portiert" (wenn man es so nennen kann).
Ich habe leider jetzt keine Zeit, fliege heute nacht weg.
Morgen oder spätestens übermorgen poste ich hier den Link.

Wenn sich jemand an Plasma Core interessiert, kann ich meine
komplette SDK (CodeBlocks + GCCMIPS) und Sources für Altera DE1
auch zur Verfügung stellen.

Für Programmdownload zum DE1-Board (über SPI) und
RS232-Debug-Ausgaben verwende ich kleine selbstgebastelte
Platine mit PIC18F14K50.
Kommunikation mit PC über USB.

MfG

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

Hat auch Zeit, so weit bin ich noch nicht.


Ich nutze Linux und habe den GCC Compiler aus der ELDK.

Mein Zielplatform ist Xilinx. Doch das ist von Code unabhängig.

Das beste wäre der Dhrystone Code und die Dateien (.h ++xxx) die noch 
benötigt werden in einen ZIP-File. Das würde mir schon reichen.

Das ich die Elf Datei generieren kann. Und Entry noch auf 0x0 stzen 
kann.

Wiederum Codeblocks wollte ich mir auch schon mal anschauen.

von Dimi S. (ilovespeccy)


Angehängte Dateien:

Lesenswert?

Hier sind die versprochene Sources + Binaries
Sorry für verspätung, hatte leide keine Zeit gehabt.

MfG

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
Noch kein Account? Hier anmelden.