# Zilog Z80000

Le Z80000 est le microprocesseur 32 bits lancé par la société Zilog en 1986. Sa version CMOS était le Z320.

## Éléments d'architecture

Un sous-ensemble de l'architecture du Z80000 était implémenté dès 1979 dans le processeur 16 bits Z8000, ce qui permettait d'utiliser avec un Z80000 les périphériques conçus pour le Z8000, tels que le contrôleur de communication série Z8030 et le contrôleur DMA Z8016. Le Z80000 pouvait exécuter un code compilé pour le Z8000, mais pas d'un Zilog Z80, et n'était donc pas compatible avec l'architecture x86 d'Intel. Remarquablement économe en silicium (à peine 91 000 transistors), il était conceptuellement assez en avance sur ses concurrents d'Intel mais sa commercialisation échoua complètement en raison des retards pris pour le finaliser (annoncé dès 1983, il ne fut mis sur le marché qu'à partir de 1986), des difficultés à fiabiliser son prédécesseur Z8000 qui avait été commercialisé prématurément avec de nombreux bugs, et surtout, de son incompatibilité avec les processeurs x86 d'Intel qui étaient l'architecture de référence.
Les caractéristiques avancées du Z80000 étaient les suivantes :
* L'exécution des instructions était entièrement pipelinée sur six niveaux, permettant un certain parallélisme dans l'utilisation des ressources câblées du circuit :
* INSTRUCTION FETCH :
** Incrémentation du compteur ordinal (pointeur d'instruction).
** Comparaison des étiquettes (tags) du cache intégré.
* INSTRUCTION DECODING :
** Lecture dans le cache d'instructions.
** Génération des micro-instructions.
* ADDRESS CALCULATION :
** Calcul des adresses logiques.
** Comparaison des étiquettes du cache de conversion d'adresses (Translation Lookaside Buffer).
** Détermination des adresses physiques à partir du cache de conversion d'adresses.
* OPERAND FETCH :
** Comparaison des étiquettes du cache intégré.
** Lecture des données cachées.
* EXECUTION :
** Lecture des registres.
** Calculs arithmétiques et logiques.
** Écriture des registres.
* OPERAND STORE :
** Mise à jour des indicateurs binaires.
** Écriture des données en cache.
** Écriture des données en mémoire.
* Comme le Z8000, ce processeur pouvait fonctionner selon un mode système et un mode normal (contrôlés par le bit #14 du FLAGS & CONTROL WORD) afin d'isoler les applications des fonctions du système d'exploitation. Seuls les codes s'exécutant en mode système pouvaient accéder aux fonctions d'entrée/sortie et aux registres de contrôle, ainsi qu'à l'espace mémoire en mode système. Une pile séparée pour les modes système et normal sécurisait encore davantage l'architecture.
* Le Z80000 utilisait des adresses logiques sur 32 bits, lui permettant d'adresser jusqu'à 4 Gio de mémoire vive. La conversion des adresses logiques en adresses physiques était gérée par une unité de gestion mémoire intégrée qui supportait également la pagination de la mémoire vive en pages de 1 Kio. Trois formats d'adressage pouvaient être sélectionnés à l'aide de deux bits du FLAGS & CONTROL WORD (bits #15 Étendu/Compact et #10 Linéaire/Segmenté) :
* Compact : un espace d'adressage uniforme de 64 Kio sur 16 bits équivalent au mode non-segmenté du Z8000
* Segmenté : un espace d'adressage segmenté de 2 Gio sur 32 bits, et non 4 Gio car le bit de poids fort de l'adresse logique était utilisé pour spécifier la taille du segment :
** ou bien 32 768 segments de 64 Kio avec déplacements sur 16 bits
** ou bien 128 segments de 16 Mio avec déplacements sur 24 bits
* Linéaire : un espace d'adressage uniforme de 4 Gio sur 32 bits
* Le banc de registres comprenait seize registres généraux de 32 bits qui pouvaient être utilisés comme accumulateurs, index ou pointeurs en mémoire. Deux autres registres (FRAME POINTER et STACK POINTER, respectivement pointeurs de cadre et de pile) étaient utilisés pour chaîner les appels de procédures avec les instructions CALL, ENTER, EXIT et RETURN. Un registre 32 bits était utilisé comme pointeur d'instruction tandis qu'un registre 16 bits contenait le mot d'état machine et les indicateurs binaires (FLAGS & CONTROL WORD), qui étaient sauvegardés implicitement lors des interruptions et des trappes. Neuf autres registres spéciaux étaient utilisés pour contrôler l'état du processeur, la configuration système et la gestion de la mémoire.
* Les seize registres généraux 32 bits (RR0, RR2 .. RR28, RR30) pouvaient être accédés comme huit registres 64 bits (RQ0, RQ4 .. RQ24, RQ28). Les huit premiers registres généraux 32 bits (RR0, RR2 .. RR12, RR14) pouvaient également être accédés comme seize registres 16 bits (R0, R1 .. R14, R15), dont les huit premiers (R0, R1 .. R6, R7) pouvaient à leur tour être accédés comme seize registres 8 bits (RH0, RL0, RH1, RL1 .. RH6, RL6, RH7, RL7).
* Un cache associatif de 256 octets structuré en seize blocs de 16 octets était intégré au circuit du processeur et servait de cache de niveau 1 à la fois pour les instructions et les données.
* L'EXTENDED PROCESSING ARCHITECTURE était notamment conçue pour gérer une unité de calcul en virgule flottante Zilog Z8070.
* Le Z80000 était conçu pour supporter les configurations multiprocesseurs, à l'aide d'un registre dédié (le HARDWARE INTERFACE CONTROL REGISTER) qui permettait de spécifier certains aspects de la configuration matérielle environnant le Z80000 tels que la cadence d'un processeur, sa largeur de bus et le nombre d'états d'attente par défaut.