Quels sont certains des algorithmes de synthèse FPGA de base mappés à LUT?

Fanatic23

Quels sont certains des algorithmes de synthèse FPGA de base mappés à LUT?


J’essaie de rechercher des articles faciles à comprendre qui aident à expliquer comment les fonctions logiques sont mappées sur LUT. Par exemple, si j’ai c = (a+b)*c -d comment est-ce mappé sur LUT ou si un compteur est conçu, comment est-il mappé, etc.

Réponses


 markt

Une LUT est une mémoire (Look. Up. Table). Il implémente des tables de vérité logique en utilisant l’adresse mémoire comme bits d’entrée et la sortie de données mémoire comme bits de sortie.

A titre d’exemple, pour un compteur à 4 bits: à l’adresse 4’b0000 est stocké 4’b0001; à l’adresse 4’b0001 est stocké 4’b0010; …; à l’adresse 4’b1011 est stocké 4’b1100; et ainsi de suite. Les sorties sont enregistrées et renvoyées aux entrées, donc à chaque horloge le cycle se répète et les incréments de sortie du compteur.


 Doov

La réponse de Markt est correcte. Si vous êtes curieux de savoir comment fonctionnent réellement les algorithmes de synthèse, je vous signale le travail de De Micheli à l’EPFL. Il a joué un rôle très important dans la synthèse du VLSI http://icwww.epfl.ch/~demichel/ . Il a écrit un excellent livre sur le sujet: http://icwww.epfl.ch/~demichel/publications/mcgraw/index.html Il pourrait être un peu plus dense que ce que vous recherchez, mais c’est un excellent texte.


 Simon Richter

Le mappage précis dépend du type de LUT implémenté. Une configuration très courante est un LE avec une LUT à 16 entrées (4 entrées), divisé en deux moitiés pour obtenir deux sorties. Chacune des demi-LUT ressemble à ceci:

schématique

simuler ce circuit – Schéma créé à l’aide de CircuitLab

La configuration LE contient les valeurs provenant de la gauche (données du tableau), ainsi que certaines valeurs qui sont appliquées à d’autres portes autour de la LUT, par exemple un indicateur de sélection qui peut extraire la troisième entrée de la moitié supérieure d’un LE voisin de la table. De cette façon, vous pouvez facilement implémenter un additionneur:

 left right cin out cout 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 

Le signal cout de la table pour le bit 0 est connecté au signal cin du bit 1, vous obtenez donc un additionneur complet avec report.

La soustraction ajoute le complément à deux de la valeur du côté droit, et la multiplication ajoute la valeur du côté gauche décalée de N bits vers la gauche si le bit N est défini dans la valeur du côté droit (donc un multiplicateur 9×9 a besoin d’un additionneur de 9 bits, un Additionneur 8 bits, additionneur 7 bits, …).

Ces opérations peuvent être combinées s’il y a un emballage plus optimal des tables – par exemple, je peux représenter le complément à deux nécessaire pour la soustraction dans la table de recherche de l’additionneur. Cette optimisation est un problème difficile, et souvent aucune solution optimale n’existe – mais en trouver une qui correspond aux exigences de synchronisation est généralement suffisant.

Le mappage de c=(a+b)*cd nécessite une logique combinatoire pour (a+b)*cd et une étape de registre qui enregistre la valeur de c . Le registre a besoin d’un signal supplémentaire pour déclencher la mise à jour, sinon vous vous retrouveriez avec (a+b)*((a+b)*cd)-d assez rapidement.

 

#à, #de, algorithmes, basé, certains, des, FPGA, lut, mappés, quels, sont, synthèse

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *