www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RISC CPU Projekt


Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen!

Ich bin durch dieses Forum auf die selbstgebaute CPU von Dennis Kuschel
gestoßen und würde nun auch gerne so eine CPU bauen.
Mit einem FPGA habe ich schon ein CPU Projekt nachgebaut (mit leichten
Veränderungen) und die Idee mit TTL Bausteinen gefällt mir ziemlich
gut! Jedoch würde ich die CPU als RISC aufbauen, mit einer 5-Stufigen
Pipeline á la DLX. Ich habe hier im Forum schon viele Threads zu diesem
Thema gesehen, doch keine hatte die RISC Architektur als Grundlage. Ich
würde die CPU gerne als 16bit Architektur auslegen. Auserdem würde ich
die Register und Stack gerne in der CPU mit SRAM´s realisieren, da man
dadurch zum Beispiel eine Art Registerbank realisieren könnte. Also
z.B. eine Bank enthält 32 Register und es sind 64 Bänke vorhanden. So
könnte für jeden Prozess eine Bank reserviert werden und der
taskwechsel würde schnell von dannen gehen! Wäre so ein aufbau möglich?
Vor allem, könnte man eine Taktrate von 4 Mhz erreichen?

Freue mich immer über Anregungen!
MfG Tobias

Autor: Noch Einer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, da hat schonmal ein Tobias dran rumgebastelt:
http://www.mikrocontroller.net/forum/read-1-176063...

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich auch bemerkt, nur der ist um einiges jünger als ich ;-)
Ich habe mich mit ihm in Verbindung gesetzt und von ihm kommt die Idee
mit den SRAM Registern, nur hat er bei seiner CPU keine Registerbänke
vorgesehen. Seine CPU läuft nun zwar, aber nur mit ca. 1,5 MIPS, was
mir zu wenig ist, wenn ich schon so einen großen Aufwand habe. Könnte
ich meine CPU so verwirklichen würde diese bei nur 4Mhz ganze 4MIPS
schaffen und sogar 4 Millionen Multiplikationen pro Sekunde. Meine
eigentliche Frage ist aber, ob der Aufbau so möglich wäre?

PS: Wäre hier interesse an Bildern von Tobias CPU? Ich hätte glaub noch
welche auf der Platte.

MfG Tobias

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"4 Millionen Multiplikationen pro Sekunde"

Wie bitte? 4 Mio 16x16-Bit Multiplikationen mit TTLs?

"interesse an Bildern von Tobias CPU"

Aber ja doch - hatte er versprochen aber nicht geliefert.

Zum internen Stack: Eine RISC-CPU hat i.d.R. überhaupt keinen
dedizierten Stack, üblich ist Branch-and-Link. Und wenn der auch für's
activation record (Parameter, lokale Variablen und Register-Save-Area)
gedacht ist, stellt sich die Frage nach dessen Adressierbarkeit.

Andererseits: Welcher Adressraum? Eine 16-Bit CPU adressiert auf
natürlichem Weg nur 64KB oder 64KW. Und das passt sowieso locker mit
drauf.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
der Stack sollte eigentlich in einen 2. SRAM kommen mit samt mehreren
Stackpointer für schnellen Prozesswechsel.

Die 4 Millionen Multiplikationen werden mit 4 SRAM´s á 64k*16bit und
3x24bit addierern verwirklicht! Bei 4Mhz müsste die CPU das in 250ns
schaffen, da ich aber die Memory Acces Phase bei mul nicht brauche,
wird diese als 2. Executionsphase benutzt. So dauert eine
multiplikation 500ns bei 4Mhz, was eigentlich ausreichen sollte.

Der Adressbus ist 24bit breit, jedoch ist jede Adresse eine 32bit
Speicherzelle, da ein Befehl 32bit breit ist. Da jedoch auf jedes Byte
einzeln zugegriffen werden kann, stehen theoretisch 64Mbyte bereit.

Hab grad geschaut und nurnoch paar Bilder gefunden, auf denen die CPU
noch nicht fertig ist. Hab ihm ne Email geschickt, entweder er stellt
hier die Bilder rein, oder er schickt se mir!

