mikrocontroller.net

Forum: Projekte & Code iceZ0mb1e - TV80 System on Chip für iCE40 (yosys + sdcc)


Autor: Franz N. (abnoname)
Datum:
Angehängte Dateien:

Bewertung
4 lesenswert
nicht lesenswert
Hi,

hier mal ein kleines Projekt von mir: 
https://github.com/abnoname/iceZ0mb1e

Es handelt sich um ein FPGA SoC (System on Chip), welches 100% auf open 
source Komponenten (nur copyleft Lizenzen) und Toolchains basiert.

Das Makefile baut folgendes:
- Firmware in C mit SDCC
- Hardware Design mit yosys/arachne-pnr

Als Targets werden folgende Systeme unterstützt:
- Lattice iCE40 HX8K
- Lattice iCE40 UltraPlus 5k 
(http://gnarlygrey.atspace.cc/development-platform.html)

Das SoC hat zur Zeit folgende Komponenten:
- TV80 (Z80 CPU)
- 8kB ROM
- 8kB SRAM
- UART
- GPIO
- i2C Master
- SPI Master

Die Demo Firmware steuert ein SSD1306 OLED per i2C an und liest einen 
SPI Flash, sowie eine i2C RTC aus. Die Diagnoseausgaben kommen über 
UART.

Die Installation der Toolchains ist in der Readme beschrieben.

VG
Franz

Autor: W.S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und?

Welches ist der Zweck des ganzen? Nur um einen Soft-Z80 zu 
demonstrieren?

Wenn schon, dann hätte ich eher an einen kompletten 
ZX-Spectrum-Nostalgienachbau gedacht.

W.S.

Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Wenn schon, dann hätte ich eher an einen kompletten
> ZX-Spectrum-Nostalgienachbau gedacht.
Mag sein, aber das wäre nix Neues:
https://github.com/sorgelig/ZX_Spectrum-128K_MIST

Autor: Philipp Klaus K. (Firma: Albert-Ludwigs-Universität) (pkk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Franz N. schrieb:
> - UART

Ist der Softwareseitig mit einem historischen Zilog-UART kompatibel?

Ich würde vorschlagen, auch noch einen Timer mit ins SoC zu nehmen.

Philipp

Autor: Philipp Klaus K. (Firma: Albert-Ludwigs-Universität) (pkk)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wäre es leicht möglich, die Grenze zwischen ROM und RAM zu verschieden. 
10 KB ROM bei 6 KB RAM würden mir eher zusagen (ideal wären 32 KB ROM, 
aber dazu ist der HX8K wohl zu klein).

Wenn man auf mehr ROM käme und mit Timer wäre das perfekt für mich, um 
Benchmarks (Whetstone, Dhrystone, etc) darauf auszuführen, unter 
Verwendung ausschließlich freier Software. Und soweit ich sehe, ist die 
nötige Software sogar schon in Debian enthalten, was es noch einfacher 
macht.

Um code size / speed regressions in SDCC zu vermeiden habe ich ein paar 
Skripte geschrieben, die solche Benchmarks mit verschiedenen 
SDCC-Versionen kompilieren und ausführen (das ergibt dann solche Graphen 
wie im Anhang).

Bisher wird das nur für das stm8- und mcs51-Backend gemacht. Für z180 
hatte ich eigentlich vor ein Z180-Stamp Modul zu verwenden (die Platine 
liegt noch unbestückt herum). Aber dein Projekt dürfte eine deutlich 
einfachere Lösung bieten, dann halt für das z80-backend.

Philipp

P.S.: Wie kann ich das erste Bild (das ohne Beschriftung der x-Achse) 
löschen?

: Bearbeitet durch User
Autor: Viktor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Philipp Klaus K. schrieb:
> Aber dein Projekt dürfte eine deutlich
> einfachere Lösung bieten, dann halt für das z80-backend.
Du benchmarkst damit aber den T80 (bzw. hier den TV80)und dessen 
Speicheranbindung. Ist prinzipiell auch o.k. hat aber nicht mehr 
unbedingt viel mit den Z80 zu tun.

@Franz: Wie schnell (MHz) kann das Soc auf dem ice40 eigentlich rennen?

Autor: Philipp Klaus K. (Firma: Albert-Ludwigs-Universität) (pkk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viktor schrieb:
> Philipp Klaus K. schrieb:
>> Aber dein Projekt dürfte eine deutlich
>> einfachere Lösung bieten, dann halt für das z80-backend.
> Du benchmarkst damit aber den T80 (bzw. hier den TV80)und dessen
> Speicheranbindung. Ist prinzipiell auch o.k. hat aber nicht mehr
> unbedingt viel mit den Z80 zu tun.

Laut Autor des TV80 gilt: "The TV80 is a Verilog implementation of a 
microprocessor that approximately matches the cycle-to-cycle behavior of 
the Zilog Z80."
Das ausreichen, damit deutliche Verbesserungen / Verschlechterungen bei 
Benchmarkscores sich bei Z80 und TV80 gleichermaßen zeigen.

Beim mcs51-Backend verwende ich auch einen SiLabs C8051, keinen 
originalen Intel 8051.

Philipp

Autor: Franz N. (abnoname)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Wenn schon, dann hätte ich eher an einen kompletten
> ZX-Spectrum-Nostalgienachbau gedacht.
Während du denkst, schaffen andere etwas... Der Klassiker in diesem 
"Forum". Es gibt hunderte FPGA Retro Rechner - was will ich da nochmal 
aufgießen?

Ziel war wie im Text beschrieben einen minimalistischen SoC mit 100% 
freier Toolchain und Sourcen zu haben. Kompatibilität war egal -> C HAL. 
Die Umgebung hier liefert vom C+Verilog bis zum FPGA Bitstream alles aus 
open source Technik. Dazu sollte alles copyleft lizensierbar sein. Navre 
und Co sind GPL.

Hier ist ein SoC mit Risc V. Da kommt auch alles offen daher: 
https://github.com/cliffordwolf/icotools/tree/master/icosoc aber das ist 
ne andere Liga.

Philipp Klaus K. schrieb:
> Ist der Softwareseitig mit einem historischen Zilog-UART kompatibel?
Nein, derzeit ist das die UART16540 aus dem TV80 Paket.
> Ich würde vorschlagen, auch noch einen Timer mit ins SoC zu nehmen.
Kommt noch.

Philipp Klaus K. schrieb:
> Wäre es leicht möglich, die Grenze zwischen ROM und RAM zu verschieden.
> 10 KB ROM bei 6 KB RAM würden mir eher zusagen (ideal wären 32 KB ROM,
> aber dazu ist der HX8K wohl zu klein).
Man kann derzeit nur die Adressbusbreiten für die Speicher ganzzahlig 
konfigurieren. Mit dem Ulraplus gibt es dedizierten internen RAM. Da ist 
mehr als im HX8K möglich.

Viktor schrieb:
> @Franz: Wie schnell (MHz) kann das Soc auf dem ice40 eigentlich rennen?
Wie schnell habe ich noch nicht probiert. Momentan läuft das auf allen 
Boards mit 12MHz.

VG
Franz

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.