Skip to content
This repository was archived by the owner on May 31, 2024. It is now read-only.

docjyJ/Dragon-Compiler-Collection

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dragon Compiler Collection

Démarrage rapide

Pour tester la syntaxe d'un fichier C :

Déplacer le fichier my-test.c dans le dossier test/ et lancer la commande make my-test-test.

Pour importer un programme C en VHDL :

Générer la constate VHDL :

cat ./demo/swap.c | ./rapido.sh > ./demo/swap.vhd

Copier la constante dans le fichier InstructionMemory.vhd du projet VHDL.

Warning

Il semble que des bugs, dont nous n'avons pas eu le temps d'y enquêter sont toujours présent.

IO

Le projet sur une carte BASYS3 procède 2 canaux d'entrée et 2 canaux de sortie.

Ils sont défini via la rangée de led et de switch de la carte. Le bouton haut permet le reset de la carte. Le bouton gauche permet d'afficher l'entrée en hexadécimal sur l'afficheur 7 segments (par défault la sortie est affichée).

À la base, on voulait mettre un troisième canal pour une communication série / RS232 via les pins RX et TX de la carte. Par manque de temps ça n'a pu aboutir.

Outils et Commends pour la compilation

Dragon Compiler Collection

Dragon Compiler Collection est l'outil de compilation du code C vers la cible DragonUnit FPGA.

Enfin collection est un grand mot pour, il n'y a qu'un seul compilateur. Il se sent un peu seul le pauvre...

Usage : dcc [-?] [-a] [-o FILE] [-s] [-?] [INPUT_FILE]

Argument Description
-? --help --usage Affiche l'aide.
-a --asm Sortie en assembleur au lieux d'un binaire.
-oFILE --output=FILE Fichier de sortie, par défaut la sortie standard.
-s --hint-srcs Affiche les sources entre les instructions assembleur. Ne fonctionne pas pour la compilation binaire.
INPUT_FILE Fichier d'entrée, par défaut l'entrée standard.

QEMU Latias

QEMU Latias est la machine virtuelle à privilégier pour l'exécution des fichiers assembleur généré par DCC.

Warning

QEMU Latias ne prend en charge que les fichiers assembleur généré par DCC. Les fichiers binaires ne sont pas supporté.

Usage : qemu-latias [-h] [-i MAX_ITER] [-d] [-r CSV_RAM] file

Argument Description
-h --help Affiche l'aide.
-i INT --max-iter INT Nombre maximum d'itérations, un entier pour prévenir les boucle infinie, par défault 1024.
-d --debug Active le mode debug, affiche plus d'information dans la sortie standard.
-r FILE --csv-ram FILE Fichier CSV détallant l'exécution tick par tick avec l'instruction en cours et l'état complet de la mémoire.
file Fichier assembleur exécuter.

Makefile

Voici les différentes cibles du Makefile pour le compilateur.

Fichier Description
src/%.tab.c Fichier généré par Bison.
src/%.yy.c Fichier généré par Flex.
src/%.o Fichier objet.
dcc Exécutable.
dcc.debug Exécutable de débug.
%.out Fichier de test compiler par gcc (le vrai).
%.s Fichier de test assembleur.
Commande Description
clean full-clean Supprime les fichiers généré par le Makefile.
%-open-diag open-diag Ouvre le diagnostic de grammaire.
%-rapport rapport Génère un rapport de grammaire et le graph de l'automate
%-test test Test le fichier %.out et %.s, ça permet de challenger DCC face à GCC.
%-emulate emulate Éxécute le fichier %.s avec QEMU Latias.

[!INFO] Les commandes peuvent être préfixées ou non du fichier (yacc pour les rapport et test pour les émulations). Sans préfixe tous les fichiers sont concerné.

Rapido Build VHDL

Pour générer une constante programme le script rapido peut être utilisé.

Usage : cat input.c | ./rapido.sh > outputfile.vhd

Jeux d'instruction

Légende :

  • 🔴 Registre de sortie
  • 🔷 Registre d'entrée
  • 🟩 Donnée hardcode
  • 🚫 Sans effet
Nom Id 31-24 23-16 15-8 7-0
NOP 00 🚫 🚫 🚫
Addition ADD 01 🔴 A+B 🔷 A 🔷 B
Multiplication MUL 02 🔴 A*B 🔷 A 🔷 B
Soustraction SUB 03 🔴 A-B 🔷 A 🔷 B
Division DIV 04 🔴 A/B 🔷 A 🔷 B
Copie COP 05 🔴 A 🚫 🔷 A
Affectation AFC 06 🔴 A 🟩 A 🚫
Saut JMP 07 🚫 🟩 @ 🚫
Branchement JMF 08 🚫 🟩 @ 🔷 0?
Inférieur INF 09 🔴 A < B 🔷 A 🔷 B
Supérieur SUP 0A 🔴 A > B 🔷 A 🔷 B
Égale EQU 0B 🔴 A == B 🔷 A 🔷 B
Écriture PRI 0C 🚫 🟩 PORT 🔷 IN
0D
0E
0F
Chargement LOD 10 🔴 << @ 🚫 🔷 @
Sauvegarde STR 11 🚫 🔷 IN 🔷 @
Saut (version registre) JMPR 12 🚫 🚫 🔷 @
Branchement (version registre) JMFR 13 🚫 🔷 0? 🔷 @
Lecture RED 14 🔴 OUT 🟩 PORT 🚫
15
16
17
Négation NEG 18 🔴 -A 🚫 🔷 A
Reste MOD 19 🔴 A % B 🔷 A 🔷 B
1A
1B
1C
1D
1E
1F
Et bit à bit AND 20 🔴 A & B 🔷 A 🔷 B
Ou bit à bit OR 21 🔴 A | B 🔷 A 🔷 B
Non bit à bit NOT 22 🔴 ~A 🚫 🔷 A
Ou exclusif bit à bit XOR 23 🔴 A ^ B 🔷 A 🔷 B
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
36
37
38
39
3A
3B
3C
3D
3E
3F

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •