Forum: FPGA, VHDL & Co. 16-bit Mikroprozessor


von Thomas B. (paraglider)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

habe in den letzten Wochen einen kleinen RISC-Prozessor entworfen.

Ein paar Daten:
- vollständig in VHDL beschrieben
- Harvard Architektur
- 16-bit Datenbreite (andere mit etwas Aufwand natürlich möglich)
- 16-bit Befehle
- optimiert für Spartan 3 (ein paar Instanziierungen)
- internes Befehls-ROM (max. 2^16 Befehle = 128 kB)
- internes und externes RAM, je max. 64 kB
- separates I/O
- Multiplizierer signed/unsigned
- Dividierer unsigned pipelined (17 Takte bei 16 Bit Datenbreite)
- Interrupt-Eingang
- Parity-Check für internes RAM und ROM (geht bei Bedarf auf externen
Interrupt-Controller)
- insgesamt nicht pipelined (fetch, decode und execute bei fast allen
Befehlen in einem Takt)
- Taktfrequenz bei Spartan 3, Geschwindigkeitsklasse 4: 50-60 MHz
- ca. 200 Slices ohne Peripherie, mind. 3 BRAM und 1 Multiplizierer.

Dazu hätte ich einen Assembler (programmiert in C) und einen einfachen
Debugger/Simulator (programmiert in Java) anzubieten.

Wenn hier ernsthaftes Interesse besteht, würde ich mir die Mühe machen,
ein paar Seiten Doku zusammenzustellen. Wenn nicht, kann ich mir die
sparen ;-).

Selbstverständlich alles kostenlos für nicht-gewerbliche Zwecke und
ohne jede Garantie.

Für einen ersten Eindruck habe ich mal den Befehlsatz angehängt.

Gruß,

Thomas

von Ronny (Gast)


Lesenswert?

Für ein Hobbyprojekt ist das ganze schon ziemlich beeindruckend.Im
Studium durften wir uns auchmal an einem kleinen 8-Bitter mit
RUDIMENTÄREN Befehlssatz (~10 Befehle) versuchen,das war schon recht
aufwändig.

Wie wärs mit einem Eintrag ins Wiki hier?Finden sich bestimmt Leute
hier,die sich für das ganze interessieren würden.

von Steve Werbig (Gast)


Lesenswert?

Hallo Thomas B.
Da ich gerade selber ein Microcontroller zum laufen bringen möchte, ich
aber nicht so recht weiss wo ich anfangen soll, wäre ich für ein paar
Anregungen sehr dankbar.

von Jürgen Schuhmacher (Gast)


Lesenswert?

Sowas eignete sich doch prima für open cores. Dann gibt es auch Leute,
die dran mitarbeiten und es erweitern.

von TheMason (Gast)


Lesenswert?

@thomas

respekt ... vor allem weil

von TheMason (Gast)


Lesenswert?

zu schnell getippt ... :-/

@thomas

respekt ... vor allem weil es noch keinen/kaum 16-bitter in vhdl gibt.
:-)) (microblaze = 32 / picoblaze = 32)
nenn deinen uC doch nanoblaze *ggg.
aber mal im ernst : die idee von jürgen ist echt gut. ich würde es auch
auf opencores.org reinstellen. da dürften einige leute interesse haben.
zumal es ja auch schon einen assembler gibt.
nochmals : respekt.

btw. interesse hätte ich auch, aber leider wenig zeit (mein dsp kommt
auch schon was kurz ....) werde den thread aber weiterverfolgen ...

gruß
rene

von Thomas B. (paraglider)


Lesenswert?

Freut mich, dass meine Arbeit offenbar nicht ganz umsonst war.
Eigentlich war es mehr als Übung gedacht. Werde die erforderlichen
Dateien mal zusammenstellen und ein bisschen Doku schreiben.

Beim Prozessor selbst habe ich mir relativ viel Mühe gegeben. Der
Assembler und insbesondere der Debugger aber erfüllen sicher keine
professionellen Ansprüche.

