Homade propose un jeu d'instruction Hyper réduit à 12 instructions. Toutes les instructions sont codées sur des mots de 16 bits. Pour certaine instructions, il faudra 2 voire 3 mots de 16 bits de plus pour ranger poids forts et poids faible à la suite de l’instruction(codage Big Endian) ou instructions de reconfiguration. On parlera d’instructions étendues
Pour le rangement en mémoire, on utilise des mots de 64 bits en
big endian également. La première instruction sur les bits de
poids forts, puis la seconde etc… On obtient donc 4 mots de 16
bits à chaque lecture mémoire d’instruction. Un mots de 64 bits
représente pour le compteur ordinal 4 adresses alors qu'il ne
représente qu'un seule adresse pour la mémoire d’instruction.
Les instructions étendues sont nécessairement alignées sur les poids fort du mot mémoire de 64 bits.

Cette instruction unique permet de déclencher jusque 2048 (-1 que l’on verra plus tard) IP différents. Elle permet d’identifier le nombre de données dépilées de la pile du processeur en début d’exécution, nombre de données empilées sur la pile en fin d‘exécution, le numéro de l’IP à déclencher.
Son format et donc le suivant, il est sur 16 bits :

•XX : POP 0, 1, 2 ou 3 valeurs retirées de la pile vers l’IP
•YY : PUSH 0, 1, 2 ou 3 valeurs envoyées par l’IP sur la pile
•S : 0 indique un IP qui s’exécute en moins d’un cycle :
Short_IP. 1 signifie que l’IP s’exécute sur plus de 1 cycle :
Long_IP. L'activation du signal IPdone est nécessairement
déclenché par l'IP pour signaler la fin d’exécution. Deux codes
VHDL sont donnés en exemple dans la partie bibliothèque d'IPs/ Construction
d'IP pour chacune de ces valeurs.
•IIIIIIIIII : sur 10 bits, le numéro de l’Ip à déclencher. On a donc 1024 IP en un cycle et 1024 IP en plus de un cycle.
‘1_10_01_0_0000000001’ déclenche l’IP 0_0000000001 qui dépile les deux sommets de pile et empile le résultat en moins d’un cycle.
‘1_00_01_0_0000000001’ déclenche le même IP 0_0000000001 sans dépiler les deux sommets de pile et empile le même résultat que précédemment en moins d’un cycle.
‘1_00_01_1_0000000001’ déclenche l’IP 1_0000000001 sans rien dépiler et empile son résultat après un certain nombre de cycles non connu à l’avance et supérieur ou égal à 2 cycles.
L’IP de numéro 1_1111111111 n’est pas autorisé. Il est réservé pour la gestion interne des déclenchements d’IP.
L’IP ‘1_11_11_1_1111111111’ est appelé NULL. Il est utilisé lors de l’assemblage des instructions par mots de 64 bits afin de remplir les bits de poids faible du mot lorsqu’il faut aligner l’instruction suivante sur les poids forts du mot de 64 bit suivant. Son exécution n’existe pas et donc aucun cycle n’est nécessaire lorsque cette instruction est chargée par le contrôleur de la mémoire de programme. Le programme suivant est composé de 4 instructions, la troisième étant une instruction étendue.

Il existe trois instructions de branchement relatif : BR, BZ et BNZ. Elles ont toutes les trois sur le même schéma, 6 bits pour le code opération et 10 bits pour le déplacement.
Ce déplacement est un entier en complément à deux qui s’ajoute
à la valeur du compteur ordinal point sur cette instruction de
branchement. La valeur de déplacement ZERO est interdite et
entrainerai une boucle infinie. Les deux instructions BZ et BNZ
consomment le sommet de pile et effectuent le branchement sous
condition de sa valeur égale à zéro ou pas.
Dans tous les cas le résultat du branchement doit pointer vers
une instruction effective ( pas un FFFF!!!)



Il y a deux instructions étendues sur trois mots de 16 bits. Elles produisent toutes le deux le même effet sur le compteur ordinal en y rangeant la valeur codées sur les deux mots de 16 bits suivants (codage Big Endian). Le CALL mémorise en plus l’adresse de l’instruction afin de pouvoir revenir à l’instruction suivante lors de l’instruction RETURN. Par le stockage sur 64 bit en mémoire de programme , le temps d'exécution de ces deux instruction reste en un seul cycle.
Le résultat du branchement doit pointer vers une instruction
effective ( pas un FFFF!!!)
Voici les codages de ces deux instructions :


