Difference between revisions of "FpgaArchitecture"

From ArmadeusWiki
Jump to: navigation, search
(La composition du système Wishbone)
(La composition du système Wishbone)
Line 88: Line 88:
  
 
=== i.MX Wrapper ===
 
=== i.MX Wrapper ===
 +
  
  
 
=== Syscom ===
 
=== Syscom ===
  
 
+
C'est le composant le plus simple du système, il ne fait que synchroniser le signal RESET en entrée avec le signal d'horloge du système.
=== Gestionnaire d'interruption ===
+
  
  
 
=== Intercon ===
 
=== Intercon ===
 +
 +
 +
=== Les composants esclaves ===
 +
 +
Pour qu'une IP puisse être facilement incluse dans le système, il faut une certaine organisation. Sinon, à moyen ou à long terme cette IP est morte parce qu'elle sera difficilement exploitable et encore plus difficilement maintenable.
 +
Ceux sont des notions pas simple à prendre en considération lors du développement d'un nouveau projet, mais lorsque l'on doit se replonger dans un travail fait par quelqu'un d'autre ou un projet qu'on a laissé en sommeil pendant quelque temps, on est content d'avoir quelque chose à quoi se raccrocher.
 +
Pour développer efficacement, il faut assurer une organisation logique, figée et compréhensible, et le plus simple dans ce genre de cas est de se baser sur la notion de répertoire. Voici les répertoires qui doivent être utilisés par une IP:
 +
* '''doc''': Ce répertoire va contenir toute la documentation nécessaire à l'exploitation de l'IP. On y trouvera une notice ('''readme.txt'''), un fichier de suivit de modification ('''ChangeLog.txt'''), un fichier contenant les évolutions futures prévues ('''todo.txt''') ainsi que tout autre fichier estimé utile par le(s) créateur(s) de l'IP.
 +
* '''hdl''': Ce répertoire va contenir tous les fichiers VHDL (ou Verilog) qui auront été développés spécifiquement pour cette IP.
 +
* '''inc''': Ce répertoire va contenir un fichier d'en-tête ANSI C contenant l'adresse de tous les registres interne de l'IP pour permettre de créer simplement un programme en langage C permettant de contrôler l'IP. '''''Ce répertoire est optionnel et ne s'applique évidement qu'à des IPs ayant une interface de type Wishbone.'''''
 +
* '''HAL''': Ce répertoire va contenir un drivers ou un exemple de logiciel de base permettant l'utilisation de l'IP par un microprocesseur/contrôleur. '''''Ce répertoire est optionnel et ne s'applique évidement qu'à des IPs ayant une interface de type Wishbone.'''''
 +
 +
=== Gestionnaire d'interruption ===

Revision as of 23:49, 13 December 2006

Spécifications de conception du FPGA

But

Cette page a été créée pour permettre à tous les membres de l'association de discuter de l'architecture qui va être mise en place pour le FPGA présent sur la carte APF9328.

Cette espace doit être vu comme un espace d'échange d'idées. Tout le monde est convié à y participer. Il est préférable d'avoir quelques connaissances en électronique et sur les langages HDL (VHDL ou Verilog), mais ce n'est pas une obligation.

Bonne lecture et merci pour votre participation.

Les grandes lignes

Le FPGA de la carte APF9328 est là pour offrir le maximum de souplesse au projet Armadeus et permettre d'implanter des fonctionnalités coté matériel qui seraient trop pénalisantes ou impossibles à implanter coté logiciel. Bien entendu, pour que cela soit exploitable, il faut également disposer d'un lien entre le FPGA et le processeur i.MX.

Pour réaliser cela, il faut mettre en place un bus de communication entre le FPGA et l'i.MX. Ce bus de communication va permettre le pilotage des fonctionnalités qui seront implantées dans le FPGA. Bref, il faut recréer à l'intérieur du FPGA un bus tel qu'il existe entre l'i.MX et les différents composants de la carte (RAM, Flash, USB, Ethernet, etc.).

