E8BC : PIO

Les entrées sorties = I/O (Input/Output) ont été repensées sous forme d’une puce PIO (Parallel I/O) qui contient ses propres registres mémoires adressables. Cette puce prend en entrée une adresse, ainsi qu’un signal de contrôle RD (read) ou WR (write). On a donc accès à 8 Input et à 8 Output qui vont de l’adresse 0 à 7.
L’accumulateur (registre A) est toujours la source (Output) ou la destination (Input).

Le dépôt du projet : https://github.com/CodingPat/E8BC/

Le fonctionnement du PIO

PIO_01

Sur la gauche on constate que les 3 bits les moins significatifs de l’adresse (16 bits) permettront de sélectionner un des 8 registres.

Sur la droite, un signal permet de déterminer si un registre est sélectionné en écriture.

PIO_02

Sur la gauche, on choisit un registre en lecture.

Sur la droite, on choisit un registre en écriture.

 PIO_03

Sur la mainboard des inputs/outputs permettent de visualiser le résultat.

Les instructions

OUT M = opcode D3

Le microcode envoie les signaux suivants, qui correspondent à 5 cycles machine :

ROM_RD, IR_WR (cycle 1 = lire instruction)
COUNT_INC (cycle 2 = incrémenter le compteur ROM)
ROM_RD,LO_WR (cycle 3 = placer le contenu de la rom dans le registre d’adresse LO = 8bits)
IO_RD,A_WR (cycle 4 = placer le contenu de l’input sélectionné à l’adresse précédente dans l’accumulateur)
COUNT_INC (cycle 5 = incrémenter le compteur ROM)

IN M = opcode D7

Le microcode envoie les signaux suivants, qui correspondent à 5 cycles machine :

ROM_RD, IR_WR (cycle 1 = lire instruction)
COUNT_INC (cycle 2 = incrémenter le compteur ROM)
ROM_RD,LO_WR (cycle 3 = placer le contenu de la rom dans le registre d’adresse LO = 8bits)
A_RD,IO_WR (cycle 4 = placer le contenu de l’input sélectionné à l’adresse précédente dans l’accumulateur)
COUNT_INC (cycle 5 = incrémenter le compteur ROM)

Programme de test

Le programme roms/pgm_io2_rom lit chaque registre en input de l’adresse mémoire 0 à 7, et écrit la valeur dans le registre en output correspondant (adresse mémoire de 0 à 7).

d7 00 //Read Input mem 00
d3 00  //Write Ouput mem 00
d7 01  //Read Input mem 01
d3 01  //Write Output mem 01
d7 02 // etc …
d3 02
d7 03
d3 03
d7 04
d3 04
d7 05
d3 05
d7 06
d3 06
d7 07
d3 07
76      // halt

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s