version : 2010-05-09
état :
Mises à jour mineures, nouveaux liens, voir le blog.
L'architecture et le jeu d'instruction ont été profondément modifiés, se stabilisent et
se renforcent doucement.
Le désassembleur interactif est ré-activé et les formes étendues sont en cours d'intégration.
C'est encore incomplet mais c'est suffisamment utilisable pour être utile.
2012-10-05 : cette version est OBSOLETE, pour archivage. Allez voir la dernière version à http://yasep.org
Bienvenue sur la page du projet YASEP
L'acronyme YASEP signifie "Yet Another Small Embedded Processor" (encore un autre petit processeur embarqué).
C'est un coeur de microcontrôleur paramétrable (16 ou 32 bits) que j'ai imaginé en parallèle et souvent en contradiction
avec le projet F-CPU.
Il est conçu de façon à rester aussi petit et simple que possible (enfin, c'était l'idée initiale).
Cela me permet de le développer avec un minimum d'efforts et des ressources limitées.
D'autres personnes (étudiants, hobbyistes) peuvent aussi facilement participer et apprendre grâce à ce projet.
En choisissant des méthodes parfois inhabituelles, il est possible de se concentrer sur les véritables objectifs du développement d'un CPU
(principalement : les choix architecturaux et les détails d'implémentation).
Le YASEP existe donc sous la forme d'un paquet.
Ce n'est pas juste un simulateur, un assembleur, un désassembleur, un manuel ou un kit de développement, c'est tout ça et bien plus encore !
Chaque partie est intégrée dans les autres (et vice versa),
l'ensemble reste donc (plutôt) cohérent, facile à utiliser, à développer, à réparer, à maintenir...
Le seul prérequis est l'usage de Firefox
(ou n'importe quel autre navigateur basé sur Gecko) car ce projet tout en un dépend du moteur de JavaScript de Mozilla.
Opera et d'autres sont compatibles mais le support d'IE serait contre-productif.
Happy clicking !
yg
Fonctionnalités et caractéristiques du YASEP :
-
Architecture RISC avec 16 registres.
-
-
Jeu d'instructions orthogonal sur 16 bits : environ 40 opcodes
avec en option un champ immédiat de 16 bits ou un champ étendu.
-
Instructions compactes avec champ immédiat long ou court et 2, 3 ou 4 registres.
-
Chemin de donnée à largeur configurable (16 ou 32 bits)
avec ou sans de nombreuses options (mémoire, multiplication...).
-
Une instruction peut déclencher jusqu'à 3 accès à la mémoire, au lieu d'un seul pour les architectures
load-store typiques.
-
L'architecture de haut niveau est spécifiée en JavaScript+HTML, avec une intégration directe des outils
de développement.
-
Le code source RTL est en VHDL (compatible FPGA et ASIC). La technologie cible est le ProASIC3
de Actel. D'autres familles suivront plus tard.
-
Le YASEP est libre et gratuit ! Aucun brevet (déposé ou connu) n'est appliqué au coeur.
Tout le code source est original et distribué sous license CopyLeft (Affero GPLv3).
Toute aide est la bienvenue ;-)
Les ressources du site :
Téléchargement
L'ensemble de l'arborescence est disponible (environ 340KB) pour l'utilisation en local.
Vous pouvez tester le YASEP chez vous et jouer avec le code source.
Note : si vous souhaitez utiliser la fonction de sauvegarde/chargement de fichiers de FileFox,
vous aurez besoin d'un serveur web avec PHP sur votre ordinateur. Installez Apache sous GNU/Linux,
ou EasyPHP sous MS Windows.
Description, documentation et références (répertoire /docs)
-
La description des registres [en] (ok)
-
La description des instructions [en]
(ok)
-
Le manuel du langage assembleur [en]
explique comment écrire des instructions pour le YASEP avec l'assembleur JavaScript. (ok)
-
Les différences entre le YASEP16 et le YASEP32
(les versions 16-bit et 32-bit du chemin de données) [en]
(décent)
-
Notice d'utilisation des instructions de multiplication (ok)
-
Les flags (attributs) des opcodes (ok)
-
Les Registres spéciaux ont leur propre page,
avec la liste de leurs adresses, valeurs et fonctions pour les versions 16 et 32-bit.
(pas encore très utile)
-
Vous pouvez consulter la section Obsolète pour voir les anciennes incarnations du manuel,
avant que le jeu d'instructions et les registres n'aient été profondément modifiés.
Outils de conception et développement logiciel
-
La carte interactive des opcodes du YASEP.
[en] (ok)
Vous pouvez consulter un opcode spécifique depuis une autre page, par exemple cliquez sur : SHH.
-
L' Assembleur Interactif est un simple formulaire qui permet d'assembler une instruction à la fois.
Il s'ouvre aussi dans une nouvelle fenêtre en cliquant sur les liens comme celui ci :
add r0 d1. Il est aussi possible de désassembler une instruction :
5BA0590Dh (ok)
-
L'assembleur aura un nouvel éditeur dynamique super chouette
qui utilise ygwm. :-) (développement en cours)
Le manuel des instructions du YASEP (répertoire /ISM)
La description de chaque opcode (par exemple "ADD") peut être consultée depuis
divers documents, par exemple en cliquant sur le nom correspondant dans la
carte interactive des opcodes ou dans la fenêtre flottante de l'assembleur.
(ok mais donner plus d'exemples)
-
L' autotest des opcodes est maintenant disponible.
Cette page vérifie que l'entrée du désassembleur est cohérente avec la sortie de l'assembleur.
(ok)
-
Les unités d'execution peuvent être manuellement vérifiées pour les versions
du YASEP16 et
du YASEP32.
(ok)
C'est le coeur du projet mais il est encore en développement.
La priorité est actuellement le YASEP16.
Les fichiers source ne sont pas encore à jour.
-
Cette page exporte les définitions du YASEP en JavaScript
vers un fichier en VHDL qui peut être sauvé sur votre ordinateur (pour la simulation et la synthèse RTL).
Les paramètres clés peuvent être sélectionnés avec une simple interface web (formulaires). (ok)
Clickodromes, prototypes et bacs à sable (répertoire /test)
C'est ici que les futures fonctionnalités sont développées !
Autres
-
Le répertoire /JScore contient les fichiers en JavaScript pour le coeur du YASEP, par
exemple l'assembleur, les définitions et de petits utilitaires pour faire fonctionner le simulateur, sans
communication avec aucune interface utilisateur.
-
Le répertoire /JSgui contient les fichiers en JavaScript pour l'interface graphique
de façon à la garder séparée des fichiers réellement importants pour le coeur. C'est ici que vous trouverez
le code en rapport avec le langage et la plateforme,
et aussi quelques hacks sympa en JavaScript :
-
Le projet du YASEP utilise une façon originale pour sauver et charger des fichiers depuis/vers le JavaScript.
Une démonstration de ses fonctionnalités est diponible ici.
-
Un gestionnaire de fenêtre spécifique a aussi été développé (début 2009).
-
Le fichier changes.txt garde une trace des changements majeurs appliqués aux fichiers.
-
Un minifieur pour le HTML, la CSS et le JavaScript sera utilisé un jour pour l'intégralité du site.
Ces éléments sont conservés pour leur valeur historique, éventuellement parce qu'aucun remplacement
approprié n'a été écrit depuis, ou juste parce que je ne veux pas les effacer...
-
Le premier brouillon du (vieux) VSP.
La plupart des détails sont périmés mais les idées sont intéressantes et permettent de comprendre
comment et pourquoi le YASEP en est arrivé là.
Les sites web du projet du YASEP :
-
Le YASEP a son propre site web : yasep.org. Vous êtes probablement en train
d'y lire ceci.
-
Au moins un miroir existe, peut-être pas à jour mais moins instable que le
site principal. Le miroir à seul.org
a disparu en raison de problèmes techniques de l'hébergeur (après plus de 10 ans sans faille).
Un nouveau miroir a été créé sur TuxFamily.org.
Vive les hébergeurs libres !
-
Un blog fournit des mises à jour moins techniques et plus humaines.
Autres sites (plus ou moins en relation)
-
OpenCollector est LE meilleur site pour découvrir d'autres designs et outils libres !
-
F-CPU : là où tout a commencé (plus ou moins).
-
Ours Agile est un projet de robotique qui utilisera YASEP.
-
fpgacpu.org de Jan Gray est un autre site qui pourrait vous inspirer.
-
Le projet Harp est une autre tentative pour concevoir un CPU en solitaire.
-
Wikipedia a une liste réaliste de coeur IP.
- ACME Systems SRL est le fabriquant de la carte VHDL FOX (maintenant remplacée
par la carte COLIBRI),
équipée avec un FPGA ProASIC3 de ACTEL
et une paire de SRAM haute vitesse. Ces cartes sont vraiment économiques et idéales pour YASEP !
-
OpenGraphics conçoit une carte FPGA
très sympathique qui a beaucoup de potentiel comme carte de développement de CPU. Achetez-en une !
-
Encore une chouette petite carte FPGA par Jopdesign
(JOP étant le Java Optimised Processor publié sous GPLv3)
Notes :
- S'il vous plait, gardez à l'esprit que ce travail est en évolution constante,
les fichiers changent souvent et des bugs apparaissent et disparaissent sans avertissement préalable.
- Vérifiez le fichier changes.txt pour voir les derniers changements,
les idées en cours, les bugs connus et les fonctionnalités manquantes.
- Tout ces fichiers sont (C) Yann Guidon 2002-2009 et sont fournis
sous la Licence Affero GPL v3.
- Ces pages ne sont pas strictement compatibles W3C, je souhaite juste qu'elles
fonctionnent sous firefox. Je suis électronicien, pas concepteur web !
- Merci à toutes les personnes qui ont aidé (directement ou indirectement)
avec du code, des commentaires, des traductions ou leur perspicacité.