MfG Tobias

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ich bei beiden Tobias-Projekten nicht so ganz verstehe: Was ist in
diesem Zusammenhang der Unterschied zwischen Speicherbausteinen und
programmierbarer Logik?

Wenn man also schon aus einem selbstgestellten Anspruch heraus auf PLDs
verzichtet - belügt man sich bei der Verwendung von RAMs als Ersatz
kombinatorischer Logik nicht selbst?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"der Stack sollte eigentlich in einen 2. SRAM kommen mit samt mehreren
Stackpointer für schnellen Prozesswechsel."

Den Anspruch habe ich schon verstanden, nicht jedoch was genau der
Stack eigentlich stapeln soll.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gewissermaßen belügt man sich schon, nur würde das ganze sonst total
unmöglich werden, aber trotzdem ist es glaube ich immer noch ein
Unterschied, ob FPGA usw. oder TTL+RAM, da die CPU ja nicht nur aus den
Tabellen besteht. Und selsbt die CPU von Dennis Kuschel besteht aus
solchen Tabellen!

Der Stack soll wie gewöhnlich die Rücksprungadresse speichern, wie er
z.B. auch bei AVR´s benutzt wird. Oder gibt es bei RISC Prozessoren
noch eine andere möglichkeit?

MfG Tobias

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Oder gibt es bei RISC Prozessoren noch eine andere möglichkeit?"

Welche Vorstellung hast Du von RISC? Übersicht über CPU-Architekturen
hast Du scheinbar keine. Schlechte Ausgangsbasis.

Zur klassischen RISC-Philosophie zählt die Trennung in
Load/Store-Befehle einerseits, und Befehle die auf Registern arbeiten
andererseits. Der übliche Weg nennt sich folglich "branch and link".
Die Rücksprungadresse in einem Register speichern. Einen Stack gibt es
dann nur als Konstrukt von Compilern, nicht in der Hardware
(Pinzipbetrachtung).

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, "branch & link" kenn ich schon, aber wie wird es erledigt, wenn
ich mehrere Rücksprungadressen behalten muss? Werden die Register dann
in den Arbeitsspeicher geschrieben? Außerdem meine ich, das ich gelesen
habe, dass ein AVR auch mit Stack arbeitet (normalerweise arbeite ich
nicht mit denen!)? Oder lieg ich da falsch?

MfG Tobias

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen Stack als solchen gibt es schon - nur wird der per Software
gemanaged. Man definiere sich ein beliebiges Register als
Stack-Pointer. Sieht dann ungefähr so aus (Pseudo-Code ohne konkreten
Maschinenbezug):

  brl r30,function  ;branch and save return address in r30
  ...

function:
  sub r31=r31,#12  ;stack pointer
  store r8,@r31+0
  store r9,@r31+4
  store r30,@r31+8  ;return address (link register)
  ...
  load r8,@r31+0
  load r9,@r31+4
  load r30,@r31+8
  branch @r30  ;return


Freilich gibt's da Konventionen und zwecks Beschleunigung kann es
sein, dass Hardware existiert, die nur bei korrekter Einhaltung dieser
Konvention eine korrekte Vorhersage realisiert, insofern in diesem
Beispiel R31 dann doch irgendwie per Hardware zu Stack-Pointer wird.

AVR orientiert sich zwar an RISC, hält sich aber nicht ernsthaft daran.
So sind im RISC-Modell load-operate-store Befehle tabu. CBI/SBI und
dergleichen sind jedoch genau das. Für einen Controller freilich
verständlich. Ebenso macht CALL gleich mehrere Dinge in einem Befehle
(branch, store).

Andere Eigenschaften wie ein singuläre Statusregister kennzeichnen
RISCs mit embeddes systems als Zielmarkt (z.B. ARM). Als RISC entstand,
war eher Performance adressiert, da steht ein Statusregister eher im
Weg.

AVR sollte also nicht als Modell für RISC betrachtet werden. Weitaus
lehrreicher: MIPS R2000/R3000 kann als Prototyp der RISC-Philosphie
verstanden werden.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Thema Stack und Registerbänke solltest Du zur Orientierung auch mal
bei Sun SPARC und AMD 29000 reinschauen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.