Kennt sich eigentlich jemand mit C-Compilern aus? Wäre schön, wenn man
noch einen C-Compiler dafür anpassen könnte (LCC?).

Die Idee mit "Nanoblaze" hatte ich auch gleich - könnte aber wetten,
dass XILINX sich den Namen schon als Marke gesichert hat ;-). Im Moment
heißt er daher schlicht "mc3ip" (Mikrocontroller 3. Version mit
Interrupts und Parity), der Assembler tbasm und der Simulator tbsim.
TBSIM gibt es aber schon gemäß Internet, muss ihn also noch
umbenennen.

Das Ganze ist übrigens im Wesentlichen in Deutsch geschrieben (deutsche
Variablennamen, deutsche Kommentare). Nicht weil ich des Englischen
nicht mächtig oder so national eingestellt wäre, aber ich stelle jeden
Tag in der Firma fest, dass deutsch auf dem Rückzug ist (man denke nur
an die ganzen Anglizismen wie Meeting, Minutes, Memo, Steering Board,
Commitee, Management, Procurement, Team Head, Department, Budget,...) -
da wollte ich mal einen Kontrapunkt setzen. Von daher vielleicht nicht
so für Open Cores geeignet, oder gibt es eine deutsches Pendant (war
das jetzt eine Franzisme)?

Gruß,
Thomas

von Xenu (Gast)


Lesenswert?

Xilinx hat sich in der Tat den Namen Nanoblaze schützen lassen...
Einen Prozessor mit diesem Namen gibt's aber nicht.

von Jan (Gast)


Lesenswert?

Hallo,

ich habe auch für meine Diplomarbeit einen kompletten µC in VHDL
realisiert, mit allen 256 Befehlen, 6 Timern, Interrupten usw. Würde
gern mal eine andere Arbeit dazu sehen. Also, wenn du Zeit hast, mach
dir die Arbeit und stell es mal rein.

Gruß

von Ronny (Gast)


Lesenswert?

Wenn ich darüber nachdenke gibt es generell nicht soo viele 16-Bitter
die gut verfügbar sind.Auf Anhieb fallen mir nur die Infineon
C16x/XC16x und der MSP430 ein.Und vielleicht noch die M16C von
Renesas.

Hingegen fallen mir auf Anhieb viele weit verbreitete 8 und 32 Bitter
ein (AVR,PIC,HC11,ARM,SH8,H8,...)

von Mighty (Gast)


Lesenswert?

@Thomas B.
> da wollte ich mal einen Kontrapunkt setzen.
Nett, aber damit eckelst du ne Menge potentieller Mitstreiter
ab die des Deutschen nicht mächtig sind, so du das Projekt
im grossen weiterentwickeln willst...

Das können sich wirklich nur sehr reizvolle projekte leisten
wie z.B. Ruby, für welches es am anfang ausschließlich Japanische
Dokumentation gab o_0. Und nein, ich hatte keinen Spass ;(

von Daniel R. (daniel_r)


Lesenswert?

>>Nett, aber damit eckelst du ne Menge potentieller Mitstreiter
>>ab die des Deutschen nicht mächtig sind, *so du das Projekt
>>im grossen weiterentwickeln willst...*

Ach, dich auch?

SCNR

von Mighty (Gast)


Lesenswert?

Jein,
tatsächlich ist Deutsch nicht meine Muttersprache.
Bist aber auch ganz schön spitzfinderisch...

Das war ein gut gemeinter Ratschlag und er war nicht an dich gerichtet.

von Daniel R. (daniel_r)


Lesenswert?

Als gut gemeinten Ratschlag habe ich es auch aufgefasst. Konnte aber
nicht widerstehen. Deswegen ja auch SCNR.

;)

von Mighty (Gast)


Lesenswert?

Ach, hab ich überlesen ;)

von Tom (Gast)


Lesenswert?

Aber Achtung bei den Nutzungsbedingungen von Opencores, es gab da zur
Veröffentlichung vom SR1 einen Mailwechsel mit den Betreibern. Und die
sehen derzeit vor das Opencores quasi ein exclusivrecht für die
Veröffentlichung des Projektes haben.

