Ecole polytechnique de
l'Université de Nantes
Département Système Electronique et Informatique Industrielle Rue Christian Pauc - BP 50609 44306 Nantes Cedex 3 P. Bakowski |
|
|
i8051_lib.vhd | Définit un paquetage qui est utilisé dans tous les fichiers VHDL du modèle du 8051. Ce paquetage définit les constantes communément utilisées. |
i8051_alu.vhd | Modèle de l'Unité Arithmétique et Logique (ALU) qui exécute les calculs spécifiques du 8051. Ce modèle est décrit de manière comportementale comme un bloc logique combinatoire. |
i8051_dec.vhd | Modèle du décodeur qui décode les instructions 8051 non-uniformes en représentations uniformes, c'est-à-dire en codes énumérés. Ce modèle est décrit comme un flot de données implémentant un bloc logique combinatoire. |
i8051_ram.vhd | Modèle de 128 octects de RAM, spécifique au 8051, c'est-à-dire adressable par bit. Ce modèle est décrit de manière comportementale comme un bloc logique séquentiel. |
i8051_rom.vhd* | Modèle d'une ROM atteignant jusqu'à 64K octets, spécifique au 8051. Ce modèle est généré automatiquement et de manière comportementale, comme un bloc logique séquentiel, en utilisant i8051_mkr.c. |
i8051_ctr.vhd | Modèle du noyau processeur du 8051. Ce modèle est décrit de manière comportementale comme un bloc logique séquentiel. |
i8051_dbg.vhd | Cette entité est donnée uniquement pour débugger. Actuellement, elle ressort une trace de chaque instruction exécutée. |
i8051_all.vhd | Modèle du microcontrôleur 8051 complet. Ce modèle combine structurellement les blocs logiques ci-dessus. |
i8051_xrm.vhd | Modèle d'une SRAM externe qui s'interfacera à ce microcontrôleur 8051. |
i8051_tsb.vhd | Modèle d'un banc de test pour le microcontrôleur 8051. Ce modèle est décrit de manière comportementale comme un bloc logique sans entrée/sortie. Il est simplement initialisé (RESET), puis stimulé indéfiniment par l'horloge. |
i8051_mkr.c | Programme pour convertir un fichier au format HEX 8051 d'Intel en un modèle de ROM, c'est-à-dire qui génère le fichier i8051_rom.vhd. Vous aurez besoin de compiler ce fichier C/C++ avec la commande gcc -o mkr i8051_mkr.c, puis de l'exécuter avec un fichier HEX comme argument dans la ligne de commande : mkr myfile.hex. |
syn_alu.inc,syn_dec.inc,syn_ram.inc,syn_rom.inc,syn_ctr.inc | Fichiers Include, spécifiques à dc_shell, qui permettront la synthèse des modèles ci-dessus jusqu'aux portes logiques. |
zsim.scr,zsyn.scr | Fichiers script qui simulent/synthétisent tout. |
|
(bit) |
(portes NON ET) |
(portes NON ET) |
(ns) |
(MHz) |
|
I8051_ALU |
50
|
2191
|
0
|
178
|
5.63
|
3
|
I8051_DEC |
18
|
590
|
0
|
46.3
|
21.6
|
2
|
I8051_RAM |
31
|
5237
|
8663
|
1.41
|
709
|
28
|
I8051_ROM* |
23
|
1050
|
56
|
1.40
|
714
|
15
|
I8051_CTR |
118
|
2202
|
998
|
1.77
|
565
|
17
|
Ce programme testera toutes les instructions exceptées ACALL, LCALL, RET, RETI et MOVX(1-4). Chaque instruction est testée à un niveau très rudimentaire (1 à 3 tests par instruction). S'il est pertinent, le flag de retenue est aussi testé. Si une instruction échoue, le programme sortira le numéro de l'instruction sur le port P1 et puis s'arrêtera. Sinon, 127 sera sorti sur P1 quand toutes les instructions auront été exécutées.
Chaque instruction de test est séparée à l'intérieur du programme pour permettre une compréhension facilité si désirée. La RAM de la puce et le PSW sont nettoyés avant le test de chaque instruction.
Le programme utilise la directive ASM pour écrire le texte source dans le fichier .SRC, similaire à un assemblage directe. Cependant, pour créer le fichier HEX il faut utiliser le compilateur KEIL, les étapes étant :
|
|
|
|
|
negcnt.c | negcnt.hex |
39
|
270,000
|
P0 = 64, 65, 66, 67, 68, 69, 70, 71, 72, 73 |
gcd.c | gcd.hex |
51
|
327,000
|
P0 = 36, 25, 14, 3, 1 |
int2bin.c | int2bin.hex |
60
|
500,000
|
P0 = 0, 1, 0, 1, 0, 1, 0, 1 |
cast.c | cast.hex |
127
|
870,000
|
P0 = 01H, P1 = 23H, P2 = 45H, P3 = 67H |
divmul.c | divmul.hex |
210
|
370,000
|
P0 = 10, 4, 134 |
fib.c | fib.hex |
305
|
1,042,000
|
P0 = 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 |
sort.c | sort.hex |
544
|
3,600,000
|
P0 = 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 |
sqroot.c | sqroot.hex |
1121
|
4,000,000
|
P0 = 9, P1 = 16, P2 = 25, P3 = 5 |
xram.c | xram.hex |
67
|
37,000,000
|
/I8051_XRM/XRAM(...) = 1, 2, 3, 4, ... |
|
|
|
|
source_2.7.tar.gz |
2.7
|
16/11/2000 | Implémentation fonctionnelle d'une mémoire externe. Ajout d'un modèle de SRAM. Le banc de test est maintenant connectés au noyau du 8051 avec 2048 octets de mémoire externe qui peut être écrite et lue via les instructions MOVX. |
source_2.6.tar.gz |
2.6
|
01/08/2000 | Correction d'un problème avec les instructions INC_4 et DEC_4. (Remerciements à Shu-Yi Yu pour nous avoir fait connaître ce problème et nous avoir envoyé un code source de test très utile.) |
source_2.5.tar.gz |
2.5
|
14/07/2000 | Ajout de commentaires sur les signaux des ports utilisés par cette implementation. |
source_2.4.tar.gz |
2.4
|
23/11/1999 | Correction d'un bogue dans i8051_mkr.c qui entrainait un problème lorsque les fichiers HEX venaient d'un autre compilateur que ceux de KEIL. (Remerciements à Lars Wehmeyer qui a trouvé et corrigé cette erreur et qui nous a envoyé un correctif.) |
source_2.3.tar.gz |
2.3
|
19/11/1999 | Conversion du fichier i8051_mkr.cc en i8051_mkr.c, c'est-à-dire, un pur fichier C pour une meilleure portabilité. Correction d'un bogue dans l'entité I8051_ALU, plus précisément, l'unité "division". Retrait de la référence à I8051_LIB dans le testbench (non requis ici). |
source_2.2.tar.gz |
2.2
|
15/09/1999 | Correction d'un harmless warning lors de la compilation de i8051_mkr.cc. Pour une homogénéité des ressources de cette page, création d'un programme sort.hex par défaut dans i8051_rom.vhd. |
source_2.1.tar.gz |
2.1
|
15/08/1999 | Première version disponible. |
Dalton Project
University of California Dept. of Computer Science Riverside, CA 92521 dalton@cs.ucr.edu |
Le fichier GENERIC_RAM.vhd fixe le port OutData à l'état
tri-state lorsque le composant n'est pas sélectionner. Ceci implique
que les données ne sont valides seulement durant la sélection
effective de la ram générique. Comme la lecture de la valeur
du bus in_data, se fait plus tard, le contrôleur lit des signaux
sans signification. En conséquence la valeur à écrire
la fois d'après est elle aussi sans aucun sens.
Pour créer une ram adaptée au composant il faut ajouter
au composant Générique : un multiplexeur de bus de données
entre les cellules de la ram. C’est l’objet du composant GENERIC_RAM_2.vhd.
Le multiplexeur est modélisé par le tableau All_Int_Data_Bus.
En utilisant la propriété du signe "<=", les données
voulues persistent sans entrer en conflit avec celles des autres cellules
ram.