# Very High Speed Integrated Circuit Hardware Description Language/Utiliser un processeur interne : Cyclone 5

Après avoir abordé les processeurs externes, nous allons nous intéresser maintenant aux processeurs internes. Comme nous avons déjà eu l'occasion de l'exprimer dans ce livre, ce domaine est réservé aux applications très demandeuses en rapidité.
Le choix du FPGA (cyclone V de chez Altera) est lié au fait que nous avons eu gratuitement un certain nombre de cartes DE-0-nano-SoC par Altera. Il y a aussi une opération une carte DE0-nano-SOC par étudiant ici proposée au prix de 37,50 €.
Terasic qui réalise les cartes avec des FPGA Altera propose aussi une carte plus étoffée en périphériques standards, la DE-1 SOC. Nous ne prévoyons pas d'étudier cette carte pour le moment.
Pour citer un peu la concurrence, Xilinx propose un certain nombre de cartes réalisées par Digilent : la Zybo et la Zedboard.
Les FPGA avec des processeurs en durs sont complexes à mettre en œuvre. Ceci est lié au fait que le FPGA est composé de deux parties bien distinctes :
* le processeur en dur
* la partie FPGA
Pour ne pas démotiver le lecteur, nous commencerons par l'utilisation du FPGA seul... avant d'aborder l'utilisation du processeur en dur. Les processeurs en dur proposés par Xilinx et Altera sont à peu près les mêmes. Il s'agit de processeurs deux cœurs ARM Cortex A9. Faire tourner deux cœurs est une opération complexe qui ne peu pas être réalisée par tout le monde (en tout cas pas par nous). La conséquence est qu'il est difficile de faire tourner correctement un tel processeur sans utiliser de système d'exploitation qui lui sait gérer ce type de situation.

## Présentation de la DE0-nano-SoC

La carte DE0-nano-SoC est décrite sur le site du fabricant.
La carte DE0-nano-SoC est une carte avec un minimum de périphérique :
* huit leds
* quatre switchs
* trois boutons poussoirs
* un circuit de conversion analogique/numérique
* un accéléromètre
Et du coup elle est très petite. Elle est parfaite pour de la robotique mobile, domaine déjà abordé dans ce livre.
Pour les extensions, vous disposez de connecteurs pour recevoir des shields de type Arduino et de deux connecteurs doubles 2x20 broches ainsi qu'un connecteur pour entrées analogiques (qui ne dépassent pas une tension de 4,096 V).
Nous aurons l'occasion de reparler des compatibilités de tension pour les shields de type Arduino. Mais à priori la tension de 5V est disponible à l'endroit prévu par l'Arduino, ce qui laisse entendre que l'on peut se retrouver avec du 5V sur d'autres entrées (à cause de la logique présente dans le shield) alors que les broches du FPGA ne supportent que du 3,3 V.

## Utilisation du FPGA seul

Commencez par télécharger le CD DE0-nano-SOC pour disposer d'exemples déjà compilés. Dans le répertoire "Demonstrations", choisissez "FPGA" puis un des trois exemples :
* DE0_NANO_SOC_ADC
* DE0_NANO_SOC_Default
* my_first_fpga
Si vous voulez commencer par un exemple simple choisissez my_first_fpga pour lequel vous avez dans le répertoire "output_files" le fichier "my_first_fpga.sof" à télécharger. Mais avant de se lancer ...

### Préparer la carte à une utilisation exclusive du FPGA

Comme nous l'avons déjà indiqué, le circuit FPGA est séparé en deux parties :
* FPGA
* HPS (peut être Hardware Processor System)
Oups, à partir de maintenant, le mot FPGA désignera le circuit complet (ici cyclone V) ou la partie de ce circuit complet dans laquelle nous configurerons de la logique. A priori nous l'utiliserons plus dans le deuxième sens à partir de maintenant.
Donc que faut-il faire si l'on ne veut utiliser que la partie FPGA du cyclone V ?
Dans le "DE0-Nano-SoC_User_manual.pdf", on vous explique comment les choses se passent dans le chapitre 3. Il faut configurer les switchs en :
* ON OFF ON ON OFF (en partant de la gauche vers la droite) et ON est en haut si votre alimentation est à gauche
et vous faites ce que vous voulez du dernier qui n'est pas connecté. C'est ce qui est appelé mode AS (FPGA configured from EPCS) dans la documentation.

### Téléchargement dans le FPGA

L'expérience que nous avions avec la carte DE2-115 n'a pas été suffisante pour trouver immédiatement comment il est possible de télécharger un programme VHDL (ou autre) compilé. L'USB blaster ne sera pas très pratique pour nos étudiants !!! :
* on configure Hardware setup (identique à la DE2-115)
* on fait une détection automatique (identique à la DE2-115) et il trouve deux composants
* on ajoute le fichier compilé (partiellement identique à la DE2-115) car il ajoute un troisième composant
* il ne faut pas oublier de retirer le deuxième composant (là nous n'avions jamais rencontré cela).
* on fait le start (identique à la DE2-115).
En résumé, le fait qu'il faille retirer manuellement un composant posera beaucoup de problèmes aux étudiants et aux enseignants qui ne l'ont pas fait depuis longtemps ! Bon c'est vrai que ce n'est pas comme cela que l'on est susceptible d'utiliser ce circuit !

### Remarques en guise de conclusion

L'utilisation du FPGA seul n'est pas adaptée au FPGA utilisé dans la DE0 nano soc. Si vous faites cela, un Linux tourne quand même dans votre dos ce qui rend l'ensemble très consommateur d'énergie... et probablement très cher. Il est possible d'utiliser le processeur sans système d'exploitation, mais vous rencontrez alors le problème de gérer une mémoire cache partagée par les deux cœurs. Gérer ceci n'est pas du domaine du premier venu.
Si vous n'avez pas besoin de Linux, mais besoin d'un processeur, il serait plus simple d'utiliser un Nios décrit dans un autre chapitre de ce livre.