Einerseits kann ich es gut verstehen das sich die Plattform nicht als
Linkliste und kostenlose Werbeplattform versteht, andererseits gibts
auch genügend Projekte die seit Jahren in der Planungsphase ohne jeden
weiteren Inhalt sind, ohne das da mal aufgeräumt wird.

von Thomas B. (paraglider)


Lesenswert?

Hallo mal wieder,

eigentlich wollte ich die Doku ja bis zum letzten Wochenende
fertiggestellt haben. Aber dann ist mir noch eine
Verbesserungsmöglichkeit aufgefallen und so habe ich den Mikroprozessor
noch etwas beschleunigt und gleichzeitig verkleinert. Er läuft jetzt auf
dem Spartan3-4 mit 15ns Taktzyklus, also 66 MHz. Dabei benötigt er ohne
Peripherie genau 363 LUTs incl. Registerbank.

Allerdings bin ich mir immer noch nicht ganz schlüssig, wie ich das
Projekt veröffentlichen soll. Interesse besteht ja offensichtlich, den
Downloads des Befehlssatzes nach zu urteilen. Dass ich es
veröffentlichen will, steht auch fest. Mit größter Wahrscheinlichkeit
komplett gemäß GNU GPL, wenn niemand wesentliche Argumente dagegen
kennt. Wobei ich auch überlege, für nicht GPL-konforme Weiterverwendung
eine andere Art der Lizensierung zu definieren.

Derzeit schreibe ich noch an ein paar Seiten HTML-Doku. Übrigens auch
in Deutsch - obwohl sich der Prozessor daher sicher nicht weltweit
durchsetzen wird ;-). Werde das Ganze wohl einfach erst mal hier
reinstellen. Dann könnt ihr ja eure Meinungen und Kommentare abgeben
und dann können wir immer noch sehen, ob das Ding Potenzial zu mehr
hat. Und vielleicht übersetze ich ja dann auch alles mal ins
Englische.

Gruß,
Thomas B.

von Christian Schleiffer (Gast)


Lesenswert?

Hi Thomas,

> Mit größter Wahrscheinlichkeit komplett gemäß GNU GPL,
> wenn niemand wesentliche Argumente dagegen kennt. Wobei
> ich auch überlege, für nicht GPL-konforme Weiterverwendung
> eine andere Art der Lizensierung zu definieren.

es ist gar kein Problem mehrere Lizenzen zu haben, z.B. GPL + eine
kommerzielle. Allerdings musst du aufpassen, wenn der Code unter der
GPL von Dritten weiterentwickelt wird, darf die Veränderung nur mit
deren Einverständnis in den kommerziellen Teil einfließen.
Schau dir mal MySQL, BDB usw. an, da läuft es ähnlich.

Gruß
Christian

von 123 (Gast)


Lesenswert?

Hätte auch interesse an deiner doku. Ich versuch mich gerade daran eine
c166 nachzubaun. Bin gerade dabei den linearen Adressraum auf die
Register, rom, ram, ports... abzubilden. Das bereitet mir probleme. Wie
hast du das gelöst???

von Rene B. (themason) Benutzerseite


Lesenswert?

@thomas

