Jeu d'instruction du processeur

Les caractéristiques principales de notre microprocesseur sont les suivantes :

  • Le jeu d’instructions du microprocesseur se limite à 16 instructions.
  • Chaque instruction est codée sur deux octets :
    • Le premier octet contient le code de l’opération proprement dite ;
    • Le deuxième octet contient un pointeur qui donne l’adresse en mémoire d’un éventuel opérande.
  • L’adresse de l’accès courant en RAM est notée PC ("Program Counter")
  • La mémoire adressable par le microprocesseur ne dépasse pas 256 octets (8 bits d’adresse)
  • Les données traitées sont des entiers naturels limités à l’intervalle 0..255 (8 bits de données)
  • L’opérateur de calcul du microprocesseur se limite à quelques opérations logiques et arithmétiques simples (voir tableau ci-dessous).
    Le résultat de l’opération effectué est stocké dans l’accumulateur.
  • Lors d’une modification de l’accumulateur, deux signaux supplémentaires sont générés et mémorisés :
    • Z si ce résultat est nul
    • C si une retenue sortante existe (dans le cas des opérations arithmétiques et de rotation)

Le tableau suivant résume le jeu d’instruction du microprocesseur.

 Code (décimal)
 Mnémonique Description
Effet sur l'accumulateur
Effet sur le PC

 0

 NOP

 ne fait rien !

rien

PC <= PC + 2

 1

XOR

 XOR

A <= A xor [AD]

PC <= PC + 2

 2

 AND

 AND

A <= A and [AD]

PC <= PC + 2

 3

 OR

 OR

A <= A or [AD]

PC <= PC + 2

 4

 ADD

 Addition sans retenue entrante

A <= A or [AD]

PC <= PC + 2

 5

 ADC

 Addition avec retenue entrante

 A <= A + [AD] + C_in

PC <= PC + 2

 6

 SUB

 soustraction avec retenue entrante

 A <= A - [AD]

PC <= PC + 2

 7

 SBC

 soustraction avec retenue entrante

 A <= A - [AD] - C_in

PC <= PC + 2

 8

 ROL

 rotation sur la gauche

{C_out, A} <= {A[7:0], C_in}

PC <= PC + 2

 9

 ROR

 rotation sur la droite

{C_out, A} <= {A[0], C_in, A[7:1]};

PC <= PC + 2

 10

 LDA

 Load accumulateur from memory

 A <= [AD]

PC <= PC + 2

 11

 STA

 Store accumulateur to memory

[AD] <= A

PC <= PC + 2

 12

 OUT

 positionne le port de sortie

BZ <= [AD][0]

PC <= PC + 2

 13

 JMP

 saut inconditionnel

 rien

PC <= AD

 14

 JNC

 saut si C = 0

 rien

PC <= AD si C=0

PC <= PC + 2 sinon

 15

 JNZ

 saut si Z = 0

 rien

PC <= AD si Z=0

PC <= PC + 2 sinon


  • L’expression [AD] représente le contenu de la mémoire à l’adresse AD fournie par le deuxième octet de l’instruction

  • L’expression PC <= PC + 2 indique que la valeur du pointeur programme, pour l’instruction suivante, sera la valeur courante incrémentée de 2.

  • L’expression A[6..0] indique les 7 bits de poids faibles de l'accumulateur.

  • De même, [AD][0] correspond au bit de poids 0 du contenu de la mémoire à l’adresse AD.


Travail demandé

Écrivez le code du séquenceur qui génère, en fonction de l'instruction et des flags Z et C, les signaux d'enable des registres et de commande des multiplexeurs.

Le prototype du module devra être le suivant :

module CTR(input logic clk,
           input logic  reset_n,
           input logic[7:0] I,
           input logic  Z,
           input logic  C,

           output logic load_OUT,
           output logic load_ACC,
           output logic load_I,
           output logic load_AD,
           output logic inc_PC,
           output logic load_PC,
           output logic sel_adr,
           output logic write
           );

On fera pour cela un compteur simple, et on générera chacun des signaux de sortie dans un processus à part.



Comments