Hallo Besucher, der Thread wurde 34k mal aufgerufen und enthält 51 Antworten

letzter Beitrag von Negan am

C16 FPGA projekt

  • Grüße.


    Eigentlich kennt man mich ja nur aus dem Amiga Bereich, doch liegen meine Computer-Wurzeln im C116.
    Wie alle alten Rechner spüren die Bauteile den Zahn der Zeit und daher möchte ich diesen Rechner (die 264-Serie) in einem FPGA nachbilden.
    Ähnliche projekte gibts ja schon: FPGA64, VIC20 und der Minimig.


    Einen solchen Minimig (FPGA Platine) ist hier im Einsatz und erfreut mich immer wieder. Ebenfalls das, was man generell mit einem FPGA
    anfangen kann! Die Portationen der genannten Rechner läuft gut bis sehr gut auf der kleinen Platine, daher sollte es mit einem C16 ebenso sein.


    Meine Frage an das Forum:
    Wer hätte definitiv Interesse an einer C16 FPGA Reimplementation?


    Jeder(!) der Interesse, Tips und Erfahrung in solch einer Umsetzung hat, ist willkommen!
    Die Originalhardware (C116 und Plus/4) steht hier funktionsfähig für Messungen und sinstiges zur Verfügung. Ebenso habe ich eine Liste aller TED Register und Funktionen. Daher müsste es gehen!
    Mein persönliches Ziet ist: TOM16 auf einer solchen Reimplementation zu spielen. Also ran ans Werk :)


    Schöne Grüße
    boing4k

  • Ich bin Feuer und Flamme. Tom16 aufm FPGA -> Bin ich dabei.


    Obwohl ich auch begeistert wäre, Ersatz-Chips auf CPLD bzw. FPGA-Basis zu haben. Dann wäre endlich das Ersatzteilthema vom Tisch. Vielleicht fallen die ja als Nebenprodukt ab?!

  • Wie gut das ich anscheinend nicht der Einzige bin, der den C16/116 erhalten möchte :)


    DMC
    Wenn ein funktionierender TED IP-Core erst mal vorhanden ist, kann man diesen sicher auf einen eigenen FPGA porten, welcher dann in der echten Hardware als Ersatz läuft. Ob CPLD's dafür ausreichen, muss man schauen, das hängt von der Komplexität des TED Core ab.


    Sid
    Nun ich muss auch ganz sicher noch viel üben. Verilog und VHDL sind mir noch nicht so ganz vertraut (Verilog liegt mir definitiv mehr) und eine solche Neuerschaffung ist auch neu für mich. Bisher habe ich nur bestehende Projekte auf den Minimig portiert, das zumindest funktioniert immer einfacher und sicherer.


    Der Anfang sollte ein stabiles TED konformes Videotiming sein. Dann nach und nach die Register und deren Funktionen einbauen und natürlich schauen das sie wie im Original funktionieren. Jede Info oder Mitarbeit ist willkommen. Sobald es erste Sourcen gibt, werde ich diese veröffentlichen (als Alpha-, Beta-, Pre- und Full-releases).

  • Die erste GUTE Info ist:
    Der Basistakt auf dem Minimig von 4.43357MHz multipliziert mit 4.0 ergibt ziemlich genau die Basisfrequenz im C16: 17.73428MHz!
    Das ermutigt mich doch sehr! Denn ein stabiles Grundtiming ist für eine Umsetzung immer von Vorteil.


    Es besteht eine Differenz zum echten Plus/4 Oszillator von 0.00167MHz. Diese werde ich erst mal als nichtig hinnehmen. Auf dem C16 gab es nie solche Floppy-Speedloader wie beim C64, daher muss das Timing des IEC Bus nicht derartig genau sein.

  • Hallo boing4k,


    von der Idee her waere ich auch dabei! Ich hatte auch erste Experimente an meinem C16 vorgenommen indem ich mit einem kleinen LogicPort Buszyklen der CPU gemessen hatte.Ich hatte hier,einige Beitraege weiter unter,einen Thread dazu angefangen.Ich habe nicht aufgegeben aber mir wurde klar,dass mein VHDL Wissensstand noch nicht so weit ist sowas zu stemmen.Das technische TED Manual habe ich von zimmers heruntergeladen.Es fehlen dort ausgerechnet die Seiten,welche das video timing beschreiben.Du musst auch bedenken,dass der TED die CPU mit verschiedenen Frequenzen taktet.Einmal 1/10 und einmal 1/20 des Haupttaktes.Es gibt sehr viele Detais wenn man den TED Taktzyklus genau nachbilden will.
    Ich mache weiter,habe mich aber erstmal auf kleinere Teilprojekte beschraenkt um VHDL zu lernen.Leider habe ich z.Z alles abgebaut und frickle bischen mit meiner 2600 Konsole rum.
    Wenn das allerdings hier ernst wird,koennte ich das alles wieder aufbauen und z.B Timing Diagramme vom LogicPort liefern ? Ich habe noch nicht verstanden,wie die Arbitierung zwischen CPU und TED funktioniert.Wann schaltet der TED den ADDR_BUS auf HIGH_Z und erlaubt der CPU zugriff ? Muss irgendwie ueber PHI, BA, AEC ... gehen.
    Ist viel Forschung.Ich werde aber den Fortschritt hier beobachten und hoffentlich auch Zeit und Lust haben etwas reales dazu beizutragen. :dafuer:


    Gruesse

  • Evillord68
    Wie man sieht poste ich auch noch nicht so viel, doch das kann/wird mehr werden. Die 8Bit Welt ist nach dem Plus/4 an mir vorbei gelaufen, doch nicht davon gekommen :D


    Nichtsnutz
    Eine Zusammenarbeit wäre sehr angenehm. Die nachbildung der CPU ist momentan noch eins der größeren "Probleme" für mich. Vielleicht kann man den 65xx.vhd bzw. cpu_6510.vhd für den C16 anpassen.
    Der TED ist auch nicht ohne, das ist klar. Aber Schritt für Schritt kann man sich rantasten. Die verschiedenen Taktraten der CPU ab gewissen Zeilen (Rahmen oder Textfeld) entsprechend zu teilen ist das kleinste Problem, das sind nur ein paar Codezeilen.
    Die Buszugriffe muss man austesten. Im FPGA selbst spielt der genaue Vorgang erst mal keine Rolle, doch sollte es schon so echt wie möglich sein, um den TED Core evtl. in der echten Hardware betreiben zu können. Aber alles nacheinander, erst mal muss man "was sehen", das ist psycho. wichtig ;)


    Erster Erfolg: Der Minimig FPGA produziert einen Takt von 35.46856MHz am Messausgang [(4.43357*32)/4], damit ist die Basisfrequenz schon mal gesichert. Für einen VGA Betrieb (Scandoubler) muss der Basistakt doppelt so hoch sein. Schliesslich wollen wir den FPGA_C16 auch am TFT betreiben. Der Core selbst wird dann mit halber Frequenz (17.73428MHz) betrieben.
    Als nächstes werde ich die grundlegenden TED Signale im eigenen TED.v Modul aufreihen. Es wird evtl. Zeit die Messgeräte wieder auszupacken.

  • Für die Minimig Umsetzung braucht man grundlegend auch keine Zusatzhardware.
    Einzig um eine echte Floppy (oder SD-Nachbau) über den IEC Bus zu betreiben, müsste man sich ein Adapterkabel mit 4 Leitungen bauen. Das geht sehr einfach und damit kann man ebenso den FPGA64 und VIC20 Core mit einer Floppy betreiben.
    Speedloader habe ich beim C116 nie genutzt, das 1551 parallel Floppy war eigentlich ausreichend "schnell". Beim 1541 Betrieb sieht das natürlich wieder anders aus... doch die meissten Games haben eh nur knapp 16KB oder weniger.


    Momentan baue ich das TED Modul grundlegend auf.
    Etwas bedenklich bei der ganzen Sache ist, dass evtl. der Platz im FPGA knapp wird. Nicht wegen der Schaltungen sondern wegen den ROM Image's. Diese müssen direkt in den Core als Blockram compiliert werden. Beim FPGA64 ist es schon sehr knapp und der RAM musste extern ins S-RAM ausgelagert werden.
    Der C16 hat 32KB an ROM's, dann noch die 16KB RAM, somit 48KB Blockram müssten genutzt werden. Evtl. muss auch hier der RAM ausgelagert werden. Falls die ROM's nicht in den FPGA passen, kann man dieses Projekt auf dem 400K-Gate Minimig nicht so ohne weiteres betreiben. Aber mal sehen. Den TED kann man trotzdem grundlegend nachbilden :)

  • Hi Dadys_Toy :)


    Ja es gibt einige Portationen, die auf dem Minimig laufen. Solange der FPGA genug Platz bietet, kann man alle möglichen Schaltungen simmulieren.
    Der VIC20 ist sehr klein und der gesamte Rechner läuft komplett im FPGA, kein externer Baustein (RAM, CPU etc.) wird benutzt.
    Beim FPGA64 wird wegen dem begrenzten Platz der IC7 für die 64KB RAM (nur die unteren 8Bit) genutzt, der Rest des C64 läuft auch hier komplett im FPGA.


    Wegen ungeklärten Copyrights kann ich nur einen Link zum VIC20 angeben:
    VIC20 portierung von Jan D. (ganz unten).
    Die enthaltene "vic20.bin" muss in "Minimig1.bin" umbenannt und auf SD-Karte kopiert werden. Das Original bitte zuvor umbenennen oder sichern!
    Der IEC Bus steht an den Spare-I/O Pinnen zur Verfügung, so wird es auch beim C16 Project sein.

  • *ARGH* Für Neulinge ist das ISE Webpack echt stresshaltig. Der "kleine" Compiler von ca. 6GB hat doch viele Bugs.
    Manchmal kann man seinen Source nicht übersetzen, weil irgend welche "wirren" Fehler wegen angeblich unzugewiesenen Ausgängen, nicht mehr vorhandenen Signalen oder sonstigen Meldungen abbricht.
    Eh man dann mit dem Hammer in den PC schlägt, sollte man das ganze Project UND das ganze Programm schliessen. Nach einem Wideraufruf geht es meisst. Falls auch dann nicht, muss man tatsächlich alle automatisch generierten Dateien aus dem Projektordner löschen und das Project neu erstellen!!


    Sowas ist für nicht standgafte Profis in HDL coding echt frustrierend. Man sucht andauernd nach möglichen Fehlern in der Zuweisung oder sonstigen Denkfehlern. Doch in Wirklichkeit ist alles OK und nur der Compiler spinnt sich aus diversen Resten solche Fehler zusammen.
    Jakub hat mir das auch schon bestätigt. Im Gegensatz zu mir, ist er sich seiner Programmierung weitaus sicherer und merkt schnell, dass es nicht am Code liegt. Ich habe eben bestimmt 20 Minuten hin und her geschrieben, alles ohne Erfolg und mit ziemlichem Frust.
    Dann die besagte Reinigung der Dateien durchgeführt und schon lief es wieder... Zumindest ist das wieder aufbauend :)


    Zum Thema:


    Die Core Clock von 17.7334 MHz liegt am TED Module an. Nun versuche ich daraus erst mal ein stabiles PAL Bild mit den entsprechenden Sync's zu gestalten. Bestimmt müssen da noch Teiler eingebaut werden, denn 17MHz sind schon recht viel und ich weiss nicht mal was genau der TED Chip intern alles damit anstellt. Die Messungen mit dem Frequenzzähler und Oszilloskop werden der Sache wohl etwas Licht bringen.


    Wenn jemand Details zum TED hat, wäre dies hilfreich! Für jede Info ist das F16 Project dankbar :)

  • Gibt es schon... nennt sich fpga64. Der Core läuft ebenfalls auf dem Minimig, doch gibt es noch ein paar Einschränkungen:
    - Das Timing ist nicht angepasst
    - Die Copyrights wegen der enthaltenen ROM Image ist nicht geklärt
    - Die Sourcen lassen sich mit dem neuen ISE nicht mehr übersetzen (ich weiss nicht warum)


    Generell aber funktioniert der FPGA64 und man kann Einzeldate Spiele + Demos laden und starten. Der SID hat jedoch keine Filter und Speedloader funktionieren wegen dem ungenauen Timing nicht.

  • @boing4000: Finde ich klasse, was Du vor hast. Hier noch ein Tipp für die Erzeugung verschiedener Takte aus einem Basistakt. Du sollltest darauf achten, dass der Skjew und Latency eng genug liegen und auch der Jitter der einzelnen Takte zueinander möglichst nahe 0 ns liegt. Je schlechter die Werte, desto wahrscheinlicher sind Probleme mit dem Timing. Sofern der FPGA das erlaubt, legst Du am besten Deine Takte auf im FPGA verfügbare Clock-Trees. Solch ein Modul nennt man übrigens Clock-Fab. Sowas entwickle ich gerade für etwa 20 Takte am Ausgang für einen komplexen ASIC. Sofern es meine Zeit zulässt unterstütze ich gerne bei Fragen zum Thema VHDL. Verilog ist nicht so ganz mein Ding.

  • Vielen Dank für Deine Tipps Schmitti, das werde ich berücksichtigen.
    Aus dem Minimig weiss ich, dass eine kleine Unsabuerkeit in den Takten viel Ärger produzieren kann. Der Spartan3 (nicht e) hat leider nur 4 Clockmodule welche man miteinander verknüpfen kann. Daher ist die Auswahl nicht so gross und man muss mit Laufzeiten rechnen.
    Doch im C16 vermute ich keine sehr extreme Taktabhängigkeit wie z.B. im Amiga zwischen Customchips und CPU. Daher sollte es schon mit 1-2 DCM's gehen. So zumindest ist der FPGA64 und VIC20 umgesetzt, beim FPGA64 liegt das Problem ehr am korrekten multi+teiler Verhältnis der Basisfrequenz. Der Core ist auf 50MHz ausgelegt und diese sind nicht so genau aus den 4.433MHz erzeugbar.
    (PS: Ich bin ja schon froh, dass mein eigenes Clockmodul funktioniert ;))


    In meinem Fall ist Verilog die passendere Sprache, mit VHDL komme ich nicht so zurecht. Auch die sehr ausführliche Schreibweise ist etwas, was mir nicht so liegt. Obwohl der VIC20 + FPGA64 in VHDL geschrieben ist, kann man dort gewisse grundlegende Dinge "abschauen". Ebenso vom Minimig core, wenn es um z.B. den PAL/VGA Bilsaufbau und Syncerzeugung geht.

  • Hallo boing4K,


    Zitat

    Wenn jemand Details zum TED hat, wäre dies hilfreich! Für jede Info ist das F16 Project dankbar


    Ich denke mal dass Dir diese scans bekannt sind.Das ist das einzige "offizielle" was ich zum TED gefunden habe.Leider fehlen die Seiten mit den Informationen zum Videotiming!


    http://zimmers.net/anonftp/pub…ramming/manual/index.html


    Man kann allerdings sehr viele Informationen ueber das video timing daraus entnehmen.Bei der TED Registerbeschreibung am Ende steht z.B dass der horizontale Zaehler von 0 bis 455 zaehlt,also 456 Takte.Vertikal werden 312 Zeilen gezaehlt.64us PAL Zeilenlaenge / 456 Takte = 140.35ns => 7.125MHz.Da diese Frequenz aus den 17.73 nicht so leicht hervorgeht,denke ich mal dass da 7.09MHz benutzt werden.(4.433 * 4/5 = 3.54 * 2 = 7.09).Das ergibt zwar eine etwas laengere Zeile (64.2us), wird wohl noch toleriert werden !? Zusammen mit den Informationen auf den Seiten 11/12 koennte man schon erste "Bildversuche" machen...


    Gruesse.

  • Hallo Boing4000!
    Lange nichts von dir gehört. Nochmal Danke für deine Hilfe!
    Soll das jetzt ein weitere Core für den Minimig werden oder soll das irgendwann auch in einer eigenen Hardware enden? Um nicht dauernd was neues zu kaufen, wäre mir ein "einfacher" Core lieber.


    Ich muss leider mal etwas OT werden, da ich gerade ein neues Projekt plane -> Brotbook goes MinimigBook! :)


    1. Welche Komponenten vom Minimig (speziell der SD-Slot, Joy-Ports, ...) werden denn von den unterschiedlichen Cores benutzt? Anders gefragt: Kann man vom C64, VC20 und zukünftig vom 264er Core auf eine SD-Karte zugreifen als wäre es ein SD2IEC oder dergleichen (eine 1541U zusammen mit C64-Core im Minimig wäre ultimativ! ;) ).
    Auch ne Idee: Gibt es schon eine 1531-Maus-Emulation für den PS2-Maus-Anschluß?


    2. Gibt es beim Minimig die Möglichkeit eines S-Video-Out? Wenn nein: Gibt es eine Möglichkeit nachträglich ein S-Video-Signal zu erzeugen und über irgend eine Buchse ausgeben zu lassen? Gilt die Antwort grundsätzlich oder nur für bestimmte Cores?


    3. Gibt es jemanden, der mir einen Minimig gegen Einwurf kleiner Münzen löten könnte? Problem ist, dass ich das Teil nicht selber löten kann aber für mein MinimigBook auch nicht alles bestückt haben darf (wegen Platzmangel werden die Ports/Buchsen wohl per Kabel mit der verbunden befestigt und nicht direkt aufgelötet). Auslöten ist ja noch schlimmer als Löten und ich will keinen Minimig versauen, indem ich beim Auslöten der Buchsen etwas versaue.

  • Nichtsnutz
    Das sind wirklich sehr hilfreiche Infos! Diese Webseite mit den ganzen Scans war mir bisher nicht bekannt, doch nun sieht das schon viel durchsichtiger aus :)
    Die Taktgenerierung im TED selbst kann sich als etwas komplexer zeigen, doch mit Hilfe eines 2. oder 3. DCM sollte das schon machbar sein. Irgendwie schafft es der TED ja aus den eingehenden 17.7334MHz alle anderen Takte zu generieren. Auch wenn man diverse Zähler dafür nimmt, sollte es klappen.
    Jetzt saug ich mir erst mal die ganzen Scans auf Platte, damit man sie immer griffbereit hat :)


    Cyberdyne
    Ja lange ist es her seit der Doreco mit den FPGA Spielereien. Seitdem habe ich schon etwas mehr Übung und brauche nicht mehr 10 Versuche bis ein Core compiliert wird ;). Ebenso ist der Minimig Core um viele Schritte weiter gekommen und mit dem ARM Controller (PIC Ersatz) ein echter Knaller geworden.


    Die alternativen Core wie FPGA64 und VIC20 können bisher nicht auf die SD-Karte zugreifen. Das liegt in erster Linie an der PIC/ARM Firmware. Diese müsste extrem angepasst werden um auf z.B. .d64 Dateien zugreifen zu können. Ebenso muss im FPGA eine passende Floppy (z.B. 1541) komplett nachgebildet werden. Der PIC/ARM stellt auch im Amiga nur die Hardwarebrücke zur Verfügung und ist quasi Blocklaufwerk (Floppy oder Festplatte). Die restliche Logik ist im FPGA, daher muss es beim C64 ebenso sein.
    Bisher kann man über die 3 verfügbaren Spare-I/O Pinne den IEC Bus zu einem echten CBM 1541 (SD-)Floppy etc. leiten und benutzen. Also auch Drucker usw. werden unterstützt.
    Sollte der Minimig schon auf 4MB S-RAM aufgerüstet sein, funktioniert der IEC Bus nur beim VIC20 Core. Im FPGA64 wird durch die Huckepacklösung der obere S-RAM je nach IEC Daten mit angesprochen und verursacht Systemabstürze.


    Eine S-Video und C64-Mausunterstützung ist derzeit nicht vorhanden. Über S-Video hatten wir uns ja schon unterhalten, doch fehlen mir die Kenntnisse und Möglichkeiten zur Umsetzung. Evtl. geht es im FPGA, doch bin ich mir da nicht sicher. Die Mausunterstützung sollte machbar sein, aber auch hier mit Vorbehalt!


    Allgemein möchte ich den F16 (C16 FPGA Core) offen halten. Er soll für alle transparent sein. Lauffähig auf dem Minimig Board, mit Anpassung auf einem beliebigen FPGA Board oder auf einer eigenen FPGA Platine als TED Ersatz.
    Daher basiere ich auf den eingehenden Takt von 17.733MHz und versuche alle weiteren Takte im FPGA (TED Modul) zu erzeugen. Natürlich kann das jeder für seine Bedürfnisse anpassen, dank open source ist das ja möglich :)



    @Alle
    ich habe einen FTP Zugang auf meinem Server eingerichtet:
    Host: asc.dyndns.org
    Port: 21
    User: f16
    Pass: C16FPGA (so wie es dort steht)


    Die Verzeichnisse können wie folge genutzt werden:
    download: Hier liegt mein eigener Source, dort sind nur Leserechte vorhanden
    share: Hier können Sourcen austauschen/bearbeiten und neue abgespeichert werden (Schreibrechte!)


    Der aktuelle Stand liegt unter /download/f16_2009-10-12 und kann genutzt werden. Falls Verbesserungen etc. gemacht werden, können diese unter /share/f16_2009-10-12 oder dem aktuellen Datum (einfach neues Verzeichnis anlegen) abgelegt werden.


    Jede Idee, Info und Mitarbeit wird diesem Project bestimmt gut tun :)