ich muß auch noch mal mein interesse an dem vhdl-code bekunden.
mich würde vor allem interessieren wie du es geschafft hast die cpu so
schnell hinzubekommen (von der geschwindigkeit her ..)
ich brauche bei mir (laut überlegung) immer 2 takte bis ich den opcode
in der hand (bzw. in einem register) halte und nochmal 2 takte bis die
ausführung beginnen kann (meine cpu läuft über mikro-code der in einem
separaten blockram abgelegt ist). Es funktioniert zwar ganz gut (laut
Xilinx ISE 6.1 komme ich auf 91.xxMHz, laut ISE 8.x nur noch auf knapp
50MHz :-(( )
aber mein prozessor ist auch deutlich spezieller ausgelegt
(Audio-Prozessor mit getrenntem programm/daten und koeffizienten
speicher) und ich würde mir gerne mal ein einfaches design für einen
16-bitter antun um mir dann mal meinen eigenen zu bauen ... (auch mit
assembler usw ...)

gruß
rene

von Antti Lukats (Gast)


Lesenswert?

hm...
guck here

http://www.microfpga.com

ich suche noch zusatzliche fpga cpu's fur diesen project.
das was ich jetzt benutze sind nicht tauglich fur die
kleinsten fpgas leider. habe auch selber verschiedene
fpga cpus gemacht und compilers entwickelt aber jetzt
will doch nicht alles alleine machen ;)


Antti

von Thomas B. (paraglider)


Angehängte Dateien:

Lesenswert?

Hallo,

mittlerweile habe ich eine kleine Dokumentation geschrieben und kann
das Projekt somit veröffentlichen.

Größtes Problem scheint mir heutzutage, alle notwendigen rechtlichen
Vorschriften und Formalitäten zu erfüllen, ohne eine ganze Schar von
Rechtsanwälten zu beschäftigen. Falls euch irgendwo etwas auffällt, was
ich übersehen habe, wäre ich für einen Hinweis dankbar.

So, nun schaut euch mal alles an und gebt ein paar Kommentare. Falls
ich eine Datei oder wesentliche Informationen vergessen haben sollte,
meldet euch.

Viel Spaß,
Thomas

von Antti Lukats (Gast)


Lesenswert?

Hallo,

kommentare dann -
1) ISE datei ist nicht dabei
2) die UCF datei hat zillion errors gegeben (ISE 8.1SP3)
3) BITTE BITTE, PLEASE PLEASE nur englishe 'entity names' benutzen
:)

dann konnen auch nicht deutschprachige leute die HDL bessed verstehen,
und das mangelnde englishe doku ist dann nicht so wichtig.

Antti

von Thomas B. (paraglider)


Angehängte Dateien:

Lesenswert?

Hallo,

die .ise-Datei habe ich absichtlich nicht hinzugefügt, das sie ja vom
FPGA und der verwendeten Version des ISE-WebPack abhängt.
Wichtig ist nur, dass bei den Properties für die Synthese die
Einstellung "Keep hierarchy" auf Yes oder Soft steht, da ansonsten
die Netznamen während der Design Implementierung nicht mehr verfügbar
sind und damit die Timing Contraints im .ucf-File nicht mehr angewandt
werden können. Dies geht auch so aus dem mitgelieferten .syr-File
hervor.

Anhängend ist jetzt die Datei für einen XC3S200-4FT256 und ISE WebPack
8.1-03. Diese muss ins Verzeichnis ssfp16/ise kopiert werden.

Gruß,
Thomas

von Kest (Gast)


Lesenswert?

Hallo, Thomas

ich habe mal Dein Projekt angeschaut und muss dem Antti Recht geben -
in Deutsch sieht es etwas doof aus. Das ist jetzt keine Kritik sondern
eher ein Hinweis.

Aber jetzt was ganz anderes, könntest Du z.B. ein Tutorial für
FLEX/BISON oder wie auch immer schreiben? Nur so - rudimintär,
vielleicht am Beispiel deines Prozessors?

Oder hat jemand anders einen Tipp, wie man am besten in die Matherie
einsteigt? (ich meine jetzt Parser -> Assembler)

Kest

von TheMason (Gast)


Lesenswert?

@thomas

ich habe ebenfalls mal über die doku geschaut.
ich bin zwar auch nicht so derjenige der auf englisch rumreitet, aber
es ist doch einfacher zu lesen (vor allem wenn man schon einiges an
datenblättern durchhat).
der anregung von kest (ein bischen doku zu flex) kann ich nur
zustimmen, zumal in deinem dokument steht das im doc verzeichnis was
darüber steht.
wäre schön wenn du was dazu schreiben könntest.
noch einen kleinen hinweis zu deiner doku :