Pour gagner en temps de développement et pour pouvoir récupérer des fonctionnalités ou IP (Intellectual Property) déjà existantes, le bus Wishbone a été retenu. Ce bus, dont les spécification ont été placées dans le domaine public, a été conçu spécifiquement pour ce genre de configuration et sur le site www.opencores.com plusieurs IP compatibles avec les spécifications Wishbone sont disponibles.

Le bus Wishbone

La spécification Wishbone décrit un certain nombre de composants de base:

  • Des interfaces maitres, ces interfaces sont implantés dans des composants qui seront alors capable d'initier les transferts sur le bus Wishbone
  • Des interfaces esclaves, ces interfaces sont implantés dans des composants capables de répondre à des demandes de transferts
  • Un composant syscon, ce composant va générer le signal d'horloge qui sera utilisé par tous les composants/interfaces du bus ainsi que le signal de RESET synchrone.
  • Un macro composant intercon, ce composant va gérer la connexion de toutes les interfaces maitres et esclaves qui composent le bus interne. Il prend en charge :
    • Le décodage/transcodage d'adresse (génération des signaux A0 à A3 selon le mode d'adressage 8/16/32/64 bits)
    • le routage du bus de données entre les différentes interfaces maitres et esclaves (conversion big endian/little endian, etc)
    • le routage/génération des signaux de contrôle du bus (Read, Write, Chip Select, Output Enable, ACK, etc.)
  • Un composant arbitre, ce composant va permettre de partager l'accès au bus ou à un composant de type esclave qui est partagé par plusieurs composants de type maitre.


Les spécifications du bus Wishbone permettent de créer différents types de bus:

  • Point to Point': Un composant avec une interface type maitre connecté à un composant avec une interface de type esclave.
  • Data Flow: C'est un bus en cascade, à un bout on trouve un composant avec une interface de type maître et à l'autre bout un composant avec une interface de type esclave. Entre les deux composant se trouve une chaine d'un ou plusieurs composants avec une interface de type maitre et de type esclave.
  • Shared: C'est un bus sur lequel plusieurs composants sont connectés dessus. Tous les composants se partagent ce bus. Si plusieurs maitres sont connectés sur ce bus, un seul pourra initier un transfert à un instant donné.
  • CrossBar: C'est également un bus de type partagé, par contre dans se cas, on dispose de plusieurs bus. Chaque maitre utilise sont propre bus pour communiquer avec ces esclaves. On peut donc avoir plusieurs transferts en simultané. Le seul cas de blocage/arbitrage est le transfert de plusieurs maitre avec le même esclave.


Il existe également un certain nombre de mécanismes dans la spécification Wishbone pour permettre d'optimiser les temps de transferts sur le bus. Ces optimisations sont de plusieurs nature:

  • utilisation de signaux ACK, ERR et RTY pour signaler la fin de transfert
  • les Registered Feedback Bus Cycles, qui permettent de gagner un cycle d'horloge pour des transferts consécutifs
  • les transferts en mode Burts

Le lien i.MX <=> FPGA

La communication entre l'i.MX et le FPGA passe par les signaux suivants (à vérifier):

  • des signaux de contrôle: RW_n, OE_n, EB_n[3..2] et CS1_n
  • le bus de données sur 16 bits (D[15..0])
  • le bus d'adresses sur 12 bits (A[12..1])

Ces signaux sont alors utilisés pour créer une interface Wishbone maitre qui va permettre de communiquer efficacement avec les autres IPs contenus dans le FPGA qui implémenterons une interface wishbone de type esclave.

Etant donné les erratas du composant i.MX concernant le signal DTACK, il n'est pas possible d'implanter une interface Wishbone maitre classique. Ceci entraine les limitations suivantes:

  • Pas possible d'utiliser le signal ACK Wishbone pour terminer le transfert entre FPGA et i.MAX.
  • Pas possible de mettre en place des optimisations du temps de transfert.


Pour contrer ce problème, il faudra s'assurer que toutes les interfaces esclaves qui seront connectées à l'interface maitre du composant Wishbone i.MX répondent dans un temps fixe donné.
Comme le bus Wishbone est un bus entièrement synchrone, le temps minimal d'un transfert est de 2 cycles de l'horloge Wishbone. Il faut ajouter à cela, un cycle pour la synchronisation des signaux du bus i.MX. Cela nous fait donc un minimum de 3 cycles Wishbone pour un transfert entre le FPGA et l'i.MX.

