ZPU Evo Guide du Developpeur

English


Introduction

Bienvenue dans le Guide du Developpeur ZPU Evolution. Ce guide est ecrit pour les etudiants, les amateurs et les ingenieurs qui souhaitent comprendre, construire, modifier et etendre le processeur ZPU Evolution. Que vous suiviez un cours de microprocesseurs, appreniez le developpement FPGA ou exploriez la conception de CPU soft-core, ce guide vous accompagnera a travers tout, des concepts fondamentaux a la personnalisation avancee.

Le ZPU est un microprocesseur 32 bits base sur une pile, concu a lโ€™origine par ร˜yvind Harboe de Zylin AS. Le ZPU Evolution (Evo) est une version amelioree creee par Philip Smart qui ajoute des ameliorations de performance significatives, du caching, des instructions etendues et un riche framework System-on-Chip (SoC). Lโ€™ensemble du design est open source et implemente en VHDL pour la synthese sur les FPGAs Intel/Altera.

Ce que vous apprendrez

En travaillant avec ce guide, vous serez capable de:

  • Comprendre lโ€™architecture CPU basee sur pile et en quoi elle differe des conceptions basees sur registres
  • Apprendre comment le jeu dโ€™instructions ZPU fonctionne au niveau materiel
  • Configurer, construire et programmer des bitstreams FPGA pour plusieurs cartes de developpement
  • Ajouter de nouvelles instructions materielles a la CPU
  • Comprendre lโ€™architecture SoC incluant les controleurs memoire, UARTs, timers et gestion des interruptions
  • Ecrire, compiler et deployer des programmes C qui sโ€™executent sur le ZPU
  • Mettre en place des builds CI/CD automatises avec Jenkins et Docker

Prerequis

  • Connaissances de base en logique numerique
  • Quelque experience VHDL
  • Programmation C
  • Une carte de developpement FPGA (DE10 Nano, E115, CYC1000, QMV ou DE0 Nano)
  • Intel Quartus Prime Version 17.1.1

Partie 1: Comprendre l'architecture ZPU

Processeurs bases sur pile vs bases sur registres

La plupart des processeurs (ARM, x86, RISC-V) sont bases sur des registres: ils ont un ensemble fixe de registres nommes et les instructions specifient sur quels registres operer.

Le ZPU est un processeur base sur pile. Au lieu de registres nommes, il utilise une pile LIFO (Last-In-First-Out). Les operations travaillent implicitement sur les elements superieurs de la pile:

Pile avant ADD:         Pile apres ADD:
  โ”Œโ”€โ”€โ”€โ”€โ”€โ”                โ”Œโ”€โ”€โ”€โ”€โ”€โ”
  โ”‚  3  โ”‚ โ† TOS          โ”‚  7  โ”‚ โ† TOS (3+4)
  โ”œโ”€โ”€โ”€โ”€โ”€โ”ค                โ”œโ”€โ”€โ”€โ”€โ”€โ”ค
  โ”‚  4  โ”‚ โ† NOS          โ”‚ ... โ”‚
  โ”œโ”€โ”€โ”€โ”€โ”€โ”ค                โ””โ”€โ”€โ”€โ”€โ”€โ”˜
  โ”‚ ... โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”˜

Pourquoi une architecture a pile?

  1. Encodage dโ€™instructions minimal - Pas de champs de registres necessaires.
  2. Tres petite empreinte FPGA - Le decodeur est trivial.
  3. Cible de compilateur simple - Lโ€™evaluation dโ€™expressions se mappe naturellement aux operations de pile.
  4. Compromis - Les machines a pile sont typiquement plus lentes par operation, mais le systeme de cache du ZPU Evo atenue cela significativement.

Les cinq modeles de CPU

Model Logic Elements Performance Wishbone Best For
Small ~400 LEs Baseline No Minimum footprint applications
Medium ~600 LEs ~1.5x Small No Better performance, still small
Flex ~800 LEs ~1.8x Small No Good balance of size and speed
Evo ~2500 LEs ~3x Small Yes Maximum performance, full features
Evo Minimal ~1200 LEs ~2x Small Yes Evo with reduced instruction set

Partie 2: Structure du projet

Le layout du repertoire, les fichiers sources cles et la structure du projet sont identiques a la version anglaise.

Parties 3-4: Configuration du SoC et build des bitstreams

Les details complets de configuration (choix du modele CPU, configuration memoire, activation des peripheriques, reglage du cache Evo) et les instructions de build (utilisation du Makefile, Quartus directement ou Docker) sont identiques a la version anglaise.

Si vous voulez simplement un bitstream fonctionnel rapidement, utilisez le script de configuration automatise correspondant a votre plateforme (voir Configuration et build automatises juste en dessous). Il installe toute la chaine dโ€™outils (Intel Quartus Prime Lite 17.1 et, si necessaire, Docker), clone le depot, vous laisse choisir la carte et le CPU, et construit jusquโ€™a son terme โ€” aucune connaissance prealable des outils requise. Les workflows Makefile, Quartus direct et Docker qui suivent sโ€™adressent a ceux qui veulent piloter les outils a la main.

Configuration et build automatises (recommande)