- die Xilinx Block RAMS haben nur 2kB und nicht 4kB (1 Blockram = 16384
Bits Data + 2048 Bits Parity -> 2kB Daten + 256B Parity )
- es wäre schön wenn du die Block RAMs klarer kennzeichnen würdest
(eine Abkürzung in der Zeichung würde schon fast reichen, aber bei dir
steht nur RAM oder RAMB)

ansonsten : super doku ! (selbst wenn ich noch nicht alles verstanden
habe, aber beim ersten überfliegen muß ich sagen : schön gemacht !)

gruß
rene

von Xenu (Gast)


Lesenswert?

>Oder hat jemand anders einen Tipp, wie man am besten in die Matherie
>einsteigt? (ich meine jetzt Parser -> Assembler)

Buch: "lex & yacc" von Helmut Herold.
Kann ich Dir nur wärmstens empfehlen.

Und ausserdem: "Lex & Yacc" von John R Levine/Tony Mason/Doug Brown.

von Antti Lukats (Gast)


Angehängte Dateien:

Lesenswert?

Google translation of the original documentation
original docs in german also included.

rather minimal editing done after raw google translation

Antti

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Um mal schnell einen kleinen Assembler zu schreiben ist lex & yacc
vielleicht etwas schwere Kost. Einfacher geht es indem man eine
Scriptsprache zweckentfremdet, da hat man z.B. die Auswertung von
beliebig komplexen Ausdrücken schon eingebaut. Für den Befehl 'add'
schreibt man eine Funktion add(x,y), die den OP-Code des Befehls an
einen Puffer dranhängt, usw. Makros sind genauso möglich. Etwas
ähnliches (aber für eine andere Anwendung) hab ich mal in Ruby
gebastelt. Einen Assembler der z.B. folgende Syntax erlaubt (fiktives
Beispiel) könnte man in ein paar Zeilen Code implementieren:

XYZ = 1234

_loop1
  in r2, PORTA
  add r1, r2
  cpi r1, sin(PI/4) + XYZ
  breq _loop1

von Thomas B. (paraglider)


Lesenswert?

Hallo zusammen,

ok, ich hab kapiert, dass ihr alles auf englisch wollt. Werde es das
nächste mal berücksichtigen.

Was die "Übersetzung" von google betrifft, so ist diese aber wohl
kaum zur Veröffentlichung hier geeignet! Glaubt mir, wenn ich einen
englischen Text haben möchte, schreibe ich den in nicht wesentlich
längerer Zeit als die Überarbeitung der "Übersetzung" benötigt! Im
Übrigen gibt es sowas wie ein Copyright. Die Übersetzung in dieser Form
verstößt gegen die von mir definierte Lizenz (GDL) - auf der anderen
Seite bin ich ganz froh, dass mein Name da nur auf dem einen Bild
auftaucht. Keine Angst Antti, werde dich nicht rechtlich belangen, aber
bitte sprich zukünftig in deinem eigenen Interesse mit den
Copyright-Inhabern, bevor du sowas tust.

@Rene: Bei der BRAM-Größe hast du natürlich Recht, die zwei Fehler habe
ich für mich schon korrigiert. Die Kennzeichnung der BRAMs als Befehls-
und Daten-RAM hätte auch was - keine Frage. Werde es in der nächsten
Version ergänzen.

Was die Doku des flex betrifft - der hat eine hervorragende
Dokumentation dabei, die werde ich bestimmt nicht nochmal abschreiben.
Zudem ist die .lex-Datei meines Erachtens doch ziemlich leicht zu
verstehen, oder nicht?

@Andreas: Die Idee mit der Skript-Sprache ist insbesondere aufgrund der
Auswertung komplexer Ausdrücke sicher nicht schlecht, aber ich kenne
mich mit Skript-Sprachen nicht gut aus. Kannst mir ja mal was dazu
schicken, damit ich Aufwand und Möglichkeiten mit meiner Lösung
vergleichen kann.

Ansonsten würde ich mich über weitere konstruktive Rückmeldungen
freuen.

Viele Grüße,
Thomas

von antti (Gast)


Lesenswert?

To Paraglider,

leider nehme es dir wirklich heftig ubel was du da sagst.