Etant donné les performances des FPGA actuels, on peut tabler sur une fréquence de fonctionnement d'au moins 100MHz pour le bus Wishbone. Cela nous donne donc un taux de transfert approximatif de 66M octets/sec (100MHz * 16bits / 3).


La composition du système Wishbone

FPGA Armadeus.png

Le système Wishbone qui sera implanté dans le FPGA se compose des éléments suivants:

  • i.MX Wrapper: L'interface i.MX vers le bus Wishbone
  • Syscon: Ce composant va gérer les signaux CLK (généré par une PLL) et RESET (synchrone).
  • Intercon: Ce composant devra être généré automatiquement par une moulinette, il va faire le lien entre tous les composants faisant parti du Système Wishbone.
  • Gestionnaire d'interruption: Ce composant est un esclave wishbone et va centraliser toutes les demandes d'interruption et le remontées vers l'i.MX.
  • Esclaves whisbone: Ceci représentent tous les autres composants avec une interface wishbone esclave qui sont accessibles via le wrapper i.MX.


Sur le diagramme, il manque un certain nombre de choses:

  • Les signaux non wishbone en entrée ou en sortie sur les esclaves wishbone
  • Le macro composant système wishbone. Ce macro composant est celui qui sera ensuite instancié dans le design du FPGA. Sur ce composant ne seront visible que les signaux externes au système:
    • Les signaux issus de l'i.MX
    • Le signal RESET (en entrée) qui sera synchronisé sur l'horloge système
    • Le signal CLK (en entrée) qui sera l'horloge utilisée pour la génération des signaux Wishbone
    • Le signal IRQ (en sortie) qui sera utilisé pour remonter les demandes d'interruption vers l'i.MX
    • Les signaux d'entrée et de sortie spécifiques au autres composants connectés sur le bus Wishbone


L'intérêt de créer le composant Système Wishbone, c'est que cela simplifie la vision dans l'outil conception du FPGA. Il ne suffit plus alors qu'a relier les signaux sur les broches correspondante du FPGA.

i.MX Wrapper

Syscom

C'est le composant le plus simple du système, il ne fait que synchroniser le signal RESET en entrée avec le signal d'horloge du système.


Intercon

Les composants esclaves

Pour qu'une IP puisse être facilement incluse dans le système, il faut une certaine organisation. Sinon, à moyen ou à long terme cette IP est morte parce qu'elle sera difficilement exploitable et encore plus difficilement maintenable. Ceux sont des notions pas simple à prendre en considération lors du développement d'un nouveau projet, mais lorsque l'on doit se replonger dans un travail fait par quelqu'un d'autre ou un projet qu'on a laissé en sommeil pendant quelque temps, on est content d'avoir quelque chose à quoi se raccrocher. Pour développer efficacement, il faut assurer une organisation logique, figée et compréhensible, et le plus simple dans ce genre de cas est de se baser sur la notion de répertoire. Voici les répertoires qui doivent être utilisés par une IP:

  • doc: Ce répertoire va contenir toute la documentation nécessaire à l'exploitation de l'IP. On y trouvera une notice (readme.txt), un fichier de suivit de modification (ChangeLog.txt), un fichier contenant les évolutions futures prévues (todo.txt) ainsi que tout autre fichier estimé utile par le(s) créateur(s) de l'IP.
  • hdl: Ce répertoire va contenir tous les fichiers VHDL (ou Verilog) qui auront été développés spécifiquement pour cette IP.
  • inc: Ce répertoire va contenir un fichier d'en-tête ANSI C contenant l'adresse de tous les registres interne de l'IP pour permettre de créer simplement un programme en langage C permettant de contrôler l'IP. Ce répertoire est optionnel et ne s'applique évidement qu'à des IPs ayant une interface de type Wishbone.
  • HAL: Ce répertoire va contenir un drivers ou un exemple de logiciel de base permettant l'utilisation de l'IP par un microprocesseur/contrôleur. Ce répertoire est optionnel et ne s'applique évidement qu'à des IPs ayant une interface de type Wishbone.

Gestionnaire d'interruption