Hallo, habe eine Konfiguration für das Spartan-3A- Starterkit ausgearbeitet. Es handelt sich um einen 8bit-Rechner mit CPU-Eigenentwicklung. Informationen und Downloads sind zu finden auf meiner Website: http://www.bomerenzprojekt.de Die Konfiguration wurde getestet auf einem Spartan-3A-Starterkit Revision-D-Board. Wenn ich das Xilinx-Dokument UG334 richtig verstanden habe, ist das Spartan-3AN-Starterkit dazu kompatibel. Die Konfiguration macht keinen Gebrauch von den Flash-Speichern auf dem Board. Es ist möglich, sie ohne bleibende Veränderungen auf dem Board zu testen. Die Konfiguration verwendet das DDR2-RAM mittels eines vereinfachten Verfahrens, ohne den von Xilinx bereitgestellten DDR2-RAM-Treiber MIG. Ob das Verfahren stabil auf jedem Exemplar des Boards funktioniert, müsste erst noch getestet werden. Bei positivem Ergebnis wäre das Verfahren vielleicht auch für andere Nutzer interessant. Zu dem Projekt gibt es im Forum bereits einen Beitrag in der Rubrik FPGA, VHDL & CO: Beitrag "Projekt 8bit-Rechner mit FPGA-Prototyp-Gerät" Die Diskussion dort war eingeschränkt, weil meine Website zuerst nur aus der Startseite bestand, und dann erweitert wurde mit Informationen zur CPU, nicht aber zum Gesamtsystem. Jetzt, da alles auf der Website verfügbar ist, gehört das Thema vielleicht in diese Rubrik Codesammlung. Josef.G
Das vereinfachte Verfahren zum Betrieb des DDR2-RAM: Die 4 Datenworte eines Bursts werden als ein einziges Datenwort behandelt. Beim Schreiben erhalten alle 4 Worte denselben Wert. Das Lesen erfolgt irgendwo im Inneren des Bursts. Dadurch entfällt die Schwierigkeit, beim Lesen in jedem der 4 Worte zeitlich die Mitte zu treffen. Theoretisch wäre es denkbar, dass beim Lesen zwischen den 4 Worten Glitche auftreten und man fehlerhafte Werte ins FPGA einliest. Dies scheint jedoch nicht der Fall zu sein. Vielleicht hat das Verfahren nur zufällig bei meinem Board funktioniert, weil der Lesezeitpunkt gerade innerhalb eines einzelnen der 4 Worte liegt, und es würde aufgrund der Streuungen von Bauteile-Eigenschaften auf anderen Boards nicht funktionieren, weil doch Glitche aufteten. Ich habe aber in Test-Konfigurationen das DDR2-RAM als Video-RAM verwendet und mir den Inhalt vor dem ersten Beschreiben angeschaut. Dabei gab es teilweise blinkende Punkte auf dem Display, teils aber auch stabile Bilder. Ich glaube deshalb, dass durch Temperaturschwankungen und andere Einflüsse die genaue Phasenlage des Lesezeitpunkts relativ zu den Daten des Bursts nicht stabil ist, und dass das Verfahren bei mir nur deshalb funktioniert hat, weil tatsächlich keine Glitche auftreten. Das Verfahren ist natürlich nicht im Sinne des DDR2-RAM- Erfinders. Aus der Sicht des Anwenders, dem ein Viertel der Speicherkapazität locker ausreicht, erfüllt es seinen Zweck.
Habe vielleicht den Thread in diesem Forum Codesammlung falsch eingeleitet, da hier anscheinend weniger FPGA/VHDL-Leute unterwegs sind und eher Software-Leute zu finden sind. Vielleicht gibt es hier eher Leute, die sich für das Software-Konzept des Projekts und für das Emulations-Programm interessieren. Der Schwerpunkt des Projekts lag anfangs ohne- hin auf diesem Gebiet, und die FPGA-Realisierung war nur als Prototyp-Gerät gedacht, um leichter Interessenten zu finden. Vielleicht mag jemand das Emulationsprogramm testen. Man muß dazu nicht gleich die ganze Software-Dokumentation durchlesen.
Ich hab mir mal deine Seite bissel angeschaut, aber was du da eigentlich gebastelt hast, ist mir immer noch unklar. Was für eine Struktur hat denn deine CPU? Wie ist der Befehlssatz aufgebaut? Was kann sie denn alles? Gibt es überhaupt sowas wie Interrupts, Peripherie usw.? Welcher Ressourcenverbrauch ist angesagt? Fragen über Fragen. Entweder ist dein Projekt noch sehr unreif, oder du hast dir viel zu wenig Mühe gegeben, es verständlich darzustellen. Da kommt dann nicht viel Beteiligung auf. Kennst du eigentlich den japanischen PIC16-Nachbau? Sowas wäre eine gute Ausgangsbasis zum Entwickeln einer eigenen Soft-CPU. W.S.
Zum Beitrag von W.S. Der CPU-Befehlssatz ist auf der Seite CPU-doku dokumentiert. Ich muß zugeben, dass die Darstellung sehr knapp gehalten und vielleicht nicht flüssig zu lesen ist, sie ist aber vollständig. Es gibt nur 8bit-Speicherzugriffe. 16bit-Zugriffe können daraus mittels IXE/DXE, IYE/DYE, IZE/DZE aufgebaut werden. Die Adressregister X,Y,Z sind gleichberechtigt, und es gibt keinen Stackpointer. Der Sprungbefehl J.. wird verwendet für (lange) Sprünge, Unterprogramm-Aufrufe und Rückkehr aus Unter- programmen. Er rettet die Rückkehradresse (auch wenn sie nicht gebraucht wird) sowohl in Q als auch in K. Ein Unterprogramm, welches selbst J.. verwenden will für andere Zwecke als zum Rücksprung, muß zuerst Q bzw K retten. Der Befehl J.. kann durch Voranstellen eines H.. mit einer memory-page-Umschaltung kombiniert werden. Für schnelle Schleifen gibt es die Schleifen- Startadresse R. Repeat-Befehle gibt es kombiniert mit Zähler- Dekrementieren und Adresse Inkrementieren/Dekrementieren. Die CPU ist kein Mikrocontroller wie die Prozessoren der PIC- Serie, sondern eine blanke Zentraleinheit, also ohne Peripherie. Die CPU hat keine Interrupts. Sie ist dazu konzipiert, das Prinzip exakt berechenbarer Programmlaufzeiten umzusetzen. Es gibt einen universellen Input/Output-Befehl (H..) und eine Steuerleitung REP zum Anhalten der CPU (auf Eingaben warten). Wenn man die CPU in einer Steuerung einsetzen will, kann man zur Realisierung von Sicherheitsfunktionen Reset verwenden, da die CPU die Startadresse einliest. Für echte Interrupts, nach deren Beendigung das unterbrochene Programm weiterlaufen soll, bräuchte man eine zweite CPU, welche die erste mittels REP anhält und eine Interrupt-Routine ausführt. Im vorliegenden Gesamtsystem ist dies nicht vorgesehen.
Nochmal zum Thema Funktionsfähigkeit des Verfahrens zur Verwendung des DDR2-RAM : Die Konfiguration ist mittlerweile auf einem zweiten Exemplar des Spartan-3A-Starterkits erfolgreich getestet.
Zur Frage von W.S. nach dem Ressourcen-Verbrauch der CPU: Habe von ISE versuchsweise die CPU allein synthetisieren lassen. Resultierende Zahlen nach Synthese / nach Place&Route: Flipflops 259/259, Slices 575/620, 4input-LUTs 1087/1090
Habe die Konfiguration überarbeitet. Es gibt nun ausser dem 640x480/60Hz-Videomodus auch einen 1366x768(WXGA)-Modus. Die Auswahl erfolgt durch einen Schiebeschalter auf dem Board. Ausserdem ist es nun möglich, über RS232 eine vom Anwender geschriebene 64KByte-Steckkartensoftware von einem PC ins DDR2-RAM zu übertragen. Wer sich hauptsächlich für Software- Entwicklung interessiert, kann nun Software testen ohne Konfigurationsänderung. Datenaustausch mit PC über RS232. http://www.bomerenzprojekt.de
Habe erneut die Konfiguration überarbeitet. Die Größe der über RS232 übertragbaren Steckkarten-Software habe ich auf 32KByte reduziert, damit es schneller geht. Die 32KByte können nun im Parallel-Flash-Speicher gesichert und daraus wiederhergestellt werden. Wenn man die Konfiguration im Platform-Flash ablegt, eine sinnvolle 32KByte Kartensoftware erstellt und diese im Parallel-Flash ablegt, hat man ein Gerät mit Bildschirm und Tastatur, das über RS232 mit einem PC Daten austauschen kann, aber auch ohne PC betrieben werden kann.
Einige Besonderheiten der Compilersprache des Systems (Exakte Informationen sind zu finden auf der Seite SYS-doku) Die Schleife mit Hineinsprung Das Sprungziel liegt irgendwo im Schleifenkörper. Wenn es am Anfang des Schleifenkörpers liegt, hat man eine reine do-while- Schleife. Liegt es am Ende unmittelbar vor dem Repeat-Befehl, hat man eine reine while-Schleife. Der Variablentyp Databox Damit lassen sich Arrays und Strukturen (Records) realisieren. Einbindung von Steckkarten Abgesehen von einigen einfachen Operationen wie Inkrementieren/ Dekrementieren beinhaltet die Sprache nur Strukturelemente. Die Routinen werden von den Steckkarten geliefert. Anstelle von Aus- drücken gibt es Folgen von Mikro-Operationen. Der Programmierer muß arithmetische Ausdrücke selbst in solche Folgen umschreiben. Dadurch hat er mehr Schreibarbeit, aber auch die vollständige Kontrolle über den tatsächlich ausgeführten Code. Vom Anwender selbst geschriebene Assembler-Routinen Sie werden über eine wohldefinierte Schnittstelle eingebunden. Variablenübergabe an Routinen und Unterprogramme Es werden ausschließlich Zeiger übergeben. Vaiable vom Typ lokal-fixed Sie sind Teil des Programmcodes und können, wenn das Programm nicht aktiv ist, aus der Kommandozeile bearbeitet werden. Residente Variable Sie sind im RAM ausserhalb von Programmen bleibend vorhanden. Programme können sie acquirieren und dann wie gewöhnliche zum Programm gehörende Variable verwenden.
Zu dem möglichen Glitch-Problem beim Lesen des DDR2-RAM: Habe mich informiert über den inneren Aufbau von DDR2-RAM. Es scheint so zu sein, dass die vier Datenbits eines Bursts parallel in ein Schieberegister geladen werden und dann nacheinander in das am Ausgang liegende Bit des Schiebe- registers gelangen. Es können also gar keine Glitche auf- treten, da ein Flipflop, welches mit dem alten Wert geladen wird, keinen Glitch produziert.
Übrigens: Zur Realisierung der Konfiguration auf dem Spartan-3A- Starterkit wird nur die kostenlose ISE-WebPack-Lizenz gebraucht.
Deiner Seite fehlt ein Impressum. Nicht das ein böswilliger Mensch dir ein paar € abmahnen möchte
D. I. schrieb: > Deiner Seite fehlt ein Impressum. Die Aussage verstehe ich nicht. Auf der Startseite meiner Website steht im unteren Drittel: Impressum ... Trotzdem Danke für den Beitrag, schon allein wegen der ansonsten spärlichen Reaktionen.
Josef G. schrieb: > D. I. schrieb: >> Deiner Seite fehlt ein Impressum. > > Die Aussage verstehe ich nicht. Auf der Startseite meiner > Website steht im unteren Drittel: Impressum ... > > Trotzdem Danke für den Beitrag, schon allein > wegen der ansonsten spärlichen Reaktionen. Tatsache, aber das Impressum muss von jeder Seite über einen ersichtlichen Link erreichbar sein. Das könntest du mit einem Anker an diese Position und einem Link in deinem Menü oben bewerkstelligen.
Mit Fotos machen oder Screenshots machen und hochladen kenn ich mich leider nicht aus. Vielleicht tut's auch das: http://www.xilinx.com/products/boards-and-kits/HW-SPAR3A-SK-UNI-G.htm
Nur für den unwahrscheinlichen Fall, dass tatsächlich jemand daran denkt, das Board speziell für dieses Projekt zu kaufen: Man achte darauf, dass es das Revision-D-Board ist.
Möchte noch hinweisen auf folgende Eigenschaft des Systems, wenn man es als eigens gefertigte Hardware realisieren würde: Da die CPU mit einer starren Abfolge von tA/tB läuft, wobei Speicherzugriffe nur während tA erfolgen (Repeat-Halbzyklen werden in gerader Anzahl eingefügt und übernehmen abwechselnd die Rolle von tA und tB), ist es möglich, auf den Steckkarten eigene CPUs mit 180 Grad Zeitversatz laufen zu lassen.
Josef G. schrieb: > Möchte noch hinweisen auf folgende Eigenschaft des Systems, > wenn man es als eigens gefertigte Hardware realisieren würde: > Da die CPU mit einer starren Abfolge von tA/tB läuft, wobei > Speicherzugriffe nur während tA erfolgen (Repeat-Halbzyklen > werden in gerader Anzahl eingefügt und übernehmen abwechselnd > die Rolle von tA und tB), ist es möglich, auf den Steckkarten > eigene CPUs mit 180 Grad Zeitversatz laufen zu lassen. Klingt für mich irgendwie nach 6510 und dem Cevi, nur das da der VIC2 der "Busmaster" ist. Willst du dich vielleicht mal drin reinlesen.
Möchte nochmal auf das Emulations-Programm für Linux-PC aufmerksam machen. Es arbeitet die ROM-Software des Systems interpretativ ab. Man kann sich damit einen Eindruck vom Ver- halten des Systems verschaffen. Die Bedienung des Programms ist auf der Seite Emul beschrieben. Nur wenige Informationen muß man auf der Seite SYS-doku nachschauen.
Das Emulations-Programm kann im Home-Verzeichnis compiliert und problemlos wieder gelöscht werden.
Hier sind Screenshots zu einem Demonstrations-Programm. run.png zeigt den Ablauf zum Compilieren und Betreiben des Programms. part1.png und part2.png zeigen den Quelltext, part2.png ausserdem den vollständigen Zeichensatz des Systems. 1.DEMO lädt den Quelltext in die Seite E des Text-RAM. =NEW =PGM +1111 und =NEW =EDI +1111 erzeugen die Variablen PGM und EDI mit initialer Länge-1 = 1111 Bytes. =IN.C +PGM und =IN.D +EDI installieren die Variablen in Stack C und Stack D. =MPRO und =ENDM compilieren das Programm. -PGM startet das Programm. Man kann eine der 4 Grundrechenarten auswählen und gibt dann die beiden Operanden ein. Beim Dividieren ist zu berücksichtigen, dass Divisor = zweiter Operand + 1 ist. Der Quelltext zeigt die Nützlichkeit der Struktur Schleife mit Hineinsprung. Beim Zeichensatz sei auf den hexadezimalen Ziffernsatz hinge- wiesen. Die Ziffern mit Überstrich sind dazu gedacht, längere Ziffernfolgen zu strukturieren und besser lesbar zu machen.
Die Schrift ist grottenhässlich und nicht wirklich leicht lesbar.
Simon K. schrieb: > Die Schrift ist grottenhässlich und nicht wirklich leicht lesbar. Ist alles eine Frage der Gewöhnung.
Zur Schleife mit Hineinsprung Sie besteht im obigen Listing aus L.JP HERE und RP.1 /F0. 1 oGET /04 oTTL SEL testet, ob SEL > 3 ist. Das Resultat wird auf den TF-Merker geschoben, das ist ein Byte im RAM. RP.1 /F0 fragt 3 Bits des TF-Merker anhand der Wahrheits- Tabelle /F0 ab (effektiv wird nur 1 Bit abgefragt), entfernt das abgelgte Bit und führt einen bedingten Rückwärtssprung aus. In C müsste man hier eine while-Schleife verwenden und den Programmteil zwischen HERE und dem Rückwärtssprung in eine function packen. Es ist offensichtlich, dass die Schleife mit Hineinsprung den gleichen Zweck auf einfachere Weise erfüllt.
Habe die Konfiguration erweitert zur Anbindung einer SD-Karte mittels eines PmodSD-Kartenhalters von Digilent. Softwareseitig habe ich bisher nur die physikalischen Routinen Initialisieren, Read, Write, Erase (mit Block-Adressierung) erstellt, dazu eine provisorische Schnittstelle zur Kommando- zeile zum Testen der Routinen. Die Anwendungsroutinen, welche handeln mit Dateinamen und Directory, muß ich noch erstellen. Näheres auf der Seite Hawa meiner Website. http://www.bomerenzprojekt.de
Zur Förderung des Interesses und meiner Glaubwürdigkeit ...
Der PmodSD-Kartenhalter von Digilent und der ebenfalls bei trenz erhältliche Micro-SD-Adapter von Trioflex sind nicht Pin-kompatibel.
Vielleicht sehen die Kleinbuchstaben so besser aus.
Habe gerade festgestellt, dass seit heute oder gestern auf meiner Website nicht mehr die neue Version vom 13.06.2012 angezeigt wird, sondern die vorherige Version (ohne SD-Karte).
Ich würde mir an Deiner Stelle mal Gedanken darüber machen, wie man einer Leserschaft Inhalte so präsentiert, dass Interesse geweckt wird. Du hingegen scheinst ja eher der redundanzfreie Typ zu sein. So funktioniert Wissensvermittlung aber nicht. Alleine den Einstiegspunkt auf Deiner Homepage zu finden, ist schon ein Martyrium. Farbgebung darf angenehm sein. Inhaltsverzeichnis, Übersicht("sicht" kommt von sehen!), ein paar Blockdiagramme, eine Spässchen, eine Anekdote oder gar ein Smilie, das bewegt zum Weiterlesen.
Nebulus schrieb: > Alleine den Einstiegspunkt auf Deiner > Homepage zu finden, ist schon ein Martyrium. Habe die Startseite geändert. Vielleicht sind die wichtigen Informationen jetzt schneller zu finden. Die Website zeigt nun wieder den aktuellen Stand.
Eine weitere Besonderheit der Compilersprache des Systemms: Frei definierbare Datentypen. Fest eingebaut sind nur die Typen Name, String, vorzeichenlose Zahl (bis 32 Byte). Weitere Typen wie zB. Gleitpunktzahlen können durch die Steckkarten bereit- gestellt werden, und es gibt dazu eine Schnittstelle zur Konver- tierung von Datenstring und Wert, die beim Compilieren verwendet wird, und auch beim nachträglichen Bearbeiten aus der Kommando- Zeile von lokal-fixed Daten.
Betrachtet man die Zahl der Downloads der weiter oben geposteten Screenshots und des Fotos, so scheint es doch einige Leute zu geben, die sich für das Projekt interessieren. Leider ist die aktive Beteiligung an diesem Thread mäßig, und der Thread wird wohl in der Versenkung verschwinden. Ich habe deshalb einen kleinen Artikel mit Verweis auf den Thread erstellt, damit er auch weiterhin gefunden wird. Der Artikel hat den Titel "Acht-bit-Rechner" und findet sich in der Kategorie FPGA-Projekte. Josef G.
Siehe auch im Forum Offtopic Beitrag "Re: Warum ist das Zoll als Maßstab für Elektronikbauteile im Elektronikbereich immer noch dominieren"
Zwischenfrage zum Stand des Systems: Wie gross wäre der Aufwand, damit eine Art GUI für Elektronik zu bauen, also mit Maus und Tastatur für PS/2 und einem Zeichengenerator-RAM, wo man wie bei einem Messgerät durch Klicken die Werte hoch und runter stellen kann. Sowas braucht man für viele FPGA-Designs, da sähe ich einen Ansatz.
J. S. schrieb: > Zwischenfrage zum Stand des Systems: Ich habe seit der bereits veröffentlichten SD-Card-Anbindung nicht mehr an dem Projekt weitergearbeitet. > Wie gross wäre der Aufwand, damit eine Art GUI für Elektronik zu bauen, > also mit Maus und Tastatur ... Mit grafischen Benutzeroberflächen und Maus-Verwendung kenne ich mich leider nicht aus.
Auf der Seite Emul der Projekt-Website gibt es nun auch Informationen zur internen Arbeitsweise der CPU. http://www.bomerenzprojekt.de
Leider gibt es kaum noch kleine Monitore zu einem akzeptablen Preis, welche sich für das Projekt eignen würden. Habe nun den Monitor Asus VH168D (1366x768, 15.6 Zoll) erfolgreich an der Konfiguration getestet. Das 1366x768-Bild ist gut, es war aber am Monitor eine Justierung der Phase erforderlich. Auch die Qualität des 640x480-Bildes ist erstaunlich gut. Man kann am Monitor das Format 4:3 einstellen. Großer Nachteil: Das Display ist nicht entspiegelt. Das stört vor allem, weil bei meiner Anwendung das Bild nur einen Teil der Fläche beansprucht. Man sollte den unbenutzten Randbereich mit Papier abdecken. http://www.asus.com/Display/LCD_Monitors/VH168D/#overview
Im embedded-projects-Journal 14 Seite 19 gibt es zu dem Projekt den Artikel "Ein 8bit-Rechner auf dem Spartan-3A-Starterkit". http://www.embedded-projects.net Als Benedikt Sauter mir schrieb, er brauche noch ein Foto oder eine Grafik, eventuell würde ihm eine Skizze auf Papier reichen, und ich ihm darauf Skizzen sandte, da hatte ich mir eingebildet, er würde daraus am Rechner saubere Grafiken basteln. Dass er die Skizzen einscannt und unverändert abdruckt, damit hatte ich nicht gerechnet. Au weia. Und die Bildunterschrift "CPU" an dem Foto, das den Gesamtaufbau zeigt, tut weh.
Siehe auch im Forum FPGA, VHDL & Co. Beitrag "EPJ14 S. 19: Ein 8bit-Rechner auf dem Spartan-3A-Starterkit "
Habe nun eine in der Praxis einsetzbare Software für die SD-Karte erstellt. Es gibt ein einfaches Dateisystem ohne Unterverzeichnisse, und man kann Dateien unter einem Namen speichern und wiederfinden. Siehe Seite Hawa der Website.
Das System gibt es nun auch als Konfiguration für das Spartan-3E Starter Board von Digilent. Siehe Seite Hawa der Projekt-Website.
Zu dem oben angesprochenen Monitor: Habe ihn entspiegelt mit der Folie d-c-fix static Frost 338-0011 (Strichcode 4007386 218407). Die Folie dämpft etwas zu stark, aber noch akzeptabel, und ist erheblich billiger als spezielle Displayschutzfolien.
Es gibt nun auch eine Konfiguration für das Nexys2 Board von Digilent. Siehe Seite Hawa der Projekt-Website.
Ach du liebes Bisschen.
1 | signal
|
2 | t1eaa, t1ebb, t2ebb, t1eab, t1eba, t1eava, t1eaav, t1ebvb, t1ebbv, |
3 | t1eat1, t1eat2, t1eat3, t1eat4, t1eat5, t1eat6, t1eat7, |
4 | t1ebop, t2eae1, t2ebe1, t1eabs, t1na, t2na, t1nb, t2nb, |
5 | t1ecd1, t1ecd2, t1ecd3, t1ecd4, t1ecd5, t1ecd6, t1ecd7, t1ecds, |
6 | t1ecdk, t2ecdk, t1ecdx, t2ecdx, t1ecdy, t2ecdy, t1ecdz, t2ecdz, |
7 | t1ecdp, t2ecdp, t2ecdm, t1ecdq, t2ecdr, t1ncd, t2ncd, |
8 | t1ewv, t2ewv, t1ewa0, t1ewa7, t1ewb0, t1ewb7, t1nw, t2nw, |
9 | t1ncc, t1eccv, t1eccu, t1ecca, t1ecck, t1eccs, |
10 | t1oupo, t1oup, t1ouro, t1our, t1ouk, t1oux, t1ouy, t1ouz, t1oua, |
11 | t1sn3, t2sn3, t3sn3, t1sn2, t1sn1, t2sn1, t3sn1, t1sn0, |
12 | |
13 | p1eaa, p1ebb, p2ebb, p1eab, p1eba, p1eava, p1eaav, p1ebvb, p1ebbv, |
14 | p1eat1, p1eat2, p1eat3, p1eat4, p1eat5, p1eat6, p1eat7, |
15 | p1ebop, p2eae1, p2ebe1, p1eabs, p1na, p2na, p1nb, p2nb, |
16 | p1ecd1, p1ecd2, p1ecd3, p1ecd4, p1ecd5, p1ecd6, p1ecd7, p1ecds, |
17 | p1ecdk, p2ecdk, p1ecdx, p2ecdx, p1ecdy, p2ecdy, p1ecdz, p2ecdz, |
18 | p1ecdp, p2ecdp, p2ecdm, p1ecdq, p2ecdr, p1ncd, p2ncd, |
19 | p1ewv, p2ewv, p1ewa0, p1ewa7, p1ewb0, p1ewb7, p1nw, p2nw, |
20 | p1ncc, p1eccv, p1eccu, p1ecca, p1ecck, p1eccs, |
21 | p1oupo, p1oup, p1ouro, p1our, p1ouk, p1oux, p1ouy, p1ouz, p1oua, |
22 | p1sn3, p2sn3, p3sn3, p1sn2, p1sn1, p2sn1, p3sn1, p1sn0 : std_logic; |
23 | |
24 | --steub
|
25 | signal
|
26 | f1kaa, f2kaa, f1kac, f1kad, f1kasu, f2kasu, f1kant, f2kant, |
27 | f1kaxr, f2kaxr, f1kaw, f1kbb, f1kbc, f1kbd, f1kbsu, f2kbsu, |
28 | f1vw, f1vnz, f1vcy, f2vcy, f1vcn, f2vcn, |
29 | f1wx, f2wx, f1wy, f2wy, f1wz, f2wz, |
30 | f1xzab, f1xzdc, f1xzic, f1xzsu, f2xzsu, |
31 | f1ssda, f1ssia, f1ssab, f1sscd, |
32 | f1pin, f2psu, f1mn, f1rn, f2rn, f1qcd, |
33 | f1opae, |
34 | f1sefo, f1sef, f2sef, f3sef, f1seh, |
35 | f1sn2o, f1sn2, f1sn1, f1sn0, |
36 | |
37 | q1kaa, q2kaa, q1kac, q1kad, q1kasu, q2kasu, q1kant, q2kant, |
38 | q1kaxr, q2kaxr, q1kaw, q1kbb, q1kbc, q1kbd, q1kbsu, q2kbsu, |
39 | q1vw, q1vnz, q1vcy, q2vcy, q1vcn, q2vcn, |
40 | q1wx, q2wx, q1wy, q2wy, q1wz, q2wz, |
41 | q1xzab, q1xzdc, q1xzic, q1xzsu, q2xzsu, |
42 | q1ssda, q1ssia, q1ssab, q1sscd, |
43 | q1pin, q2psu, q1mn, q1rn, q2rn, q1qcd, |
44 | q1opae, |
45 | q1sefo, q1sef, q2sef, q3sef, q1seh, |
46 | q1sn2o, q1sn2, q1sn1, q1sn0 : std_logic; |
Quelle: http://www.bomerenzprojekt.de/Website/CPU-vhdl.html
Ich hab mal für ein JavaScript einen JavaScriptobuscator benutzt. wow, der CPU Code sieht ungefähr so aus, als wenn er direkt aus einem VHDL-Obfuscator käme. Typischer Fall von write-only-code. Lesen kann das niemand mehr :-/
Wer sich für den internen Aufbau der CPU interessiert, sollte den entsprechenden Abschnitt auf der Seite Emul der Projekt-Website lesen. http://www.bomerenzprojekt.de
In Beitrag "Hexadezimaler Ziffernsatz" wurde ich geschimpft wegen der Farbgestaltung der Website. Die habe ich vor kurzem geändert. Ist es so besser?
Josef G. schrieb: > Wer sich für den internen Aufbau der CPU interessiert, sollte den > entsprechenden Abschnitt auf der Seite Emul der Projekt-Website lesen. > http://www.bomerenzprojekt.de Das ist ja alles gut und schön, und der mit Steckkarten erweiterbare Befehlssatz klingt wirklich interessant. Aber denkst du denn nicht auch, dass du gerade VHDL benutzt, damit du nicht sämtliche logischen Funktionen von Hand reduzieren und ausprogrammieren musst? Und dann überall diese Dinger hier:
1 | o := essab ; veab := o & o & o & o & o & o & o & o |
2 | & o & o & o & o & o & o & o & o; |
Das kann man doch einfach als Aggregat formulieren:
1 | veab <= (15 downto 0 => essab); |
2 | -- oder generisch:
|
3 | veab <= (veab'range => essab); |
Und der elementea-Prozess: Wie willst du oder irgendjemand den jemals debuggen? Ich denke, du machst dir das Leben an einigen Stellen unnötig schwer...
Sven P. schrieb: > Wie willst du oder irgendjemand den jemals debuggen? Wer die Logiknetze überprüfen will, kann mit dem Programm stsg sich für jeden OpCode die Folge der Steuersignale ansehen und nachvollziehen, dass sie die gewünschte Operation bewirken. Er kann sich dann für jedes Steuersignal und jede Phase die Tabelle der OpCodes und Bedingungen ansehen, und hat zu prüfen, ob die im VHDL-Code enthaltenen Logiknetze diese Tabellen erfüllen. Ich habe mir dazu ein kleines C-Programm geschrieben. Man gibt ein zB. 0111xx10, 111xxx01, ... und lässt sich die erzeugte Tabelle anzeigen. Ich wüsste nicht, wie das einfacher gehen könnte. Im übrigen ist aus meiner Sicht die CPU auf mittlerweile 3 FPGA-Boards und mit doch recht umfangreicher Software getestet.
Josef G. schrieb: > Sven P. schrieb: >> Wie willst du oder irgendjemand den jemals debuggen? > > Wer die Logiknetze überprüfen will, kann mit dem Programm [...] Aber das ist doch genau der Punkt. Kein Mensch wird anfangen, sich durch irgendwie erzeugte Logiktabellen zu wühlen, um dann damit VHDL-Code(!!!) zu prüfen. Vor zwanzig, dreißig Jahren hätte ich das ja noch verstanden. Da musste man zwangsläufig Logik von Hand reduzieren und irgendwie in Gatter und Flipflops verpacken. Aber du benutzt doch schon VHDL -- der Witz an VHDL ist doch gerade, dass man eben nicht mehr händisch Logiknetze reduzieren muss. Stattdessen beschreibt man in lesbarer und nachvollziehbarer Form, wie sich die Schaltung verhalten soll. Und die Umformung in logische Gleichungen und deren Verteilung auf irgendwelche Gatter überlässt man der Synthese -- die kann das, wirklich, denn die ist genau dazu erfunden worden. > Ich wüsste nicht, wie das einfacher gehen könnte. Im übrigen > ist aus meiner Sicht die CPU auf mittlerweile 3 FPGA-Boards > und mit doch recht umfangreicher Software getestet. Es ginge einfacher, wenn du das Verhalten der Schaltung beschriebest, und nicht ihre Implementierung. So mit 'if' und 'case' und 'for' und so weiter. Es freut mich, dass diese CPU funktioniert und der Quelltext sieht schon irgendwie ästhetisch aus. Es ist aber objektiv Quelltext für die Katz, und das ist furchtbar schade. Man stelle sich vor, irgendeine Änderung vorzunehmen. Dann geht alles von vorne los, weil niemand die Monster-Schaltnetze versteht.
Jaja, die Sauerbierbrauerei. Hauptsache dem Braumeister schmeckt's . . . http://de.wikipedia.org/wiki/Autismus
Sven P. schrieb: > Aber du benutzt doch schon VHDL -- der Witz an VHDL ist doch gerade, > > dass man eben nicht mehr händisch Logiknetze reduzieren muss. > > Stattdessen beschreibt man in lesbarer und nachvollziehbarer Form, wie > > sich die Schaltung verhalten soll. Das ist etwas, was ich häufig beobachte: Ich hatte vor einigen Jahren mal mit Leuten von der Siemens zu tun, die sich einen abprogrammierten, die ganzen Logikfunktionen zu optimieren, sie in VHDL als UND-Oder umzusetzen und bis ins Detail "Verbesserungen" vornahmen, nur um am Ende bei jeder Änderung wieder alle abzuändern. Die hatten dort ein internes tool mit dem man VHDL grafisch erfassen konne, was zu einem gewaltigen Drahtverhau führte, bei dem niemand mehr durchblickte. Wenn da was geändert werden sollte. mussten tausende Striche weggenommen werden. dabei hätte man es durch einen sequziellen Dekoder, mit einfachen generate-Anweisungen auch zusammenbauen lassen können und sich das Ergebnis im real view in Xilinx ansehen können. Auch die händisch optmierten Schaltungen waren leicht zu toppen, wenn man nur die Syntheseconstraints richtig benutzt und die passende Niesche anvisiert. Aber die vorwiegend älteren Entwickler hatten das jahrelang so gemacht, also waren sie nicht davon abzubringen. Und, das ist gar nicht so selten!!! *********************************** Das Problem, dass mit den Selbsbauprojekten besteht, ist dagegen einfach das, dass niemand eine Weiterverwertung Dritter einkaluliert, wenn es beginnt, sowas zu machen - mich selber eingeschlossen. Das Resultat ist, dass man den halben Code umwerfen muss, um ihn so modular hinzubekommen, dass er für andere nutzbar wird und den Aufwand scheut man halt, wenn man nicht etwas dafür bekommt.
@ Falk & Klaus: Man muß sich für Sinn und Zweck dieses Projekts ja nicht unbedingt begeistern- sollte aber mit seinen Äußerungen stets über der Gürtellinie und nach Möglichkeit bei der Sache bleiben. Manch einer ist wohl auch auf die hier gezeigte Hobby-Leidenschaft neidisch !?
Ja sehr gut, du und deine weltfremden Weltverbesserungsideen können gerne in andere Foren verschwinden. Ich betrachte deinen Link auf ein anderes Forum mal als sowas wie eine Abschiedsbotschaft :-)
Argumente zum Hexadezimalsystem habe ich hier im Eröffnungs-Beitrag zusammengestellt: http://www.drillingsraum.de/room-forum/showthread.php?tid=3785
Josef, du bist ein sehr professioneller Troll! ;-)
Aber hey, wenn wir jetzt alle sedezimal rechnen, haben wir auf einmal genauso beknackte Einheiten, wie die Amis: 64 Cent = 1 Euro, 38E Meter = 1 Kilometer usw.
Sven P. schrieb: > Aber hey, wenn wir jetzt alle sedezimal rechnen, haben wir auf einmal > genauso beknackte Einheiten, wie die Amis: > > 64 Cent = 1 Euro, > 38E Meter = 1 Kilometer > usw. Dafür hat es einen schönen Nebeneffekt .. es macht jünger ;-)
Josef G. schrieb: > Da geht's weiter: > > https://www.mikrocontroller.net/topic/2297603 Nein! Der Tread ist gelöscht worden
Content B. schrieb: > Josef G. schrieb: >> Da geht's weiter: >> >> https://www.mikrocontroller.net/topic/2297603 > > Nein! Der Tread ist gelöscht worden Mein Link: /topic/297603 Dein Link: /topic/2297603 zz schrieb: > Josef G. schrieb: >> http://www.bomerenzprojekt.de > > Die websight ist offline Schon seit sehr langer Zeit. Nachfolger ist http://www.bo8h.de Und jetzt in diesem Thread bitte nicht mehr antworten.
zz schrieb: > Die websight ist offline Der Thread wurde ja auch sinnloser Weise nach 8 Jahren von Hans-Georg L. (h-g-l) wieder rausgeholt, nach 8 Jahren kann sich schon mal was geändert haben. Josef hat geschrieben, wo es weitergeht und deshalb kann das hier eigendlich zu.
Sinus T. schrieb: > nach 8 Jahren Josef hat wirklich schon acht Jahre seines Lebens mit diesem sinnlosen Projekt vergeudet. Man muss wirklich Mitleid mit ihm haben.
Josef G. schrieb: > Und jetzt in diesem Thread bitte nicht mehr antworten. Und weshalb? Hier ist es doch so schön und kuschllig.
Frank schrieb: > Josef hat wirklich schon acht Jahre seines Lebens mit diesem sinnlosen > Projekt vergeudet. Hobbys müssen nicht sinnvoll sein. Andere lassen kleine Züge auf dem Dachboden fahren, und stecken da wahrscheinlich mehr Geld und Zeit rein, als Josef in sein Projekt. Die werden in der Regel auch nicht schief angeguckt – warum auch?
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.