Il existe deux instructions de contrôle de flot. La première RETURN permet le retour d'appel de procédure par restauration du compteur ordinal de la valeur rangée lors de l'appel de fonction CALL.
La seconde HaLT permet d’arrêter le processeur dans l'état
courant . Dans un fonctionnement en mode esclave ( Non
disponible sur la version <= 2.1 ) cette instruction
déclenche l’activation de la sortie ORTREE sur le processeur.
L'esclave ne redémarre que lorsque le signal StartCPU est activé
et avec l'adresse sur 13 bits positionnés sur StartAdresse (cf
Instruction SPMD). Le redémarrage du processeur maître ne peut
se faire que par une reset.
Ce fonctionnement permet une arborescence d'Homades. Un
processeur homade est un esclave de son père et le maître de ses
fils. Une telle utilisation demande un modèle programmation
assez particulier qu'on pourrait appelé SPMD*.


Il existe une instruction qui explicitement range un nombre en sommet de pile du processeur. Cette instruction LIT permet de manipuler des nombres binaires (complement à deux sur la version 1.4 le douzième bit est copié sur les 24 bits de poids fort du mots de 32 bits sur le sommet de pile. ) sur 12 bits.
Plusieurs LIT de suite avec des décalage et logique permettent de construire des mots de plus de 12 bits ( CF bibliothèque d'IPs)

Une nouvelle instruction apparait à partir de la version 2.2.
La réflexivité comme concept matériel du processeur Homade:
cette nouvelle instruction est dédiée à la modification de la
mémoire de programme. Il est sans doute nécessaire de rappeler
que le processeur Homade fonctionne plutôt suivant une
architecture Harvard avec séparation de la mémoire
d'instructions et de la mémoire de données. Cette dernière
n'existe que si un IP mémoire a été instancié dans la
configuration du processeur. L'instruction WIM va permettre
d'écrire dans cette mémoire de programme une suite de trois
instructions alignées sur un mot de 64 bits de la
mémoire avec un complément automatique d'une quatrième
instruction égale à RETURN. Seules les adresses 1&00 à
111111111111&00 sont accessibles par cette intercession.
Le champ WIM précise explicitement cette adresse.
L’instruction WIM comme pour le CALL doit nécessairement être
alignée sur un début de mot en mémoire. En aucun cas cette
zone de mémoire d'instruction ne pourra être swappée en
mémoire si une implémentation de cache d'instruction devient
nécessaire.
Cette instruction machine sera exploitée principalement pour
introduire la notion de VIRTUAL_COMPONENT au niveau
assembleur.

Utilisation avec ses trois arguments sur 48 bits:

Deux autres instructions seront disponibles dans les versions
suivantes : les instructions SPMD et WAIT permettent de
déclencher en parallèle et de se synchroniser en fin d'exécution
lorsqu'une batterie d'Homades a été développée. L"instruction
SPMD fournira une adresse de branchement sur 13 bits [ I12
.. I0 ]à tous les Homades esclaves qui la recevront.
Cette adresse est alors shiftée de 2 sur la gauche ( Multiplié
par 4). Cette adresse mémoire devra contenir le programme à
exécuter par tous les Homades esclaves. Ce programme doit être
de longueur inférieure ou égale à 4 et doit nécessairement se
terminer par l'instruction HALT.
SPMD;

WAIT:

On pourra par exemple placer un CALL sur 3 mots suivi d'un HALT
pour obtenir un mode de fonctionnement SPMD. On pourra aussi
placer 1 instruction suivi d'un HALT pour émuler un mode SIMD (
4 cycles devraient être nécessaires : SPMD + Instr_SIMD +
HALT + WAIT ) .
La gestion de l'activité et de communications entre esclaves et
maître ne font pas partie du cœur Homade. Elles sont assurées
par des IPs du maître ou des esclaves à définir. Des exemples
seront disponibles en bibliothèques pour metre en place le
modèle de calcul SPMD avec gestion de l'activité des esclaves
et avec différents réseaux de communication. ( en cours
d'étude)