Remarque: J'utilise l'ISE de Xilinx et j'ai une carte FPGA avec laquelle travailler (avec des commutateurs et des lumières, etc.), et j'ai piraté ensemble quelques projets simples jusqu'à présent. En même temps, je lis plusieurs tutoriels pour jeter les bases de ce que je fais.
J'ai vu diverses entités et leurs architectures mentionnées dans les documents de référence que j'ai consultés, mais la dénomination est souvent déroutante. Souvent au lieu de "architecture rtl de .." ou "architecture structurelle de ..." je verrai "architecture foo de ..." ou même "architecture arch of ..."
Je me rends compte (tardivement) que le nom de l'architecture est tout aussi arbitraire que la dénomination d'entité, bien qu'il existe des guides de style qui suggèrent que des conventions de dénomination plus cohérentes peuvent être utilisées pour éviter ce problème. Cela m'amène à quelques questions:
En regardant une entité, comment peut-on déterminer le modèle architectural réel utilisé sans indication du nom de l'architecture? RTL, comportemental, structurel ... ils semblent être assez similaires à l'œil de mon apprenant (en supposant que les exemples que j'ai vus étaient en fait nommés correctement). Un exemple simple mais évident serait utile ici (ou un pointeur vers l'un).
Si vous spécifiez plusieurs architectures pour une seule entité (ce qui, je crois, est possible), donnez-vous simplement des noms différents aux architectures dans le même fichier ou ...?
Les noms d'architecture sont-ils confinés à une entité donnée (autrement dit, y a-t-il un problème avec les "espaces de noms" en utilisant le même nom d'architecture sur plusieurs entités)?
Modifier: et un de plus:
- Il semble qu'il y ait une distinction entre RTL et comportemental, mais comme mentionné ci-dessus, je ne le vois pas vraiment dans les exemples que j'ai vus (souvent je ne vois qu'une seule architecture définie). Une architecture est-elle plus courante que les autres?
Ce que je cherchais est un projet multi-composants complet mais simple (petits composants), écrit en utilisant les meilleures pratiques (dénomination correcte, pas tous entassés dans un seul fichier, etc.) mais je n'ai pas encore trouvé un. Je trouve que les exemples de projets correctement conçus sont très utiles pour éclairer les principes de base et les meilleures pratiques. Si vous connaissez un tel exemple de projet, je vous serais reconnaissant de bien vouloir également pointer ce point. (Si rien d'autre, peut-être qu'une fois que j'aurai compris cela, je pourrai partager l'un des miens ...)
la source
arch
, et je me concentre plutôt sur le fait de donner aux entités des noms raisonnables. Dans les rares cas où j'ai plus d'une architecture pour une entité, je leur donne simplement d'autres noms. Cependant, pour moi,behavioural
cela implique vraiment du code qui n'est pas possible ou qui n'est pas destiné à être synthétisé. De plus, j'ai toujours eu l'idée que lertl
nom convient à tous les HDL destinés à la synthèse, quel que soit le niveau d'abstraction. (Je pourrais, comme toujours, me tromper sur l'un de ces points, mais c'était ma compréhension de l'utilisation de ces mots.)Voici les types d'architecture:
Comportemental:
Notes générales:
Notes spécifiques à Xilinx
De construction:
Définition générale
Notes spécifiques à Xilinx
Les éléments ci-dessus sont essentiellement les deux principaux animaux traditionnels de l'architecture. Très souvent, une définition "mixte" est utilisée, qui contient les propriétés des deux.
RTL:
RTL ce qui est réellement mis sur le FPGA à la fin de la journée. Il s'agit donc d'un code synthétisable qui définit le comportement du système et se compose d'une hiérarchie de code:
les couches inférieures seront synthétisables comportementales, où le détail du comportement du signal est défini, et les niveaux supérieurs seront structurels, où le les composants comportementaux sont liés entre eux pour créer un "diagramme" de haut niveau si vous voulez.
Sur plusieurs architectures:
Les architectures peuvent être toutes dans un seul fichier ou dans plusieurs fichiers. La seule chose importante est que l'entité soit compilée en premier et que l'architecture à utiliser soit spécifiée.
Ce livre est très pratique et détaille assez bien ce genre de chose.
Il n'y a pas de règle stricte sur la façon dont les choses devraient être faites en termes de modèles comportementaux et structurels distincts ou simplement de les mélanger. Habituellement, dans les énormes conceptions de micrologiciels (ou dans les grandes entreprises où le code est partagé et réutilisé), il est utile de faire la distinction entre les deux pour simplifier les choses, mais en fin de compte, cela revient à ce qui fonctionne pour vous.
la source
Tout d'abord, les conceptions d'architecture du monde réel ne peuvent pas être strictement catégorisées de cette façon. Pourquoi vous limiter? Vous voudrez peut-être instancier d'autres entités et les connecter "structurellement", mais ajoutez un processus ou une affectation simultanée ici et là pour ajouter une logique "rtl", et peut-être utiliser des modèles de codage "comportementaux" afin que le synthétiseur comprenne certaines des des détails qui ne vous intéressent pas (comme ajouter sans instancier spécifiquement un additionneur avec des paramètres de zone / pipelining / performance), le tout dans la même architecture.
Plus important encore, vous devez comprendre ce qui est synthétisable dans les technologies asic / fpga actuelles et ce qui ne l'est pas, et cela indépendamment du modèle d'architecture.
Une entité peut être implémentée de plusieurs manières, même en autorisant des comportements légèrement différents, vous pouvez donc avoir plusieurs architectures pour la même entité. De plus, vous pouvez avoir une architecture de simulation uniquement (généralement non synthétisable) qui peut simuler plus rapidement que la "vraie" version, ce qui peut être utile lors du test de bancs de grands modèles dans leur ensemble. Vous donneriez à ces architectures des noms qui vous aideront à vous souvenir de ce qui les rend différentes des autres, et simplement bhv / str / rtl n'est généralement pas suffisant ou précis, étant donné la nature hybride des conceptions du monde réel.
Concernant vos questions spécifiques, la déclaration d'architecture est liée à un nom d'entité, il n'y a donc aucun problème d'espace de nom avec les architectures du même nom pour différentes entités. Utilisez simplement des noms différents pour les architectures de la même entité.
Les architectures peuvent résider dans différents fichiers, il vous suffit de vous assurer que la déclaration d'entité est d'abord compilée.
Vous pouvez sélectionner l'architecture à utiliser lors de l'instanciation de l'entité ou à l'aide d'instructions de configuration. Si vous ne le faites pas, la valeur par défaut est «généralement» la dernière architecture que le compilateur a vue pour une déclaration d'entité donnée.
la source