# Partie 1 : FPGA, HDL, simulation, synthétisation ? 
Si vous êtes là, c'est que vous avez probablement entendu parler de FPGA quelque part et que vous souhaitez en savoir plus sur leur fonctionnement, éventuellement expérimenter sur eux. Vous avez donc besoin de quelques notions théoriques pour avancer.

Ca tombe bien, c'est l'objet de cette première partie.

## FPGA, ASIC et MicroContrôleur

Vous êtes probablement familier avec le concept de **microcontrôleur** et leur principe de fonctionnement. De manière générale, il est composé d'une unité de calcul, d'entrées et de sortie, de mémoire volatile et non volatile.

Pour le faire fonctionner, vous développer un microprogramme qui, une fois compilé, est téléchargé dans la mémoire non volatile du microcontrôleur. 

Si vous avez déjà utilisé une carte Arduino, vous connaissez probablement le code C suivante : 
```c
/* 
https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
```

Un  **FPGA (Field Programmable Grid Array)** fonctionne quant à lui bien différemment et pou cause : ce n'est pas un microcontrôleur.

Un FPGA est un composant électronique dit de __circuits logiques programmables__, c'est à dire qu'il est composé d'un assemblage de porte logique (AND, OR, Not, etc ...), de module de routage et de mémoire permettant 