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
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.
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.
Sowas eignete sich doch prima für open cores. Dann gibt es auch Leute, die dran mitarbeiten und es erweitern.
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
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
Xilinx hat sich in der Tat den Namen Nanoblaze schützen lassen... Einen Prozessor mit diesem Namen gibt's aber nicht.
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ß
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,...)
@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 ;(
>>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
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.
Als gut gemeinten Ratschlag habe ich es auch aufgefasst. Konnte aber nicht widerstehen. Deswegen ja auch SCNR. ;)
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.
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.
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
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???
@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
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
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
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
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
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
@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
>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.
Google translation of the original documentation original docs in german also included. rather minimal editing done after raw google translation Antti
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
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
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
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
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
@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}
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.