Difference between revisions of "Orchestra"
m (→La bibliothèque de composants) |
m |
||
Line 14: | Line 14: | ||
* un projet Xilinx '''complet''', c'est-à-dire que l'on pourra lancer les outils Xilinx en ligne de commande avec ce projet et générer ainsi les fichiers nécessaires pour le fonctionnement du FPGA. Ce projet pourra également servir de base et être compléter par l'utilisateur pour y inclure d'autres fonctionnalités n'ayant aucun lien avec l'i.MX. | * un projet Xilinx '''complet''', c'est-à-dire que l'on pourra lancer les outils Xilinx en ligne de commande avec ce projet et générer ainsi les fichiers nécessaires pour le fonctionnement du FPGA. Ce projet pourra également servir de base et être compléter par l'utilisateur pour y inclure d'autres fonctionnalités n'ayant aucun lien avec l'i.MX. | ||
* un projet ''Device Driver'', cette sortie est '''optionnelle''' et dépendra fortement du type de composants utilisés lors de la construction du système. En effet, ces composants devront inclure une partie driver. | * un projet ''Device Driver'', cette sortie est '''optionnelle''' et dépendra fortement du type de composants utilisés lors de la construction du système. En effet, ces composants devront inclure une partie driver. | ||
+ | |||
+ | == Format de base des fichiers XML == | ||
+ | |||
+ | Avant de donner plus de détails sur les fichiers XML traités et/ou générés par Orchestra, voici quelques règles de codage qui seront globalement appliquées : | ||
+ | * Tous les fichiers XML commencent avec une entête définissant le type de codage utilisé pour les caractères. | ||
+ | * Toutes les balises et tous les attributs des balises sont en minuscule. | ||
+ | * Un fichier XML décrit un seul élément, le noeud de base permettra d'identifier le contenu du fichier : | ||
+ | ** '''component''': pour un composant | ||
+ | ** '''board''': pour une plateforme | ||
+ | ** '''project''': pour un projet | ||
+ | * Le corps d'une balise est utilisé pour la description ou un commentaire relatif à l'élément représenté par la balise. Afin de ne pas avoir de problème liés aux caractères ou séquences d'échappement XML, ces textes seront placés dans une section '''CDATA'''. Ainsi il sera possible de saisir du code XML ou HTML pour faire de la mise en page par exemple. | ||
+ | |||
+ | Voici un extrait de fichier XML pour un composant à titre d'illustration | ||
+ | <pre> | ||
+ | <?xml version="1.0" encoding="utf-8"?> | ||
+ | <component name="irq_mngr" version="1.0" category="base"> | ||
+ | |||
+ | <description> | ||
+ | <![CDATA[ | ||
+ | The Interruption Manager is a Wishbone slave component and Armadeus compiliant. | ||
+ | ]]> | ||
+ | </description> | ||
+ | ... | ||
+ | </component> | ||
+ | </pre> | ||
+ | |||
== La bibliothèque de composants == | == La bibliothèque de composants == | ||
Line 22: | Line 48: | ||
* un fichier XML qui va décrire entièrement le composant | * un fichier XML qui va décrire entièrement le composant | ||
− | Nous allons maintenant nous intéresser au contenu de ce fichier XML | + | Nous allons maintenant nous intéresser au contenu de ce fichier XML et en premier lieu avec les attributs dont dispose le noeud de base '''component''': |
− | + | * '''name''': le nom du composant (IP), de préférence pas plus de 16 caractères. | |
− | + | * '''version''': la version du composant | |
− | + | * '''category''': la catégorie dans laquelle le composant se situe. Par exemple: base, communication, etc. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
<pre> | <pre> | ||
<component name="irq_mngr" version="1.0" category="base"> | <component name="irq_mngr" version="1.0" category="base"> | ||
Line 38: | Line 59: | ||
Sous le noeud de base se trouve les éléments suivants: | Sous le noeud de base se trouve les éléments suivants: | ||
− | * Le noeud '''description''' (optionnel) qui va contenir une description plus ou moins détaillée du composant | + | * Le noeud '''description''' (optionnel) qui va contenir une description plus ou moins détaillée du composant. |
<pre> | <pre> | ||
<description> | <description> | ||
Line 46: | Line 67: | ||
</description> | </description> | ||
</pre> | </pre> | ||
− | * le noeud '''hdl_files''' va contenir la liste des fichiers VHDL ou Verilog qui composent l'IP. Chaque fichier est placé dans une base '''hdl_file''' et les attributs sont proposés: | + | * le noeud '''hdl_files''' va contenir la liste des fichiers VHDL ou Verilog qui composent l'IP. Chaque fichier est placé dans une base '''hdl_file''' et les attributs suivant sont proposés: |
− | ** '''name''': C'est le nom du fichier | + | ** '''name''': C'est le nom du fichier. Le chemin vers le fichier est donné en relatif par rapport à l'emplacement du fichier XML de description du composant. |
** '''scope''': Cet attribut va permettre de donner la ''portée'' du fichier, c'est-à-dire pour quel utilisation ce fichier est prévu. Voici quelques valeurs pour cet attribut: | ** '''scope''': Cet attribut va permettre de donner la ''portée'' du fichier, c'est-à-dire pour quel utilisation ce fichier est prévu. Voici quelques valeurs pour cet attribut: | ||
*** '''all''': le fichier doit toujours être inclus (valeur par défaut) | *** '''all''': le fichier doit toujours être inclus (valeur par défaut) | ||
*** '''xilinx''': le fichier n'est exploitable que pour des composants/outils de chez Xilinx | *** '''xilinx''': le fichier n'est exploitable que pour des composants/outils de chez Xilinx | ||
− | *** ''' | + | *** '''altera''': le fichier n'est exploitable que pour des composants/outils de chez Altera |
*** '''tb''': le fichier n'est pas synthétisable et ne fonctionne que dans le cadre de bancs de tests. | *** '''tb''': le fichier n'est pas synthétisable et ne fonctionne que dans le cadre de bancs de tests. | ||
− | ** '''istop''': Cet attribut va permettre d'identifier le fichier '''TOP''' de l'IP. Il n'y a que 2 valeurs possible 0 (valeur par défaut) ou 1 (pour indiquer le fichier TOP). | + | ** '''istop''': Cet attribut va permettre d'identifier le fichier '''TOP''' de l'IP. Il n'y a que 2 valeurs possible 0 (valeur par défaut) ou 1 (pour indiquer le fichier TOP). Il faut définir au moins 1 fichier TOP. Si plusieurs fichiers TOP sont déclarés, par exemple si une IP est spécialisable en fonction du type de carte, toutes les entités des fichiers TOP doivent avoir la même signature. |
<pre> | <pre> | ||
<hdl_files> | <hdl_files> | ||
Line 59: | Line 80: | ||
</hdl_files> | </hdl_files> | ||
</pre> | </pre> | ||
− | * le noeud '''generic_map''' est utilisé pour contenir la déclaration des paramètres GENERIC | + | * le noeud '''generic_map''' est utilisé pour contenir la déclaration des paramètres GENERIC disponibles sur l'élément TOP de l'IP si celui-ci est un fichier VHDL. Chaque entrée GENERIC de l'IP va être représentée par une balise '''generic''' qui va entièrement décrire la paramètre à l'aide des attributs suivants: |
** '''name''': C'est le nom du paramètre GENERIC qui doit être identique au nom utilisé dans l'IP | ** '''name''': C'est le nom du paramètre GENERIC qui doit être identique au nom utilisé dans l'IP | ||
** '''type''': C'est le type de paramètre, dans un premier temps, uniquement les types suivants sont supportés: | ** '''type''': C'est le type de paramètre, dans un premier temps, uniquement les types suivants sont supportés: |
Revision as of 17:57, 16 January 2007
Vue d'ensemble du système Orchestra
Une image étant souvent plus explicite qu'un long texte, voici, schématiquement, le principe de fonctionnement retenu pour Orchestra.
On peut reconnaitre de ce schéma, que le système se repose sur:
- une bibliothèque de composants Armadeus Ready
- une bibliothèque de plateformes
- un projet
- une liste de fichiers modèles
A l'aide des ces composants le processeur orchestra va générer:
- un projet Xilinx complet, c'est-à-dire que l'on pourra lancer les outils Xilinx en ligne de commande avec ce projet et générer ainsi les fichiers nécessaires pour le fonctionnement du FPGA. Ce projet pourra également servir de base et être compléter par l'utilisateur pour y inclure d'autres fonctionnalités n'ayant aucun lien avec l'i.MX.
- un projet Device Driver, cette sortie est optionnelle et dépendra fortement du type de composants utilisés lors de la construction du système. En effet, ces composants devront inclure une partie driver.
Format de base des fichiers XML
Avant de donner plus de détails sur les fichiers XML traités et/ou générés par Orchestra, voici quelques règles de codage qui seront globalement appliquées :
- Tous les fichiers XML commencent avec une entête définissant le type de codage utilisé pour les caractères.
- Toutes les balises et tous les attributs des balises sont en minuscule.
- Un fichier XML décrit un seul élément, le noeud de base permettra d'identifier le contenu du fichier :
- component: pour un composant
- board: pour une plateforme
- project: pour un projet
- Le corps d'une balise est utilisé pour la description ou un commentaire relatif à l'élément représenté par la balise. Afin de ne pas avoir de problème liés aux caractères ou séquences d'échappement XML, ces textes seront placés dans une section CDATA. Ainsi il sera possible de saisir du code XML ou HTML pour faire de la mise en page par exemple.
Voici un extrait de fichier XML pour un composant à titre d'illustration
<?xml version="1.0" encoding="utf-8"?> <component name="irq_mngr" version="1.0" category="base"> <description> <![CDATA[ The Interruption Manager is a Wishbone slave component and Armadeus compiliant. ]]> </description> ... </component>
La bibliothèque de composants
Un composant Armadeus Ready se compose des éléments suivants:
- un ensemble de fichiers HDL (VHDL ou Verilog)
- un ensemble de fichiers C et H (optionnel)
- un fichier XML qui va décrire entièrement le composant
Nous allons maintenant nous intéresser au contenu de ce fichier XML et en premier lieu avec les attributs dont dispose le noeud de base component:
- name: le nom du composant (IP), de préférence pas plus de 16 caractères.
- version: la version du composant
- category: la catégorie dans laquelle le composant se situe. Par exemple: base, communication, etc.
<component name="irq_mngr" version="1.0" category="base"> ... </component>
Sous le noeud de base se trouve les éléments suivants:
- Le noeud description (optionnel) qui va contenir une description plus ou moins détaillée du composant.
<description> <![CDATA[ The Interruption Manager is a Wishbone slave component and Armadeus compiliant. ]]> </description>
- le noeud hdl_files va contenir la liste des fichiers VHDL ou Verilog qui composent l'IP. Chaque fichier est placé dans une base hdl_file et les attributs suivant sont proposés:
- name: C'est le nom du fichier. Le chemin vers le fichier est donné en relatif par rapport à l'emplacement du fichier XML de description du composant.
- scope: Cet attribut va permettre de donner la portée du fichier, c'est-à-dire pour quel utilisation ce fichier est prévu. Voici quelques valeurs pour cet attribut:
- all: le fichier doit toujours être inclus (valeur par défaut)
- xilinx: le fichier n'est exploitable que pour des composants/outils de chez Xilinx
- altera: le fichier n'est exploitable que pour des composants/outils de chez Altera
- tb: le fichier n'est pas synthétisable et ne fonctionne que dans le cadre de bancs de tests.
- istop: Cet attribut va permettre d'identifier le fichier TOP de l'IP. Il n'y a que 2 valeurs possible 0 (valeur par défaut) ou 1 (pour indiquer le fichier TOP). Il faut définir au moins 1 fichier TOP. Si plusieurs fichiers TOP sont déclarés, par exemple si une IP est spécialisable en fonction du type de carte, toutes les entités des fichiers TOP doivent avoir la même signature.
<hdl_files> <hdl_file name="irq_mgnr.vhd" scope="all" istop="1" /> </hdl_files>
- le noeud generic_map est utilisé pour contenir la déclaration des paramètres GENERIC disponibles sur l'élément TOP de l'IP si celui-ci est un fichier VHDL. Chaque entrée GENERIC de l'IP va être représentée par une balise generic qui va entièrement décrire la paramètre à l'aide des attributs suivants:
- name: C'est le nom du paramètre GENERIC qui doit être identique au nom utilisé dans l'IP
- type: C'est le type de paramètre, dans un premier temps, uniquement les types suivants sont supportés:
- integer: pour définir un nombre entier
- std_logic: pour définir un signal
- std_logic_vector: pour définir un vecteur
- valid: Cet attribut va permettre de définir la ou les valeurs ou plages de valeurs valide pour ce paramètre. Le format de ce champ n'est pas encore totalement défini, soit sous forme d'expression régulière soit sous la forme suivante:
- 1..16 ==> de 1 (inclus) à 16 (inclus)
- 8|16|32 ==> 8 ou 16 ou 32
- 1..16|32 ==> de 1 à 16 ou 32
- value: Cet attribut va permettre de définir la valeur par défaut du paramètre
<generics> <generic name="irq_count" type="integer" value="16" valid="1..16"> <![CDATA[ irq_count gives the maximum allowed interruption sources. ]]> </generic> <generic name="irq_level" type="std_logic" value="1" valid="0|1"> <![CDATA[ irq_level gives the irq output signal active level. ]]> </generic> </generics>