Les scripts de configuration fournis installent tout le necessaire (Intel Quartus Prime Lite 17.1 et, si requis, Docker), clonent le depot si vous nโ€™etes pas deja dans un checkout, vous laissent choisir la carte cible et la variante de CPU, et construisent le bitstream FPGA jusquโ€™a son terme. Chaque script est autonome โ€” copiez uniquement le fichier correspondant a votre plateforme et executez-le. Ils ont ete verifies de bout en bout sur Windows (natif), macOS (Intel, via Docker) et Linux.

Script Plateforme Notes
setup_ZPU_windows.cmd Windows 10 / 11 Recommande sous Windows โ€” lanceur a double-clic; garde la fenetre ouverte et journalise dans setup_ZPU_log.txt. Installation native, sans WSL.
setup_ZPU_windows_native.ps1 Windows 10 / 11 Le script PowerShell sous-jacent (installe Git for Windows + Quartus 17.1 via winget / lโ€™installateur Intel).
setup_ZPU.sh Linux / macOS Quartus natif sous Linux; une image Docker Quartus headless sous macOS (Mac Intel uniquement โ€” Quartus est x86-64).
build_zpu.sh tous Wrapper de build portable. Relancez-le a tout moment pour reconstruire: ./build_zpu.sh [BOARD] [CPU].

Windows โ€” double-cliquez sur setup_ZPU_windows.cmd, ou depuis PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\setup_ZPU_windows_native.ps1

macOS / Linux:

chmod +x setup_ZPU.sh
./setup_ZPU.sh

Chaque script demande quelle carte et quelle variante de CPU construire (par defaut QMV / EVO) et, sauf sโ€™il est lance depuis un checkout, ou cloner le depot. A la fin, vous obtenez build/<BOARD>_<CPU>.sof (le bitstream de configuration FPGA) et un build/<BOARD>_<CPU>.rbf compresse. Cartes: QMV (par defaut), DE10_nano, DE0_nano, E115, CYC1000; CPUs: EVO (par defaut), EVO_MINIMAL, FLEX, MEDIUM, SMALL.

Pour reconstruire ensuite sans relancer la configuration (sous Gitย Bash Windows, faites dโ€™abord export PATH="/c/altera/17.1/quartus/bin64":$PATH):

./build_zpu.sh E115 EVO           # carte + CPU
./build_zpu.sh --list             # lister toutes les cartes / CPUs
ZPU_RTL_METHOD=docker ./build_zpu.sh QMV EVO   # forcer l'image Docker headless

Variables dโ€™environnement utiles: ZPU_REPO_URL (depot a cloner; par defaut le depot public https://git.eaw.app/eaw/zpu.git), ZPU_BOARD / ZPU_CPU (ignorer les invites), ZPU_RTL_METHOD=native|docker, ZPU_DIR (construire dans un checkout existant) et ZPU_QUARTUS_BIN (pointer vers un bin/bin64 Quartus existant).

Parties 5-6: Jeu d'instructions et ajout de nouvelles instructions

Les tables completes du jeu dโ€™instructions et le guide pas a pas pour ajouter de nouvelles instructions materielles sont dans la version anglaise.

Partie 7: L'ecosysteme logiciel -- IOCP, zOS et applications

Apercu des couches logicielles

La pile logicielle standard sur un systeme ZPU Evolution est:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚              Applications                          โ”‚
โ”‚  (ed, kilo, tbasic, mbasic, benchmarks,           โ”‚
โ”‚   vos propres programmes -- charges depuis SD)     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚         zOS -- Systeme d'exploitation              โ”‚
โ”‚  (Shell, systeme de fichiers, 80+ commandes)       โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚         IOCP -- Bootloader                         โ”‚
โ”‚  (Init materiel, boot SD, upload serie)            โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚         Materiel ZPU (FPGA)                        โ”‚
โ”‚  (CPU, BRAM, SDRAM, UART, SD, Timer, Interrupts)   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

La sequence de demarrage est: FPGA sโ€™allume -> IOCP sโ€™execute depuis le BRAM -> IOCP charge zOS depuis la carte SD -> zOS presente un shell -> lโ€™utilisateur execute des applications.

IOCP -- Le bootloader

IOCP est le premier code execute lorsque le ZPU sโ€™allume. Il est integre directement dans le Block RAM du FPGA pendant la synthese. Les niveaux de fonctionnalite vont de Full (~40 KB) a Tiny (~3-5 KB). Les details complets sont dans la version anglaise.

zOS -- Le systeme d'exploitation

zOS fournit un shell en ligne de commande, un support complet du systeme de fichiers, la gestion de la memoire et la capacite de charger et dโ€™executer des applications depuis la carte SD. Les details complets sont dans la version anglaise.

Parties 8-13: Sujets avances

Les sections completes sur le logiciel personnalise, lโ€™architecture SoC, la configuration specifique aux cartes, le CI/CD, le debogage et les ressources supplementaires sont dans la version anglaise.

Exercices pour etudiants

  1. Basique: Construire le ZPU Small pour votre carte. Connecter un terminal a 115200 bauds et interagir avec lโ€™IOCP.
  2. Intermediaire: Modifier zpu_soc_pkg.vhd pour changer la taille du BRAM.
  3. Intermediaire: Activer le controleur PS2 et connecter un clavier.
  4. Avance: Ajouter une instruction materielle SWAP.
  5. Avance: Porter le design sur une nouvelle carte FPGA.
  6. Expert: Implementer une nouvelle instruction etendue utilisant le mecanisme EXTEND.