Concevez un point d'interconnexion programmable
Utilisez un point d'interconnexion élémentaire
Le point d'interconnexion programmable élémentaire (Programmable Interconnect Point ou PIP) permet de connecter, ou non, deux nœuds de communication, comme illustré ci-dessous.
PIP en mode "on " (connexion) ou "off " (non connecté)
Dans DSCH, le symbole correspondant se trouve dans la palette des symboles, onglet "advanced", menu "switches". Le PIP peut avoir deux états : « On » ou« Off ». Vous pouvez passer de "On" à "Off" en double-cliquant sur le symbole (écran illustré ci-dessous) et en cliquant sur le bouton Activer / Désactiver.
Menu de changement d'état du PIP
Réalisez une matrice d'interconnexion
Un exemple de matrice PIP 3x2 est illustré ci-dessous. Le lien entre In1 et Out1, In2 est obtenu en activant le PIP à l'intersection des signaux considérés. Un outil de routage spécifique gère généralement cette tâche, mais la réorganisation manuelle n'est pas rare dans certaines situations complexes.
Programmation de 2 PIP pour connecter 2 entrées à 2 sorties spécifiques
Matrice à 6 options de connexion
La matrice de commutation est un point d'interconnexion programmable sophistiqué, qui permet une large gamme de combinaisons de routage au sein d'un seul croisement d'interconnexions. La matrice comprend 6 ponts configurables entre les deux interconnexions principales.
Un exemple de matrice de commutation 3x3 est donné ci-dessous. Les possibilités de routage sont nombreuses, ce qui améliore la configurabilité des blocs logiques. Par contre, chaque fil programmable nécessite un point mémoire associé — ce qui fait 6 mémoires pour une matrice — et donc 54 bascules pour un tel schéma.
Utilisation de matrices de commutation en groupes 3 x 3
Réalisez et simulez un additionneur reprenant les circuits précédents
La table de vérité de l'additionneur complet est rappelée dans le tableau ci-dessous. Les fonctions CARRY et SUM codent en binaire le résultat de l'addition des valeurs binaires A, B et C. La valeur du résultat va de 0 (A=0, B=0, C=0) à 3 (A=1, B=1, C=1).
A | B | C | Sum | Carry | Résultat de A+B+C |
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 | 2 |
1 | 0 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 2 |
1 | 1 | 0 | 0 | 1 | 2 |
1 | 1 | 1 | 1 | 1 | 3 |
L'implémentation de la fonction CARRY et SUM est réalisée en programmant deux LUT. Dans l'exemple ci dessous, réalisé avec DSCH, les 8 valeurs de SUM sont injectées dans le LUT de droite, celles de CARRY dans le LUT de gauche.
Programmation des LUT pour émuler les fonctions SUM et CARRY
Il reste à faire un travail important de routage pour acheminer les valeurs de A, B et C aux entrées F0, F1 et F2 des 2 LUT, mais aussi connecter la sortie de chaque LUT à une sortie vers l'extérieur.
Utilisation de 2 LUT et de matrices d'interconnexion pour réaliser un additionneur
Une fois l'ensemble du réseau programmé, il suffit de sélectionner les valeurs de A, B et C dans les boutons de gauche et observer le résultat sur les sorties SUM et CARRY. On notera que cette simple fonction nécessite un nombre important de bascules de configuration (8 dans le LUT, 6 par matrice et 1 pour chaque PIP).
Dans les chapitres précédents, vous avez découvert l'architecture générale d'un FPGA et comment le programmer pour implémenter différentes fonctions.
Vous voici arrivé à la fin de ce cours. Félicitations !
Vous avez maintenant les clés pour :
- décrire les fonctions séquentielles élémentaires,
- traduire des opérations de comptage en circuits séquentiels,
- manipuler des structures hiérarchisées élaborées,
- utiliser un logiciel de conception et de simulation,
- construire des blocs mémoire et des structures programmables élémentaires.
N'oubliez pas de réaliser les exercices évalués à la fin de chaque partie, ils vous permettront de valider ces compétences. Nous vous souhaitons une bonne continuation dans tous vos projets !