habe gerade FDL durhgelesen, deine ubereinstimmung muss ich
NUR dann holen wenn ich teile von origanal text die nicht
verstandlich sind ERSETZE. Das habe ICH jedoch NICHT getan.

D.h. du hast keinen basis indirekte andeutungen zu machen
das du es vornehmen konntest mir problem zu machen solltest
du es anders uberlegen oder das es um eine copyright verletzung
handelt wenn es nicht der fall ist.

deinen text habe ich NICHT geandert, den Lizenz habe ich auch so
dabei wie es ursprunglich war, die lizenzierung habe ich nicht
geandert.

du hast naturlich volle rechte es ubel zunehmen wenn leute
wie ich es erkannt haben das deine arbeit es verdient fur
mehre leute zuganglich zu sein, und as diesem alleinigen
grund die Zeit genommen haben dir zu helfen zu versuchen.


ich habe die word source von der ubersetzung meiner Frau
geschikt mit der bitte das zu editieren, leider hat sie
bis jetzt die Zeit nicht gefunden (wir haben 2 kinder -
2.5 und 4.5 jahre und Sie hat nicht viele stunden pro
tag ubrig) - sollte Sie es schaffen des google moogle
zurecht zu bringen werde ich es naturlich auch gleich
veroffentlichen, wie und wo ist dann aber meine sache.

Antti

von Thomas B. (paraglider)


Lesenswert?

Hallo Antti,

ich weiß, dass du nur helfen wolltest und weiß ja, dass auch du nur
deine Freizeit hier investierst. Ich hätte auch gar nichts gesagt, wenn
die Übersetzung halbwegs akzeptabel gewesen wäre. Aber du wirst mir
zustimmen, dass sie noch wesentlicher Überarbeitung bedarf, damit sie
verständlich wird. Und ein Copyright-Vermerk gehört eben auch dazu -
sowohl meiner für das Original als auch deiner für die Übersetzung.
Aber mache dir keine Sorgen, ich mache dir bestimmt keine Vorwürfe und
nehme dir auch nichts übel. Es war wirklich nur ein gut gemeinter Rat,
denn leider gibt es heute viele Menschen, die nichts lieber tun, als
Rechtsanwälte und Gerichte zu beschäftigen.

Lieben Gruß,
Thomas

von antti (Gast)


Lesenswert?

hm
ich habe das in dieser form so public gemacht da es sonst
um verzogerung gekommen hatte. ich hatte keine zeit mehr
in dem augenblick und so habe ich es so als es war angehangt,
die google moogle ist naturlich komish, oder andersrum bullshit
jedoch dieses PDF zu lesen ist fur einen nicht deutschen schnelleres
weg als selber die google doku zu machen,

da mit dem copyright versteh ich doch nicht, ich habe ja nix weg
genommen oder zu gefuhrt, wenn da was fehlt ist es nicht meine
schuld auf jeden fall.

Antti

von Andreas S. (andreas) (Admin) Benutzerseite


Angehängte Dateien:

Lesenswert?

@Thomas: Ich habe mal ein kleines Beispiel für einen fiktiven Controller
gebastelt, siehe Anhang. Beispiel-Assemblercode (an der Syntax lässt
sich noch drehen, aber so war's am einfachsten):

      add r0, r4
      adc r1, r5
_ :loop
      adc r0, r7
      cpi r0, 1 + 2 + 3
      breq :loop

Aufruf des Assemblers:
$ ./asm.rb
Usage: asm.rb file
$ ./asm.rb test.asm
Memory contents:
a4 b5 b7 c0 6 d0 2
1 label(s) defined:
{:loop=>2}

von Ale (Gast)


Lesenswert?

@Thomas:

Wiess du wie viel Strom breucht es per Mhz oder so ?
Es interesiert mir viel, es gibt noch platz für ein Paar mehr opcodes
?

Die englishe èbersetzung ist ein bischen so schlecht :-(

Du sagst nicht ob die GPL Lizenz ist v1 oder v2 (nötig).

Aber es ist ein tolles und komplettes Packet !

Danke !

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.