Conception de FPGA et communications inter-FGPA dans le

Transcription

Conception de FPGA et communications inter-FGPA dans le
Université Bordeaux 1
MASTER 2 GSAT option ISEE
Année universitaire 2009/2010
Conception de FPGA
et communications inter-FGPA dans le cadre
du projet de recherche DreamWafer™
Rapport de Stage
Romain Clochard
Stage réalisé du 15 mars au 31 août 2010 :
Université du Québec à Montréal
Département Informatique – Laboratoire de Génie Microélectronique
CP8888 Montréal, H3C3P8, Québec, Canada
Responsable : Yves Blaquière
REMERCIEMENTS
Je tiens à remercier dans un premier temps M.Yves Blaquière, mon responsable de stage,
directeur des programmes en microélectronique de l'UQAM et directeur de recherche
DreamWafer™ pour sa disponibilité, son écoute et son aide précieuse.
Je remercie les différents partenaires et collègues de ce projet, au sein de l'UQAM et des
autres universités participant à ce projet.
Enfin je remercie Gestion Technocap Inc., le partenaire industriel principal du projet
DreamWafer™ pour la confiance témoignée à mon égard ainsi que pour les conseils de
Richard Prytula et Richard Norman.
Table des matières
RÉSUMÉ............................................................................................................................... 1
ABSTRACT.......................................................................................................................... 2
MOTS-CLEFS......................................................................................................................3
INTRODUCTION................................................................................................................4
CHAPITRE 1 : PROJET DREAMWAFER™...................................................................5
1.1 Présentation des Laboratoires.......................................................................................5
1.2 Organisation du Projet..................................................................................................5
1.3 Objectifs de DreamWafer™.........................................................................................6
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™ ........................8
2.1 Le WaferBoard™ de l'intérieur....................................................................................8
2.1.1 WaferIC™ : description structurelle......................................................................9
2.1.1 WaferIC™ : description fonctionnelle.................................................................10
2.1.2 Réticules et Power Blocks...................................................................................10
2.2 Protocoles de communications...................................................................................11
2.2.1 Architecture.........................................................................................................12
2.2.2 Décisions sur le type de protocole.......................................................................13
2.2.3 Définition des Trames.........................................................................................14
2.2.4 Communications entre le Bottom PCB et les Power Blocks...............................15
a) Trame BOT-PB (Frame BOT-PB)...................................................................15
b) Trame PB-BOT (Frame PB-BOT)...................................................................17
c) Trame Erreur PB (Frame Error PB).................................................................18
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK................................19
3.1 Choix technologiques.................................................................................................19
3.1.1 FPGA Actel Igloo AGL060.................................................................................19
3.1.1 Régulateur iP1202...............................................................................................20
3.2 Conception du bloc-diagramme..................................................................................20
3.2.1 « Top-Level »......................................................................................................20
3.2.2 Bloc de réception frame_rx.................................................................................23
a) Horloge et données entrantes...........................................................................23
b) Dispatcher.......................................................................................................24
3.2.3 FIFOs.................................................................................................................. 24
3.2.4 Registres.............................................................................................................. 25
3.2.5 Génération des signaux JTAG.............................................................................25
a) Fonctionnement de reticule_fsm.....................................................................25
b) Fonctionnement de jtag_fsm...........................................................................27
3.2.6 Bloc de transmission frame_tx............................................................................29
3.3 Précisions sur la programmation VHDL des blocs.....................................................29
3.3.1 Librairies et Packages.........................................................................................29
3.3.2 Registres et Machines à états..............................................................................29
3.3.3 Blocs FIFO..........................................................................................................30
3.3.4 Génération de TCK.............................................................................................30
3.3.5 Débogage............................................................................................................30
3.4 Environnement de Travail..........................................................................................30
3.4.1 Outils logiciels....................................................................................................30
3.4.2 Scripts et Simulation...........................................................................................31
3.5 Environnement de Test...............................................................................................31
3.5.1 Objectifs.............................................................................................................. 32
3.5.2 Réalisation..........................................................................................................32
3.5.3 Utilisation............................................................................................................ 32
3.5.4 Vecteurs de tests pour le débogage......................................................................35
3.6 Synthèse et tests sur carte d'évaluation.......................................................................36
CHAPITRE 4 : BILAN PERSONNEL.............................................................................37
4.1 Planification du travail personnel...............................................................................37
4.2 Organisation du projet................................................................................................37
4.3 Expérience vécue........................................................................................................38
CONCLUSION...................................................................................................................39
Glossaire.............................................................................................................................. 40
Références Bibliographiques.............................................................................................41
ANNEXES........................................................................................................................... 42
ANNEXE 1......................................................................................................................43
Spécifications Protocoles.....................................................................................43
ANNEXE 2......................................................................................................................59
Protocole JTAG...................................................................................................59
ANNEXE 3......................................................................................................................62
Cas de simulation................................................................................................62
ANNEXE 4......................................................................................................................65
Rapports Phase 11...............................................................................................65
ANNEXE 5......................................................................................................................68
Présentation CD / Contenu SVN.........................................................................68
RÉSUMÉ............................................................................................................................. 70
Index des Figures
Figure 1-1: Organisation du Projet.........................................................................................5
Figure 1-2: Fonctionnement du WaferBoard™.......................................................................6
Figure 2-1: Structure Physique du WaferBoard™..................................................................8
Figure 2-2: Structure du WaferIC™.......................................................................................9
Figure 2-3: Structure Interne d'un Réticule...........................................................................11
Figure 2-4: Architecture des communications dans le WaferBoard™..................................12
Figure 2-5: Protocoles dans le WaferBoard..........................................................................14
Figure 2-6: Trame BOT-PB..................................................................................................15
Figure 2-7: Trame PB-BOT..................................................................................................17
Figure 2-8: Trame Erreur PB................................................................................................18
Figure 3-1: Communications du FPGA................................................................................19
Figure 3-2: Bloc-Diagramme "Top-Level"...........................................................................21
Figure 3-3: Bloc-Diagramme frame_rx................................................................................24
Figure 3-4: Machine à états du bloc reticule_fsm.................................................................26
Figure 3-5: Exemple de référence pour l'envoi de signaux vers les réticules........................27
Figure 3-6: Machine à états du bloc jtag_fsm.......................................................................28
Figure 3-7: Arborescence des fichiers VHDL.......................................................................29
Figure 3-8: Scripts de simulation..........................................................................................31
Figure 3-9: Interface de l'environnement de test...................................................................33
Figure 3-10: Méthode de test employée................................................................................33
Figure 3-11: Fichier LogFileIn (trames pour simulation).....................................................34
Figure 3-12: Fichier LogFileOut (résultats simulation)........................................................35
Figure 4-1: Diagramme de Gantt..........................................................................................37
RÉSUMÉ
RÉSUMÉ
Ce stage s'inscrit dans le projet de recherche DreamWafer™ qui vise à développer
une plateforme de prototypage rapide pour les systèmes électroniques appelée
WaferBoard™. L'ambition du projet est de réaliser pour les systèmes électroniques ce
que les FPGA sont aux microprocesseurs : rendre possible une reprogrammation
complète du circuit.
L'utilisateur du WaferBoard™ place les composants sur la surface du WaferIC™ et
referme un couvercle : les composants sont repérés, identifiés, alimentés. Les
connexions entres les circuits peuvent être configurées : le prototype est prêt à
fonctionner.
Pour son fonctionnement interne, le WaferBoard™ comprend plusieurs PCB équipés
de FPGAs.
Ce document porte sur ma contribution à ce projet sur les points suivants :
• La création des protocoles de communication entre FPGA ainsi que la
rédaction des spécifications.
• La conception ou « design » des FPGA des Power Blocks (circuits imprimés
inclus dans le WaferBoard™ ) en langage VHDL.
• La mise au point d'un environnement de test en langage C++, conforme aux
spécifications établies et permettant un débogage avancé du design.
Ces travaux constituent une première étape importante dans le design des FPGA des
autres PCB ainsi que dans la création du logiciel qui pilotera le WaferBoard™.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 1
ABSTRACT
ABSTRACT
This internship was done within the context of the DreamWafer™ project which aims
at the creation of a new rapid prototyping system for electronic systems. The goal of
this project is to design a reprogrammable electronic system as FPGAs can be for
microprocessors.
The WaferBoard™ user simply places components on the WaferIC™ and closes the
cover : components are sensed, identified and powered. Connexions between
components can be established : the prototype is ready to run.
The Waferboard internal architecture includes PCBs with FPGA.
My contributions to this innovative project were :
• The creation of the WaferBoard™ communications protocols and
specifications writing.
• The Power Block FPGA design with VHDL description (a Power Block is a
small substrate flip-chipped onto the back of the Wafer)
• The creation of an environment test according to the protocols specifications in
order to debug the Power Block Design (developed in C++)
This work is a first step toward the FPGA design of others PCBs and the creation of
the WaferBoard™ software.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 2
MOTS-CLEFS
MOTS-CLEFS
PROTOTYPAGE
PCB
PROTOCOLES
FPGA
VHDL
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 3
INTRODUCTION
INTRODUCTION
Les systèmes électroniques modernes comportent de nombreux composants intégrés dans un
même circuit.
Le coût de développement de ces systèmes est élevé, notamment en raison de la fabrication
de prototypes.
Le projet DreamWafer™ vise à réaliser une plateforme de prototypage rapide de systèmes
électroniques. Il va permettre de réduire considérablement le temps de développement des
systèmes électroniques : de quelques mois à quelques minutes ! Il permettra également de
réduire le coût de fabrication du prototype : le circuit pourra être mis en fonction avant sa
fabrication !
C'est pour ce projet et dans le cadre du Master 2 GSAT (Génie des Systèmes pour
l'Aéronautique et les Transports) option ISEE (Ingénierie des Systèmes Électroniques
Embarqués), que j'ai effectué ce stage du 15 mars au 31 août 2010. Il s'est effectué au sein
du laboratoire de génie microélectronique du département d'informatique de l'Université du
Québec à Montréal (UQÀM) au Canada.
Ce document présente tout d'abord l'organisation du projet, puis mes contributions sur les
protocoles de communication, le design du FPGA du Power Block et son environnement de
test. Enfin un bilan personnel de cette expérience est dressé.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 4
CHAPITRE 1 : PROJET DREAMWAFER™
CHAPITRE 1 : PROJET DREAMWAFER™
1.1 Présentation des Laboratoires
La faculté des sciences de l'Université du Québec à Montréal possède, au sein de son département
d'informatique un laboratoire de génie microélectronique. Ce stage s'est déroulé en majeur partie au
sein de ce laboratoire qui est équipé d'appareils et de logiciels qui répondent aux normes de
l'industrie. Une dizaine de professeurs sont impliqués dans le programme de génie
microélectronique.
Dans le cadre de ce stage, j'ai aussi pu profiter des installations du groupe de recherche en
microélectronique (GRM) de l'École Polytechnique de Montréal.
1.2 Organisation du Projet
Le projet DreamWafer™ est né d'une série de brevets et de l'investissement de Gestion TechnoCap
Inc., société basée à Montréal. Le brevet principal a été enregistré fin 2006.
Le système de prototypage rapide en cours de réalisation constitue la partie technique du projet
DreamWafer™ qui rassemble plusieurs universités canadiennes comme l'indique la figure 1-1 :
Figure 1-1: Organisation du Projet
•
•
•
•
l'Université du Québec à Montréal (UQÀM)
l'École Polytechnique de Montréal
l'Université du Québec en Outaouais (UQO)
l'Université du Québec à Trois-Rivières (UQTR)
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 5
CHAPITRE 1 : PROJET DREAMWAFER™
Le chef de projet, coté technique, est M. Yves Blaquière (UQÀM). Chaque étudiant et professeur
apporte une contribution au projet dans son domaine de compétences : mécanique,
thermomécanique, design en microélectronique...
Des réunions mensuelles sont organisées au sein des locaux de Gestion TechnoCap afin de discuter
des résultats obtenus, des travaux à effectuer ainsi que des axes de développement.
Ce projet, outre le soutien de Gestion TechnoCap Inc., voit également la participation directe de
plusieurs entreprises dans la conception du système : Allvia, BrioConcept, Tower Semiconductor,
Sound Design Technologies, Brioconcept. Des partenariats existent également avec des instituts et
entreprises telles que CMC Microsystems, Hyperchip Inc., Natural Sciences and Engineering
Research Council of Canada (NSERC), PROMPT, Precarn, Hydro-Québec Research Institute
(IREQ).
1.3 Objectifs de DreamWafer™
Basé sur de nombreux brevets, DreamWafer™ ouvre de nouvelles possibilités pour les entreprises
spécialisées dans l'électronique et le prototypage [1]. Il a pour ambition de réaliser pour les PCB
(Printed Circuit Board) ce que les FPGA sont aux microprocesseurs, c’est à dire la possibilité de
reprogrammation complète du circuit. Le WaferBoard™, produit en cours de conception dans le
cadre de ce projet, est composé d’un PCB classique pouvant être relié à un ordinateur et d'une
surface sur laquelle placer les composants électroniques : le WaferIC™. Les différentes étapes de
l'utilisation de cet appareil sont détaillées sur la figure 1-2.
Figure 1-2: Fonctionnement du WaferBoard™
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 6
CHAPITRE 1 : PROJET DREAMWAFER™
Comme le montre la figure 1-2, le système relié à l'ordinateur détecte les composants installés (sans
restriction de placement). L'utilisateur fournit ensuite, via le logiciel, une netlist au WaferBoard™.
Le rôle du logiciel est :
• de présenter à l’utilisateur les broches des composants détectés
• de réaliser la séquence de démarrage de la carte (détection des pannes internes et
visualisation de celles-ci)
• de traduire et d'envoyer la netlist fournie par l’utilisateur (il est ensuite possible de
programmer un nombre illimité de netlists)
A terme, le WaferBoard™ embarquera un analyseur logique permettant de dériver n’importe quel
signal et d'enregistrer son comportement dans le temps, le tout de façon entièrement
reprogrammable sur plusieurs millions de connexions. A l’heure actuelle, les meilleurs systèmes
capables de proposer de telles solutions atteignent quelques dizaines de milliers de connexions
seulement, à un coût fortement rédhibitoire.
Les avantages de la solution WaferBoard™ sont multiples :
•
•
•
•
il n’est pas nécessaire de refaire une carte lorsque le prototype est défectueux
la phase de déverminage est beaucoup plus rapide
embarquer un analyseur logique coûte très peu cher (prix de la mémoire), ceux présents sur
le marché sont très coûteux, complexes et difficiles à mettre en place sur un PCB classique
le système est entièrement réutilisable pour des circuits différents
La précédente analogie faite entre les FPGA et le WaferBoard™ peut être poussée jusqu’au niveau
de la production : tout comme les ASIC ont un coût de production inférieur aux FPGA pour de
grands volumes, un design fait à l’aide d’un PCB aurait un coût de production inférieur à un
WaferBoard™ pour un design vendu en grande quantité. Par contre, il est connu qu’un système
réalisé à l’aide de FPGA peut rivaliser en termes de coût de production avec les ASIC pour les
produits complexes vendus en volume modéré.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 7
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
CHAPITRE 2 : COMMUNICATIONS DANS
LE WAFERBOARD™
Ma première contribution à ce projet portait sur l'établissement des protocoles de communication
entre le futur logiciel et les différents PCB équipés de FPGA et la rédaction des spécifications
associées. Une présentation plus avancée du WaferBoard™ est nécessaire afin de comprendre
comment ces protocoles ont été créés. Certains points ne peuvent cependant être détaillés pour des
raisons de confidentialité.
2.1 Le WaferBoard™ de l'intérieur
Le WaferBoard™ est un système de prototypage rapide pour les circuits numériques. Il permet de
tester et valider rapidement des circuits au niveau système. Il permet un placement des composants
insensible à l’alignement contrairement aux PCB où les circuits discrets doivent être soigneusement
alignés sur des plots avant d'être soudés.
Il est notamment composé d'un «substrat programmable», le WaferIC™, et de plusieurs PCB (voir
figure 2-1), tous équipés de circuits logiques programmables (FPGA) :
• 1 Top PCB (relié à l'ordinateur)
• 1 Bottom PCB
• 21 Power Blocks
Figure 2-1: Structure Physique du WaferBoard™
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 8
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
Une poche (« Pouch » sur la figure 2-1) permet le refroidissement des composants placés sur le
WaferIC™.
2.1.1 WaferIC™ : description structurelle
Le WaferIC™ autrement appelé «substrat programmable» est un circuit électronique de type «
wafer scale integration » (WSI), c'est-à-dire un circuit intégré au niveau de la tranche de silicium.
Cette technologie permet la communication de données entre les réticules composant une tranche.
Ces données sont propagées directement par les couches de métallisation intégrées sur la tranche de
silicium.
Une telle approche d’intégration à l’échelle de la tranche offre principalement deux avantages :
• avoir une grande densité de contacts, capables de supporter l'interconnexion des puces les
plus miniaturisées
• permettre une densité d'interconnexions suffisante pour mettre en place des systèmes
entiers
Comme on peut le voir sur la figure 2-2, chaque réticule composant le WaferIC™ est constitué
d'une «mer» de cellules, toutes identiques au niveau physique.
Figure 2-2: Structure du WaferIC™
Les cellules composant le WaferIC™ ne sont différenciées que par le contenu de leur mémoire
interne une fois le circuit configuré. La mémoire interne sert à configurer un crossbar (l'élément de
base du WaferNet) permettant de définir la topologie du système.
Chacune de ces cellules est couverte à sa surface de NanoPads, qui sont autant de points de contact
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 9
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
possibles avec des billes de composants déposés sur le WaferIC™. L'espacement des NanoPads
étant très faible, une bille est en contact avec environ quatre NanoPads, même pour les plus petits
packages. Les NanoPads sont connectés au réseau interne reconfigurable du WaferIC™ appelé
WaferNet [2].
2.1.1 WaferIC™ : description fonctionnelle
Le WaferIC™ remplie principalement les fonctions suivantes :
• il envoie les informations sur le placement des circuits intégrés au logiciel.
• Il reçoit la « netlist » représentant l’interconnexion des broches du système à concevoir, et
effectue les connexions afin de permettre le transfert des signaux.
Cependant, le WaferIC™ ne possède peu ou pas d'intelligence propre afin de minimiser la surface
nécessaire au contrôle logique. En somme, il ne fait que répondre passivement aux commandes
numériques issues du logiciel.
Un système de communication sérielle doit être adopté afin de permettre une communication
bidirectionnelle entre le WaferIC™ et le logiciel installé sur l'ordinateur de l'utilisateur.
Ce système, créé précédemment dans le cadre du projet, est compatible avec le protocole JTAG [3]
décrit en annexe 2 de ce rapport. La logique qui le supporte est répétée de manière uniforme sur
toutes les cellules du WaferIC™ pour respecter la contrainte de design qui exige que chaque cellule
soit autant que possible uniforme.
Il faut également que le système de programmation soit tolérant aux pannes, reconfigurable en
fonction des «zones mortes» du circuit. Ceci a fait l'objet de travaux au sein de l'équipe
DreamWafer™ [4].
Sans entrer très profondément dans le protocole JTAG adapté au WaferIC™ (se référer aux travaux
antérieurs de l'équipe, notamment ceux effectués par Yann Basile-Bellavance), on peut tout de
même préciser que celui-ci supporte 4 modes :
1. Mode diagnostic du WaferIC™ : Il localise les fautes pour en permettre l'évitement.
2. Mode de programmation du WaferNet : accède aux registres “scan” (les registres
accessibles par décalage) d’un ensemble de cellules pour configurer le WaferNet et pour
interconnecter les billes des puces déposées sur le WaferIC™.
3. Mode de contrôle externe : prend en charge les fonctionnalités des cellules voisines. Cette
fonctionnalité est utilisée comme stratégie pour la tolérance aux fautes.
4. Mode de détection de contacts : un contact entre la surface du WaferIC™ et les broches
d’un circuit intégré déposé sur le WaferIC™ est détectable par court-circuit [5] puisque les
broches sont composées de matériaux conducteurs.
2.1.2 Réticules et Power Blocks
Les circuits intégrés sont fabriqués à partir de la répétition d’images essentiellement carrées sur une
tranche de silicium par le principe de la photo-lithographie [6]. La structure ‘imprimée’ de façon
répétitive sur la surface de la tranche est communément appelé un réticule et son empreinte sur la
surface de la tranche n’excède typiquement pas 2,5 cm de coté. Par conséquent, tout design de
circuit intégré à l’échelle de la tranche de silicium (comme le WaferIC™) doit être composé d’un
agencement de cellules régulier à l’échelle de l’image d’un réticule.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 10
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
Un Power Block est un PCB (Printed Circuit Board) miniature « gérant » assurant les fonctions
suivantes :
• alimentation en tension du WaferIC™ par l'intermédiaire d'un régulateur de tension.
• assurer la communication entre le logiciel et le WaferIC™, dans le cadre du protocole JTAG
adapté au WaferIC™. Ceci s'effectue par l'intermédiaire d'un FPGA.
Chaque Power Block étant identique, il est obligatoire d'avoir au moins un lien de communication
par réticule : cette communication se fait selon le protocole JTAG (voir annexe 2). On retrouve
ainsi, par réticule, cinq « ports » correspondant aux signaux JTAG, positionnés de la même manière
sur chaque réticule :
• TCK : signal d'horloge
• TRST : reset
• TMS : signal de contrôle
• TDI : données entrantes
• TDO : données sortantes
L'alimentation en puissance (VDD3.3, VDD1.8 et GND) et les cinq fils JTAG parviennent aux
Power Blocks par des trous gravés dans le silicium, les TSV (Through Silicon Via).
La structure interne d'un réticule est décrite figure 2-3 :
Figure 2-3: Structure Interne d'un Réticule
2.2 Protocoles de communications
Le logiciel installé sur l'ordinateur de l'usager du WaferBoard™ est chargé de l'auto-test, la
configuration, la programmation et le test du système en cours de prototypage. Les données fournies
par l'ordinateur sont des bits de configuration permettant au substrat programmable d'adapter sa
topologie de connexions internes afin d'implémenter une « netlist » représentant les interconnexions
voulues par un ingénieur procédant au design d'un système numérique.
La conception du logiciel n'en est qu'à son tout début, c'est une des tâches « finales » du projet.
À mon arrivée sur ce projet, si « l'architecture matérielle » est connue, les protocoles de
communications entre le logiciel et les PCB équipés de FPGA ne sont pas établis.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 11
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
2.2.1 Architecture
L'architecture des communications a été établie selon la figure 2-4. Les débits y sont indiqués pour
chaque liaison.
Figure 2-4: Architecture des communications dans le WaferBoard™
Le PC envoie des données qui sont relayées, à travers trois PCB, comprenant tous un FPGA :
Le FPGA du Top PCB communique avec le PC, le Bottom PCB ainsi qu'avec les composants placés
sur le WaferIC™, pour la gestion des signaux notamment.
Le FPGA du Bottom PCB est chargé de la redirection des données vers les 21 Power Blocks et de la
gestion de ventilateurs, capteurs et régulateurs.
Les FPGA des Power Blocks, les premiers à être conçus ou « designés » dans ce projet, effectuent
les tâches suivantes :
• la commande d'un régulateur de tension
• l'envoi de signaux JTAG vers les réticules. Ces signaux sont essentiellement des séries de
bits de données TDI (données entrantes dans le protocole JTAG) d'une taille pouvant aller
jusqu'à plusieurs dizaines de kilobits.
• la réception de signaux JTAG provenant des réticules : chaque bit TDI envoyé provoque
automatiquement l'émission d'un bit de données TDO (données sortantes du JTAG).
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 12
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
2.2.2 Décisions sur le type de protocole
Partant de l'architecture de la figure 2-4, deux grands types de protocoles ont émergés des
discussions entre différents membres du projet, notamment sur la manière de commander les
réticules :
Solution 1 (ébauche) :
Header
Data R1 Data R2 Data R3 Data •R4 Data R1
Le header contient des champs : adresse destination, longueur des données (nombre de blocs Data).
Les champs DATA R1 à R4 de la trame contiennent les 4 signaux JTAG (TDI, TCK, TMS, TRST) à
transmettre à chacun des quatre réticules.
Avantages :
• Simplicité du design FPGA
• Possibilité de commander les différents réticules d'un power-block simultanément
Inconvénients :
• Fonctionnement plus lent avec notamment une surcharge des communications (goulot
d'étranglement) au niveau de la liaison entre le PC et le Top PCB (voir figure 2-4)
• Transmission, pour chaque bit de donnée entrant (TDI), des signaux TCK, RST, TMS depuis
le logiciel jusqu'au réticule alors que ceux-ci changent très rarement d'état (RST, TMS) ou
peuvent être reproduits localement par le FPGA (TCK)
Solution 2 (ébauche) :
Header
Command
Data
Le header contient des champs : adresse source, destination, identification trame.
Le champ command est une commande « haut niveau » JTAG (shift data register, test logic reset,
shift instruction register..., voir annexe 2) traduite au niveau du FPGA du Power Block afin de
générer les signaux TMS, TCK et TRST.
Le champ data contient une suite de bits pour le TDI (chaines entières ou fragmentées)
Avantages :
• On ne transmet pas les bits TCK, TRST et TMS à travers tout le WaferBoard™
• Fonctionnement plus rapide que la solution 1 (moins de trafic entre PC et Top PCB)
Inconvénients :
• Difficultés pour envoyer des données à plusieurs réticules simultanément : la taille des
données étant différente pour chaque réticule, le découpage du champ Data pose problème
• Complexité du design des FPGA : génération locale de signaux TMS, gestion de FIFO
La solution 2 a finalement été adoptée. Elle présente l'énorme avantage d'alléger les
communications à travers tout le WaferBoard™ : réduction de 40 à 70% des données émises par le
logiciel pour la commande des réticules suivant la quantité de signaux JTAG à transmettre.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 13
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
Cependant, ce choix engendre une plus grande complexité pour le design et la programmation du
FPGA. Il est également difficile avec cette solution et avec un petit FPGA (nous le verrons plus
loin) de pouvoir commander plusieurs réticules à l'aide d'une seule trame.
2.2.3 Définition des Trames
Avant de pouvoir concevoir le FPGA des Power Blocks, il faut établir des spécifications sur les
protocoles de communications dans le WaferBoard™. Celles-ci seront une base de travail pour la
conception du futur logiciel. Elles ont fait l'objet de nombreuses modifications et elles portent
encore le titre de « spécifications préliminaires » car elles ne sont complètes que pour la partie
Power Block. Elles sont disponibles en annexe 1 de ce rapport et ont été rédigées en anglais.
Les communications sont basées sur les protocoles et trames de la figure 2-5.
Figure 2-5: Protocoles dans le WaferBoard
Il s'agit ici d'un système d'encapsulation. Par exemple, les données utiles pour le FPGA du Power
Block sont envoyées depuis le PC et acheminées à travers plusieurs trames : PC-TOP, TOP-BOT,
BOT-PB. Les protocoles créés pour ce système présentent quelques similitudes avec le protocole
Ethernet : adresses source et destination suivies de données et d'un champ de contrôle de type
CRC.
Si les communications sont détaillées en annexe 1 de ce rapport, quelques points sont à souligner :
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 14
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
•
•
Chaque trame reçue par un Power Block entraîne systématiquement une réponse de ce
dernier par un trame d'erreur (Error PB) ou de donnée (Frame PB-BOT).
La longueur des trames est obligatoirement un multiple d'un octet afin d'assurer la
compatibilité avec le protocole USB [7] utilisé pour la liaison PC-Top PCB.
2.2.4 Communications entre le Bottom PCB et les Power Blocks
Les communications entre le Bottom PCB et les Power Blocks nous intéressent plus
particulièrement ici. Trois types de trames concernant les Power Blocks ont été créés :
a) Trame BOT-PB (Frame BOT-PB)
Sa taille peut varier de 9 à 1017 octets. Ce maximum est conditionné par la taille maximum
admissible par une paquet de donnée USB [7].
En-tête
12 bits
Sync
2
bits
Source
2
bits
Destination
5
bits
Subdestination
18
bits
Frame
ID
Données CRC
6
bits
PB Destination
6
bits
Command
13 bits
Length
0 à 1008
octets
Data
8
bits
CRC
Figure 2-6: Trame BOT-PB
Sync : Le champ Sync (pour synchronisation) est un préambule à la trame permettant d'assurer la
bonne synchronisation entre l'émetteur et le récepteur de la trame (valeur fixe :1010 1010 1011).
Source : Identifie l'émetteur de la trame dans le système. Le système d'adressage ci-dessous est
utilisé pour l'ensemble des champ « source » et « destination » des différentes trames :
Adresses
00
PC
01
Top PCB
10
Bottom PCB
11
Power Block
Destination : Identifie le destinataire de la trame selon le système d'adressage précédent.
Subdestination : Identifie à quel Power Block la trame est destinée. On peut envoyer la même
trame à tous les Power Blocks. C'est alors le Bottom PCB qui se charge de répéter l'envoi de la
trame. Le FPGA d'un Power Block ne « connaît pas » son adresse.
Adresse Subdestination pour les
Power-Blocks
0 0000
Tous les Power Blocks
0 0001
Power Block 1
0 0010
Power Block 2
0 0011
Power Block 3
...
...
1 0101
Power-Block 21
autres
Non utilisé
Frame ID : Ce champ identifie la trame, il est donc primordial pour le logiciel afin de gérer les
communications. Il doit être unique dans le WaferBoard™ pendant toute la durée de vie de la trame.
Il permet également de différencier une trame de donnée (Frame BOT-PB) d'une trame d'erreur
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 15
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
(Error PB) pour le FPGA du Bottom PCB.
Bit 17 Bit 16 Bit 15
Bits 14-10
Bits 9-0
EF
FP
LF
Numéro de Fragment Numéro de Paquet
EF : indique s'il s'agit d'une trame d'erreur (1) ou non (0)
FP : indique si la trame fait partie d'un « paquet fragmenté » (1 : oui; 0 : non). Ce mécanisme de
fragmentation permettra au logiciel de pouvoir envoyer à un élément du système une quantité de
données supérieure à la capacité du champ data. L'ensemble des données est appelé « paquet » et
chaque partie du paquet est appelé « fragment ».
LF : indique si la trame constitue le dernier fragment d'un paquet (1 : oui; 0 : non).
Numéro de Fragment : identifie le fragment (0 pour un paquet non fragmenté).
Numéro de Paquet : Ce numéro doit être identique pour tous les fragments d'un paquet.
PB Destination : Indique à quel élément interne du Power Block s'adresse la trame. On peut
théoriquement adresser la trame à plusieurs réticules, mais cette option n'est pour l'instant pas
implémentée en raison des capacités réduites du FPGA des Power Blocks. Un seul élément doit
donc être sélectionné ici :
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Régulateur FPGA Réticule 4 Réticule 3 Réticule 2 Réticule 1
Command : Indique la commande à appliquer à l'élément sélectionné dans « PB Destination » :
Pour un réticule : représente une commande avancée JTAG (protocole JTAG adapté au
WaferIC™).
Commande pour les Réticules (Commande avancée JTAG)
Code Binaire
Nom Commande
Description
00 0000
trst
Effectue un reset par le signal TRST JTAG
00 0001
reset
Effectue un reset logique par la machine à état
« tap controller »
00 0010
start_shift_ir*
Début du décalage des données dans le registre
d'instructions
00 0011
on_shift_ir*
Poursuite du décalage des données dans le
registre d'instructions
00 0100
end_shift_ir*
Fin du décalage des données dans le registre
d'instructions.
00 0101
start_shift_dr*
Début du décalage des données dans le registre
de données
00 0110
on_shift_dr*
Poursuite du décalage des données dans le
registre de données
00 0111
end_shift_dr*
Fin du décalage des données dans le registre de
données
autres
Non utilisé
Non utilisé
* la trame doit inclure des données dans le champ data.
•
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 16
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
•
Pour le FPGA : permet l'accès en lecture/écriture suivant le cas, à des registres implantés
dans le FPGA. Les registres principaux sont :
◦ fifo_rst : permet un reset des FIFOs du FPGA.
◦ freq_ctrl_reg : détermine la fréquence du signal d'horloge TCK du JTAG.
◦ counters_reg : comptabilise les trames reçues (statistiques, débogage).
◦ last_id_reg : mémorise l'identifiant de la dernière trame reçue.
•
Pour le régulateur : permet l'accès en lecture/écriture suivant le cas, à des registres
implantés dans le FPGA. Ceux-ci permettent notamment de commander les sorties du
régulateur.
Pour plus de détail sur les registres, se rendre en annexe 1.
Length : Indique la longueur du champ data et le nombre de bits utiles dans le dernier octet. Le
champ Data doit être obligatoirement un multiple d'un octet afin de pouvoir assurer une
compatibilité avec le protocole USB utilisé dans liaison PC – Top PCB et de garder une certaine
cohérence. Cependant, comme les données utiles ne sont pas toujours multiples d'un octet, 3 bits
sont réservés pour déterminer le nombre de bits utiles dans le dernier octet de donnée (1 à 8 bits
utiles).
Bits 13 - 3
Bit 2-0
Taille des données en octets Bits utiles dans le dernier octet
Data : Données utilisées par le Power Block (TDI JTAG ou données à écrire dans un registre).
CRC : Champ CRC (Cyclic Redundancy Check ) destiné à vérification l'intégrité de la trame
(n'inclut pas le champ Sync dans le calcul). Le polynôme utilisé pour le calcul est le suivant :
C(x) = x8 + x2 + x + 1
b) Trame PB-BOT (Frame PB-BOT)
Une trame PB-BOT est envoyée par un Power Block quand celui-ci reçoit une trame BOT-PB
correcte.
En-tête
Données
CRC
12 bits
7
bits
2
bits
18
bits
6
bits
6
bits
13 bits
0 à 1008
octets
8
bits
Sync
Source
Destination
Frame
ID
PB Destination
Command
Length
Data
CRC
Figure 2-7: Trame PB-BOT
Les champs Sync, FrameID, PBDestination, Command sont une copie des même champs de la
trame BOT-PB à laquelle la trame PB-BOT répond.
Source : constitué à partir de la trame BOT-PB reçue :
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 17
CHAPITRE 2 : COMMUNICATIONS DANS LE WAFERBOARD™
Bits 6-5
Champ Destination de la trame BOT-PB
Bits 4-0
Champ Subdestination de la trame BOT-PB
Destination : copie du champ source de la trame BOT-PB reçue.
Length : est identique au même champ de la trame BOT-PB reçue excepté pour la lecture d'un
registre (le champ Data n'est alors pas vide et contient les données du registre)
Data : contient les données destinées au logiciel (TDO JTAG, contenu registre).
CRC : calculé selon le même polynôme que pour la trame BOT-PB.
c) Trame Erreur PB (Frame Error PB)
Une trame d'erreur est envoyée par un Power Block lorsqu'une erreur avec un trame BOT-PB se
produit. Pour le FPGA du Bottom PCB, cette trame se différencie de la trame PB-BOT par le
premier bit du champ Frame ID (1 pour une trame d'erreur et 0 pour une trame PB-BOT).
12
bits
Sync
7 bits
2 bits
18 bits
9 bits
8 bits
Source
Destination
Frame ID
Error Code
CRC
Figure 2-8: Trame Erreur PB
La trame erreur PB se base sur les mêmes standards que les deux trames précédentes à l'exception
du code d'erreur (Error Code) :
Error Code
Valeur Décimale
Type d'erreur
0
Erreur CRC
1
Erreur Régulateur
2
FIFO TDI plein
3
FIFO TDO plein
4
Commande JTAG Illégale
autres
inutilisé
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 18
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
CHAPITRE 3 : CONCEPTION DU FPGA DU
POWER-BLOCK
Les protocoles de communication du WaferBoard™ établis, le design et la programmation du FPGA
peuvent commencer. Ceci constitue la deuxième étape de ma contribution au projet, la troisième
étant l'élaboration d'un environnement de test destiné à la vérification et au débogage du design.
3.1 Choix technologiques
Des choix technologiques concernant ce PCB miniature qu'est le Power Block ont été préalablement
effectués : schéma du circuit, choix des composants.
En se référant à ces choix, le schéma des communications concernant le FPGA est le suivant (figure
3-1) :
Figure 3-1: Communications du FPGA
3.1.1 FPGA Actel Igloo AGL060
Le FPGA implanté dans les Power Blocks est produit par la société Actel. Il fait partie de la famille
Igloo qui est réputée pour sa basse consommation de puissance. Le modèle choisi est l'AGL060V5
avec un package de 121 broches (CS121).
C'est un FPGA de petite taille (6mm x 6mm), avec des ressources limitées pour un design
relativement complexe à mettre en œuvre :
• 96 entrées / sorties.
• 1536 bascules (flip-flops)
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 19
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
•
•
4 blocs de mémoire SRAM de 4kbits chacun pouvant être configurés en FIFO (synchrones
uniquement), 1 kbit de FlashROM.
6 blocs CCC (Clock Conditioning Circuit) permettant d'agir sur le signal d'horloge. Il n'y a
cependant pas de possibilité d'implanter une PLL pour resynchroniser l'horloge.
3.1.1 Régulateur iP1202
Le régulateur iP1202 est produit par International Rectifier. Il comporte deux sorties commandées
par des entrées « enable » qui sont ici couplées (voir figure 3-1).
Deux entrées Soft Start (SS1 et SS2) permettent une mise en tension plus lente des sorties.
Une sortie PGOOD est activée lorsque la tension d'une des deux sorties est inférieure à 85% de la
tension de référence.
3.2 Conception du bloc-diagramme
La conception du bloc diagramme est une étape indispensable pour un design de cette complexité.
C'est une étape plus longue que la programmation en elle-même. Cela demande une vision
d'ensemble des fonctionnalités devant être assurées par le FPGA et une connaissance des
possibilités matérielles du circuit.
3.2.1 « Top-Level »
Le « Top-Level » (figure 3-2 de la page suivante) est l'architecture globale du FPGA du Power
Block. Les blocs de ce top-level comportent pour la plupart des sous-blocs. Chacun de ces blocs
trouve son équivalence dans un fichier VHDL, qui est le langage de description matérielle choisi
pour concevoir le circuit.
Voici une description sommaire du rôle de chaque bloc (classé par ordre alphabétique) :
clock_controller :
• Règle la fréquence d'envoi des données JTAG aux réticules par la création du signal
d'horloge tck_ret.
frame_rx :
• Reçoit du Bottom PCB les données sérielles (Frame BOT-PB) et l'horloge (clock
forwarding).
• Crée une horloge locale synchronisée sur les données (clk) en utilisant un CCC (clock
conditionning circuit) du FPGA.
• Analyse, segmente la trame BOT-PB reçue : vérification CRC, longueur de la trame,
destination.
• Envoie au header_crc_fifo les données utiles de la trame BOT-PB pour constituer les trames
PB-BOT ou Error PB : Source, Destination, Subdestination, Frame ID, PB Destination,
Command, Length ainsi que l'information sur la validité du CRC. Ces données sont aussi en
partie utilisées par reticule_fsm (PB Destination, Command, Length) lorsque la trame est
destinée aux réticules.
• Suivant les champs PB Destination et Command, effectue une des actions suivantes :
◦ Si la trame est destinée aux réticules et contient des données : envoie les données vers le
tdi_fifo.
◦ Si la trame est destinée au régulateur : envoie les données du champ command (6 bits)
vers le regulator controller.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 20
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
Figure 3-2: Bloc-Diagramme "Top-Level"
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 21
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
◦ Si la trame est destinée au réglage de tck_ret (horloge des signaux JTAG) : envoie les
données du champ data vers le clock controller.
◦ Si la trame est destinée à la lecture des registres de frame_rx : envoie les données des
registres vers register_ctrl.
• Contient les registres : last_id_reg (FrameID de la dernière trame reçue), counters_reg
(compteur de trames et compteur d'erreur CRC) et freq_ctrl_reg (réglage de la fréquence
tck_ret)
frame_tx :
• Gère l'envoi des trames PB-BOT / Error PB vers le Bottom PCB.
• Reçoit du header_ctrl les données pour constituer les trames (header).
• Reçoit du tdo_fifo et du register_ctrl les données pour constituer les trames (champ Data).
Mets en forme les données tdo (sérialisation et alternance).
• Reçoit les informations « fifo plein » et génère alors une trame d'erreur.
• Génère le CRC de la trame envoyée.
• Reçoit du reticule_fsm, l'information « données prêtes » à partir de laquelle les données de
tdo_fifo peuvent être lues.
header_crc_fifo :
• « Hard FIFO » synchrone de 4608bits : 9 bits de large, 512 bits de profondeur. Contient les
données « header » utiles pour constituer les trames PB-BOT ou Error PB : Source,
Destination, Subdestination, Frame ID, PB Destination, Command, Length (52 bits). +
information sur la validité du CRC + 1 bit à 0 (non utilisé). Soit 54 bits au total.
• Transmet ces 54 bits au bloc header_ctrl sur demande, en 6 blocs de 9bits.
header_ctrl :
• Vient lire les 54bits (6 mots de 9bits) contenus dans header_crc_fifo dès que celui-ci n'est
pas vide. Stocke ses 6 mots dans des registres.
• reticule_fsm vient lire les registres afin de déterminer si la trame est destinée aux réticules
(les registres ne sont pas vidés).
• Lorsque frame_tx vient lire les registres, ceux-ci sont effacés, une nouvelle lecture de
header_crc_fifo peut commencer.
jtag_demux :
• Dirige les données JTAG envoyées par jtag_fsm et tdi_fifo vers le réticule sélectionné par
reticule_fsm (envoi des données synchronisé sur tck_ret).
• Arrête le signal tck du réticule sélectionné sur ordre de reticule_fsm.
jtag_fsm :
• Fonctionne selon une machine à états finis.
• Doit générer des séquences de signaux TMS conformément à la machine à état tap controller
de la norme JTAG : reçoit l'état courant et « futur » de la machine par ret_last_states.
• Mets à jour ret_last_states à la fin du traitement.
• Contrôle le fonctionnement de jtag_demux et la lecture de tdi_fifo.
register_ctrl :
• Envoie les données des registres vers frame_tx lors d'une requête en lecture.
• Commande les reset des FIFO tdi_fifo et tdo_fifo.
regulator_controller :
• Commande les signaux SS1, SS2 et Enable du régulateur. Reçoit les informations PGOOD
(niveaux de tension des sorties corrects ou non).
• Possède un registre interne (voir spécifications protocoles, annexe 1) . Les données de ce
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 22
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
registre sont envoyées à register_ctrl si demandé.
ret_last_states :
• Reçoit du reticule_fsm la commande jtag avancée ainsi que le réticule à commander (3 bits +
2 bits).
• Envoie à jtag_fsm l'état courant et l'état « futur » du réticule (états conformes à la machine à
état tap controller) : 2bits + 2bits
• Stocke les états courants des 4 machines à états tap controller (une machine par réticule).
• État courant du réticule mis à jour par jtag_fsm lors de l'arrêt de la machine à état.
reticule_fsm :
• Fonctionne selon une machine à états finis.
• Accède aux données contenues dans header_ctrl et vérifie si elles sont destinées aux
réticules.
• Commande jtag_demux afin de sélectionner le réticule actif.
• Commande ret_last_states, en lui fournissant les nouveaux états JTAG d'un réticule.
• Autorise l'envoi des signaux TDI vers les réticules (commande de tdi_fifo).
tdi_fifo :
• « Hard FIFO » synchrone de 4096 bits : 1 bit de large et 4096 bits de profondeur, rendu
asynchrone par la logique l'accompagnant. Contient le bitstream TDI destiné aux réticules.
• Avertit frame_tx lorsque le FIFO est plein et reticule_fsm lorsqu'il est vide.
tdo_fifo :
• « Hard FIFO » synchrone de 4096 bits : 4 bits de large (1 bit TDO par réticule) et 1024 bits
de profondeur, rendu asynchrone par la logique l'accompagnant.
• Blocs logiques permettant le remplissage correct du FIFO (gestion des 4 signaux entrants,
horloge tck_ret).
• Avertit frame_tx lorsque le FIFO est plein.
3.2.2 Bloc de réception frame_rx
Le bloc frame_rx reçoit les trames BOT-PB et commande les différents blocs du Top-Level en
fonction des données contenues dans la trame. Étant donné son rôle central, une description plus
précise de ce bloc est nécessaire (voir figure 3-3 page suivante pour le bloc-diagramme).
a) Horloge et données entrantes
Le bloc frame_rx reçoit du Bottom PCB des données sérielles sur son entrée « data_i » et un signal
d'horloge les accompagnant (clock forwarding). La possibilité est donnée d'implanter un CCC (voir
documentation Actel, équivalent au DCM chez Xilinx), un bloc de conditionnement d'horloge
permettant de synchroniser les données sur l'horloge par l'ajout d'un retard paramétrable. Ce dernier
doit être déterminé en fonction de la synthèse du circuit et des futurs essais sur un Power Block.
L'implantation d'une PLL (boucle à verrouillage de phase) aurait permis d'ajuster la différence de
phase aisément mais les CCC de ce FPGA n'en disposent pas.
Le module sync_detector scrute en permanence les données arrivant sur l'entrée data_i afin de
détecter le champ sync du début de trame. Une fois le début de trame détecté, les données sont
acheminée au bloc delimiter qui, en fonction du champ « length » de la trame, détecte la fin de la
trame, quelle que soit sa longueur.
La trame délimitée (hors champ CRC) est reçue par le bloc crc, toujours de manière sérielle, pour le
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 23
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
calcul de redondance cyclique avec le polynôme générateur indiqué dans les spécifications.
Figure 3-3: Bloc-Diagramme frame_rx
b) Dispatcher
Le bloc dispatcher a plusieurs fonctions importantes :
• Vérifier la validité de la trame en comparant le CRC de la trame et le résultat provenant du
bloc crc.
• Il analyse tous les champs de la trame afin de commander les autres blocs du top level en
fonction du destinataire (réticules, registres, régulateur, générateur de tck) et de la
commande.
• Il communique directement avec 3 registres implantés dans frame_rx : freq_ctrl_reg
(fréquence du signal JTAG tck), last_id_reg (dernier identifiant de trame reçue),
counters_reg (compteur de trames reçues et de trames ayant une erreur de CRC).
3.2.3 FIFOs
Un FIFO (First In, First Out) est une mémoire-tampon où les premières données écrites sont les
première données lues. Le FPGA Actel AGL060V5 dispose de 4 blocs SRAM de 4 kbits, chacun
pouvant être configuré en FIFO. On parle alors de FIFO embarqué ou « hard » FIFO. Ces blocs
peuvent être mis en cascade.
Nous en avons besoin ici par le fait que les données destinées aux réticules (TDI du protocole
JTAG) sont envoyées à une fréquence différente de la fréquence de fonctionnement du circuit : 160
Mhz pour l'horloge de base du circuit, et de l'ordre de 1 Mhz ou moins pour l'horloge TCK des
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 24
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
signaux JTAG. C'est également indispensable pour renvoyer les données provenant des réticules
(TDO du protocole JTAG) dans une trame PB-BOT. Il faut noter qu'étant donné la petite taille du
FPGA (1536 flip-flops), nous ne pouvons implanter des FIFO « soft » de plusieurs kbits comme
cela est nécessaire par la quantité de données TDI pouvant être envoyées à un réticule.
Avec le modèle de FPGA utilisé dans les Power Blocks, il n'est possible d'implanter que des FIFO
synchrones. L'astuce pour rendre son utilisation asynchrone est de coupler le Hard FIFO synchrone
avec un registre ou un FIFO asynchrone d'un bit. C'est ce qui a été fait pour les blocs tdi_fifo et
tdo_fifo.
Le troisième FIFO utilisé est header_crc_fifo, « purement » synchrone et contenant les données de
l'en-tête de la trame BOT-PB.
3.2.4 Registres
Outre les trois registres contenus dans frame_rx (voir section 3.2.2), des registres sont implantés
dans le bloc regulator_controller afin de commander et/ou de connaître l'état des entrées / sorties du
régulateur.
Lors d'une écriture ou d'une lecture sur un registre, le contenu de celui-ci est envoyé de manière
sérielle vers le bloc register_ctrl pour être ensuite transmis vers frame_tx. Ce dernier est alors
chargé d'envoyer les données du registre dans la trame PB-BOT.
3.2.5 Génération des signaux JTAG
La partie permettant de générer les signaux JTAG (TMS, TCK, TDI et TRST) est la plus complexe
du design. Une description du protocole JTAG est disponible en annexe 2 où apparaît en particulier
la machine à état du tap controller. Le FPGA doit pouvoir contrôler l'évolution de 4 machines à états
de ce type, une par réticule, de manière indépendante.
Plusieurs architectures ont été envisagées pour la commande de ces machines à états. Il aurait été
possible de créer un bloc « machine à état tap controller » par réticule. Cette duplication entraînerait
cependant une consommation évitable de flip-flops du FPGA puisque les machines à états
n'évoluent jamais simultanément. L'idée retenue est de n'implanter qu'une seule machine à état,
évoluant d'un état de départ à un état d'arrivée de la machine suivant le réticule sélectionné. Ces
états sont fournis par un bloc mémorisant les états courants et « futurs » (en fonction de la
commande avancée JTAG) de chacune des 4 machines à états : ret_last_states.
Il est important de noter que les machines à états de type « tap controller » peuvent être stoppées à
tout moment par l'arrêt du signal TCK, comme cela a été vérifié dans le cadre du projet (essais sur
circuits de test « Test Chip » v1 et v3).
Enfin, Le bloc jtag_demux est chargé de diriger les 4 signaux JTAG vers le bon réticule.
a) Fonctionnement de reticule_fsm
Ce bloc joue le rôle de « chef d'orchestre » pour la génération des signaux JTAG puisqu'il
commande jtag_fsm, jtag_demux et ret_last_states. Une machine à état en assure le fonctionnement
(figure 3-4) :
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 25
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
•
•
Figure 3-4: Machine à états du bloc reticule_fsm
wait_cmd : attente de l'arrivée de données dans le bloc header_ctrl (en-tête d'une trame
BOT-PB).
read_and_update : analyse de l'en-tête de la trame. Si celle-ci est adressée à un réticule
(champ PB Destination) alors le bloc jtag_fsm est « activé », la sélection du réticule est
effectuée pour jtag_demux et ret_last_states est mis à jour.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 26
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
•
run_jtag_fsm_nodata : le bloc jtag_fsm est « activé », il n'y a pas de donnée TDI à lire car la
commande avancée JTAG est trst ou reset. Lorsque jtag_fsm a traité la commande
(end_cmd_i =1), un retour à l'état initial s'effectue.
•
run_jtag_fsm_data : le bloc jtag_fsm est « activé », il y a des données TDI à lire dans
tdi_fifo car la commande avancée JTAG concerne les registres d'instructions ou de données.
Si le FIFO est vide, on attends l'arrivée de données (wait_tdi_data).
•
read_tdi_data : Un décompteur est chargé de contrôler la lecture dans tdi_fifo. On passe à
l'état suivant lorsque le dernier bit de donnée doit être lu (voir Fonctionnement de jtag_fsm).
•
end_read_tdi : arrêt de jtag_fsm et retour à l'état initial.
b) Fonctionnement de jtag_fsm
Le rôle principal de jtag_fsm est de générer des séquences de signaux TMS conformément à la
machine à états du tap controller de la norme JTAG. Pour cela, il faut créer une machine à états qui,
en quelque sorte, en sera le miroir : si les états évoluent en fonction des signaux TMS pour le tap
controller, ce sont les états traversés qui vont conduire à la génération des signaux TMS dans
jtag_fsm.
jtag_fsm reçoit une commande de ret_last_states sous la forme d'un état de départ (dernier état du
tap controller du réticule commandé) et d'un état d'arrivée (état futur du tap controller du réticule
commandé).
Il faut également ajouter que pour créer la machine à état de jtag_fsm, il faut faire références aux
résultats des tests effectués dans le cadre du projet DreamWafer™ sur le circuit de test « test chip
v3 ». C'est une base pour la génération des signaux TDI et TMS puisque ces séquences ont été
validés. Un exemple de commandes sur le registre d'instruction est disponible figure 3-5, c'est en
quelque sorte une référence à suivre pour la génération de séquences de signaux JTAG. La logique
est identique pour les commandes sur le registre de données.
Figure 3-5: Exemple de référence pour l'envoi de signaux vers les réticules
La machine à états créée sur ces bases apparaît sur la figure 3-6 ci après :
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 27
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
Figure 3-6: Machine à états du bloc jtag_fsm
Observations :
•
Les états sur fond bleu sont les états possibles de départ et d'arrivée (commandés par
ret_last_states).
•
next_state : état d'arrivée
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 28
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
3.2.6 Bloc de transmission frame_tx
Le rôle de frame_tx est d'envoyer les trames PB-BOT (vers le FPGA du Bottom PCB) selon les
spécifications des protocoles. Pour cela, l'en-tête de la trame BOT-PB est récupérée afin d'être
réutilisée. Le cas échéant, les données provenant de tdo_fifo ou de register_ctrl sont incluses dans la
trame et le champ length est recalculé. Enfin le calcul du champ CRC est effectué.
3.3 Précisions sur la programmation VHDL des blocs
L'arborescence des fichiers vhdl (figure 3-7 ci-dessous) fait apparaître l'ensemble des blocs du
design dont ceux décrits dans ce chapitre. Les fichiers comportent tous une en-tête descriptive
standard
et
de
nombreux
commentaires. Quelques règles de
programmation communes [8] pour
le projet sont appliquées : nom des
variables, organisation des répertoires
pour le code source, les tests, la
synthèse...
3.3.1 Librairies et Packages
Deux libraires sont utilisées :
•
work
qui
rassemble
l'ensemble
des
fichiers
sources crées
•
igloo pour la création des
FIFO Actel et l'utilisation de
bascules.
Le fichier power_block_constants
regroupe toutes les constantes
utilisées dans les fichiers vhdl telles
que les tailles des bus, la position des
bits dans les trames. Ainsi, en cas de
modification future des spécifications
des protocoles, les changements à
apporter aux fichiers VHDL sont
moindres.
power_block_functions regroupe des
fonctions de calcul utilisées par les
autres fichiers.
Figure 3-7: Arborescence des fichiers VHDL
3.3.2 Registres et Machines à états
Les blocs suivants comportent des machines à états [9] : frame_rx, header_ctrl, jtag_fsm,
ret_last_states, reticule_fsm, frame_tx.
Différents types de registres ont été également implémentés [10] :
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 29
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
•
registres à décalage pour la sérialisation ou la désérialisation de données
•
registres de données de différents types suivants les spécifications (présence d'une entrée
reset, taille...)
3.3.3 Blocs FIFO
Les blocs FIFO (blocs multicolores sur la figure 3-7) ont été générés à partir de l'outil SmartGen
disponible avec le logiciel Libero IDE d'Actel puisqu'ils utilisent des blocs mémoires SRAM du
FPGA. Le comportement des FIFOs a provoqué quelques ajustements dans la programmation en
raison du nombre de cycles entre la commande en lecture et l'arrivée des données ou entre la lecture
du dernier bit du FIFO et la mise à 1 du signal « FIFO vide ». La solution à ces désagréments à été
d'ajouter des bascules D et un signal intermédiare afin de « retarder » les signaux d'un cycle ou bien
d'ajouter une étape d'attente dans une machine à état. Une séquence implantée dans la machine à
états de frame_rx effectue un reset sur les trois FIFOs à la mise sous tension via register_ctrl.
3.3.4 Génération de TCK
Le bloc clock_controller chargé de produire l'horloge TCK des signaux JTAG est commandé par un
bus de 8 bits fixant la valeur d'un compteur interne (256 valeurs possibles). Une opération interne
fixe les bornes de fréquences suivante (clk est fourni par le Bottom PCB) :
•
fréquence minimum : clk / 64 soit 2,5 Mhz
•
fréquence maximum : clk /16384 soit 9,8 kHz
Cette plage peut être aisément modifiés dans le fichier VHDL.
3.3.5 Débogage
Le débogage du design s'est d'abord effectué bloc par bloc. Ainsi, à chaque bloc du « top-level »
correspond un fichier banc de test (test bench) créé pour visualiser le comportement de l'entité en
fonction de l'état de ses entrées sous le logiciel ModelSim. Les fichiers de test reprennent le nom de
leur entité correspondante précédé de « tb_ ».
Pour le bloc frame_rx, les données entrantes, ou stimuli, proviennent d'un fichier texte contenant
une suite de bits (trame BOT-PB).
3.4 Environnement de Travail
La création des fichiers VHDL (codes sources, test benches), la création des bibliothèques et le
lancement des simulation s'est fait indépendamment du logiciel de développement d'un constructeur
(Actel Libero ou Xilinx ISE) afin de garder une lisibilité future pour d'autres utilisateurs qui
pourront utiliser d'autres environnements. Une description des fichiers et répertoires de travail est
disponible en annexe 5.
3.4.1 Outils logiciels
•
Codage VHDL : NotePad ++
•
Compilation et Simulation : ModelSim 6.6b
•
Génération des blocs Actel : Libero IDE v9.0
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 30
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
•
Outil de synthèse : Synplify Synthesis (inclus dans Libero IDE 9.0)
•
Codage C++ : Code::Blocks
3.4.2 Scripts et Simulation
Deux fichiers scripts ont été crées : le premier pour la création des bibliothèques utilisées par les
fichiers VHDL et le second pour compiler les fichiers VHDL et lancer la simulation d'un bloc du
top-level ou du top-level en totalité (menu à l'exécution du script, voir figure 3-8).
Figure 3-8: Scripts de simulation
Dans ce dernier cas, un fichier de simulation .do est exécuté où sont paramétrés les signaux à
visualiser sous ModelSim et le temps de la simulation.
Tous ces fichiers peuvent être modifiés suivant la simulation voulue et l'environnement de
l'utilisateur.
Pour la simulation du top-level, les sorties TDI sont connectées aux entrées TDO afin de pouvoir
récupérer des données. Le comportement qui en découle est cependant conforme à la réalité :
l'émission d'un « bit TDI » entraîne systématiquement la réception d'un « bit TDO ».
Quelques cas de simulation sont décrits en annexe 3 de ce rapport, on peut y observer les signaux
les plus pertinents.
3.5 Environnement de Test
Si le comportement de chaque bloc a été vérifié par simulation, la vérification du fonctionnement du
design créé ne peut cependant se limiter à des simulations unitaires ou a une simulation globale
avec une quantité de stimuli limitée.
Il est nécessaire d'effectuer des tests plus poussés afin de tester le design et de procéder à un
débogage plus exhaustif.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 31
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
3.5.1 Objectifs
L'environnement de test doit remplir les fonctions suivantes :
•
la création de séries de trames BOT-PB selon les spécifications des protocoles. Chaque série
de trame créée est appelée « vecteur de test »
•
La mise en forme de ces trames afin de les utiliser dans l'environnement de simulation
•
La récupération des données de la simulation : remise en forme des trames PB-BOT,
signaux JTAG, commandes régulateur.
•
La comparaison entre les trames BOT-PB émises et les trames PB-BOT reçues puis la
signalisation d'erreurs éventuelles.
3.5.2 Réalisation
L'environnement de test a été développé en langage C++. Ce langage m'était le plus familier pour
une réalisation rapide et fiable.
Le projet, réalisé sous le logiciel Code::Blocks comporte 6 Fichiers sources (.cpp) ayant chacun son
fichier header correspondant. Voici une description sommaire de chaque fichier (voir également les
commentaires inclus dans les fichiers sources) :
•
main.cpp : menu principal, instanciation d'objets des classes FrameBotPb, ParserBotPb,
VecCompare.
•
FrameBotPb : associé à la classe du même nom. Un objet de cette classe est instancié pour
chaque trame BOT-PB. Les attributs de la classe sont principalement les champs de la
trame et les méthodes des outils de manipulation ou conversion de types, de création de
fichiers textes (vecteurs de tests, fichier log, trame PB-BOT attendue en fin de simulation).
•
FramePbBot : associé à la classe du même nom. Un objet de cette classe est instancié pour
chaque trame PbBot identifié par ParserBotPb lors de l'analyse des résultats de la
simulation.
•
ParserBotPb : associé à la classe du même nom, effectue une analyse des résultats de la
simulation, par la lecture de fichiers textes. Un objet de la classe FramePbBot est créé pour
chaque trame identifiée.
•
Crc : regroupe des fonctions permettant le calcul du champ CRC des trames BOT-PB.
•
VecCompare : associé à la classe du même nom, effectue une comparaison entre les trames
PB-BOT attendues et celles générées lors de la simulation. Les différences sont alors
signalées sur l'interface (numéro de ligne de l'erreur).
3.5.3 Utilisation
L'environnement de test possède son interface utilisateur (figure 3-9, page suivante) permettant de
créer des séries de trames BOT-PB conformément aux spécifications par un système de question /
réponse menant à la génération de l'ensemble des champs de la trame. Certains champs sont générés
aléatoirement (une partie du FrameId, le champ Data pour des données envoyés aux réticules).
Cette méthode était la plus rapide pour injecter des trames de façon rigoureuse.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 32
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
L'ensemble de la méthode employée est décrite figure 3-10. Elle fait intervenir l'environnement de
test et le script de simulation décrit auparavant.
Figure 3-9: Interface de l'environnement de test
Figure 3-10: Méthode de test employée
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 33
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
Le menu utilisateur regroupe toutes les fonctionnalités de l'environnement de test. Chaque série de
trames générée, crée deux répertoires :
• un répertoire placé sous « testvector_input » regroupant :
◦ un fichier vec*.txt par trame BOT-PB (contient un bit par ligne)
◦ un fichier interframe.txt qui représente les données injectées entre les trames (espace
intertrame). Cet espace peut-être modifié selon les besoins dans une boucle contenue
dans le destructeur de la classe FrameBotPb
◦ un fichier LogFileIn.log (voir figure 3-11) récapitulant les trames générées dans une
série (beaucoup plus lisible que les fichiers vec*.txt)
◦ un fichier vectorsforsim.txt créé par le script modelsim par concaténation des fichiers
vec*.txt et interframe.txt. Ce fichier est directement utilisé par le test bench du top-level
sous ModelSim.
• un répertoire placé sous « testvector_output » regroupant :
◦ un fichier vecExpect*.txt par trame PB-BOT attendue (en réponse à une trame BOT-PB)
◦ un fichier resultsfromsim.txt contenant les données issues de la simulation (fichier de
sortie du test bench du top-level
◦ un fichier JtagData.txt créé par l'environnement de test lors de l'analyse des résultats de
la simulation et contenant les signaux JTAG envoyés aux 4 réticules
◦ un fichier RegulData.txt créé par l'environnement de test lors de l'analyse des résultats
de la simulation et contenant les signaux envoyés au régulateur du Power Block
◦ un fichier vec*.txt par trame PB-BOT détectée par l'environnement de test dans le fichier
resultsfromsim.txt lors de l'analyse des résultats de la simulation
◦ Un fichier LogFileOut.log (voir figure 3-12) récapitulant les trames PB-BOT issues de la
simulation sous une forme plus lisible.
Figure 3-11: Fichier LogFileIn (trames pour simulation)
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 34
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
Figure 3-12: Fichier LogFileOut (résultats simulation)
3.5.4 Vecteurs de tests pour le débogage
Les vecteurs de tests sont nommés suivant l'élément testé :
•
•
•
•
clk* : test sur le clock_controller (génération du signal tck)
regist* : tests sur registres implantés dans le FPGA
regul* : tests sur le régulateur et ses registres
retic* : envoi de données vers les réticules (signaux JTAG)
Des erreurs de plusieurs sortes peuvent être introduites : modification d'un fichier vec*.txt pour y
changer 1 bit, modification du CRC, commande avancée JTAG illégale (par exemple une
commande on_shift_dr sur un réticule en n'ayant pas envoyé de commande start_shift_dr au
préalable).
Seule la partie concernant l'envoi de signaux JTAG n'a pu être vérifiée en totalité par manque de
temps, les cas à tester étant très nombreux : mauvaises commandes, alternance sur plusieurs
réticules, tests sur FIFO plein.
Voici un tableau récapitulant les premiers tests effectués avec cet environnement dédié :
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 35
CHAPITRE 3 : CONCEPTION DU FPGA DU POWER-BLOCK
Nom
Nb
Trames
Description
Statut
regist0
5
Écritures et lectures sur freq_ctrl_reg
OK
regist1
7
Écritures sur fifo_rst
OK
regist2
4
Lectures de last_id_reg
OK
regist3
7
Lectures / Reset de counters_reg + trames avec erreurs crc
OK
regist4
8
Écriture / lecture sur les 4 registres
OK
regul0
6
Commande Régulateur (enable, soft start)
OK
regul1
6
Lecture registres, écritures
OK
ret0
4
Commande avancée trst sur 4 réticules successivement
OK
ret1
1
start_shift_ir 8 bits sur réticule 1
OK
ret2
3
start_shift_ir reticule2 (16 bits)/ chgt fréquence tck / on shift_ir réticule
2 (8bits)
OK
ret3
1
start_shift_dr (11 bits) sur réticule 3
OK
ret4
3
Reticule 4 : start_shift_dr (8bits) / on_shift_dr (16bits) / end_shift_dr
(8bits)
OK
ret5
4
Reticule 2 : start_shift_dr (16bits), Reticule 1 : start_shift_ir (7bits),
Reticule 3 : trst, Reticule 2 : on_shift_dr (12bits)
OK
tck0
5
Changements de la fréquence tck par le registre freq_ctr_reg
OK
3.6 Synthèse et tests sur carte d'évaluation
La synthèse logique du circuit a été effectuée avec l'outil Synplify Synthesis. L'outil de synthèse a
été régulièrement utilisé au cours de la description fonctionnelle afin de vérifier la conformité de la
syntaxe des fichiers et de connaître la consommation de flip-flops du circuit.
Les dernières synthèses exécutées rapportaient une utilisation de 69% des cellules logiques du
FPGA utilisé.
Une carte d'évaluation est disponible pour le projet DreamWafer™. Elle est équipée d'un FPGA
Actel SmartFusion (semblable à celui implanté sur le Bottom PCB et même famille que celui du
Power Block), d'un processeur ARM Cortex-M3.
Une implantation du design sur cette carte n'a pu être effectuée au moment de la rédaction de
rapport. Cependant une réflexion sur la façon de mener des tests sur cette carte à été menée :
• Implanter dans la mémoire FlashROM de la carte les vecteurs de tests (trames BOT-PB).
• L'utilisation des blocs FIFO et des blocs de conditionnement d'horloge (CCC) ne posent pas
de problème puisqu'ils sont du même type que ceux du FGPA du Power Block.
• Quatre sorties utilisateur de la carte peuvent être utilisées afin de visualiser les signaux
JTAG d'un réticule déterminé. On peut également décider d'afficher sur l'écran OLED de la
carte le numéro du réticule commandé et, à l'aide d'un multiplexeur, diriger les signaux du
réticule vers les sorties de la carte.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 36
CHAPITRE 4 : BILAN PERSONNEL
CHAPITRE 4 : BILAN PERSONNEL
4.1 Planification du travail personnel
Le travail que j'ai effectué sur cette période de cinq mois et demi est récapitulé dans le diagramme
de la figure 4-1.
Figure 4-1: Diagramme de Gantt
Après le premier mois de ma période de stage, débutait début la phase 11 du projet DreamWafer™,
couvrant la période de Mai à Septembre. Pour chaque phase, chaque participant du projet rédige un
document où il détermine les points sur lesquels il va travailler. A la fin de la période, le document
est repris, les tâches achevées sont barrées, celles non achevées sont commentées.
Mes documents pour la phase 11 figurent en annexe 4. J'ai rédigé ces points en fonction des
échanges avec mon tuteur de stage, M. Yves Blaquière.
Il est cependant difficile d'évaluer le temps pris pour chaque tâche, les difficultés rencontrés étant
évidemment assez imprévisibles.
La phase d'apprentissage pour entrer réellement dans un projet de cette envergure est assez longue
et frustrante puisqu'elle consiste en la lecture de nombreux documents. Elle est cependant
indispensable avant de pouvoir produire un quelconque travail.
4.2 Organisation du projet
J'ai pu remarquer que la difficulté majeure pour un projet de cette envergure, réunissant autant de
personnes, était la coordination, la communication interne et le partage d'informations. En effet, les
participants sont souvent éloignés physiquement. Les réunions organisés par Gestion Technocap,
toutes les 3 ou 4 semaines, sont alors un lieu d'échange très riche et assez captivant pour un
« junior ».
Les intervenants peuvent travailler dans des domaines très différents allant du PCB à la mécanique
en passant par l'informatique et la thermique. C'est une chance de pouvoir participer à ces réunions
où les sujets abordés peuvent être éloignés de son champ de compétences mais où la qualité et
l'expérience des intervenants est souvent captivante.
Plus concrètement, la communication autour du projet est gérée par Technocap. Les étudiants
produisent à chaque réunion un document (rédigé en anglais) envoyé à leur responsable
hiérarchique avant d'être inclus dans l'agenda de la réunion et imprimé dans le dossier remis à
chaque participant lors de la réunion. Les réunions se passent en grande majorité en anglais. Elles
sont l'occasion de resserrer les liens dans l'équipe, de coordonner les différents travaux, de porter à
la connaissance de chacun les avancées en cours ou les difficultés.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 37
CHAPITRE 4 : BILAN PERSONNEL
L'efficacité de ces réunions, menées par Richard Prytula de Technocap, est assez impressionnante :
les discussions sont précises et des concensus sont souvent trouvés rapidement. Malgré ça,
l'ambiance y est assez détendu, le cadre « quasi-familial » aidant. C'est aussi l'occasion de discuter
en apparté avec différents membres de l'équipe ou avec des intervenants extérieurs et conseillers
techniques.
4.3 Expérience vécue
Sur le plan technique, j'ai pu apprendre beaucoup sur le langage VHDL, le design de FPGA et la
manière de valider son fonctionnement. J'ai aussi apporté un soin à rendre mon travail exploitable
rapidement pour les personnes amenées à poursuivre le travail engagé.
Au delà de l'aspect plus technique, travailler dans un pays étranger, avec des mentalités différentes
sur le plan professionnel est riche d'enseignements : l'efficacité et le travail effectué priment ici sur
l'apparence ou le CV de la personne !
La manière de mener les réunions et de prendre des décisions dans un projet sont également très
formatrices.
La compétence et l'expérience des personnes côtoyées dans ce projet m'ont aussi impressionné et
apporté beaucoup :
M. Richard Norman (détenteur des brevets) est un ingénieur en physique qui a travaillé pour IBM,
fondé sa propre compagnie et est co-fondé la société Hyperchip (1997) pour la création du premier
routeur scalable, il possède une vingtaine de brevets.
M. Yvon Savaria, professeur à l'Ecole Polytechnique de Montréal depuis 1985 spécialiste des
circuits de type Wafer-Scale, est titulaire d’une chaire de recherche du Canada en conception des
systèmes microélectroniques avancés. Il est auteur et co-auteur de plus de 200 articles scientifiques.
M. Yves Blaquière est professeur à l’UQÀM depuis 1987 a travaillé sur de nombreux projets ASIC
et FPGA standard et Wafer-Scale, il est directeur du laboratoire de microélectronique de l’UQÀM.
Cette expérience de presque six mois fut une grande source d'enseignement pour ma future vie
professionnelle. J'ai apprécié travailler en équipe sur un projet de cette dimension et j'espère pouvoir
retrouver un tel cadre de travail.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 38
CONCLUSION
CONCLUSION
Avec la rédaction des spécifications des protocoles de communications, c'est une étape vers
la mise au point des communications internes du WaferBoard™ et plus généralement vers
l'élaboration du logiciel qui a été franchie. Les fonctionnalités et l'architecture du FPGA du
Power Block ont été établies précisément. Son design n'a pu être totalement vérifié et validé
malgré l'élaboration d'un environnement de test efficace dans cette optique. C'est d'ailleurs
un enseignement personnel de constater à quel point le temps nécessaire à la programmation
est minime par rapport à celui nécessaire aux tests et à la validation. Les cas de test pour ce
circuit sont très nombreux et nécessiteraient plusieurs semaines de travail.
J'ai acquis des compétences techniques dans le domaine des FPGA, des langages VHDL et
C++ et de l'électronique numérique en général.
Mais ce qui m'a apporté le plus dans l'optique de ma future vie professionnelle reste le fait
d'avoir participé à un projet innovant de grande envergure. Travailler dans une équipe
regroupant des talents de tous horizons restera une expérience marquante et valorisante. Je
retiendrai également de cette période les méthodes de travail efficaces, la confiance et la
liberté de travail accordée aux étudiants.
Le projet DreamWafer™ est en constante progression et évolution. Des personnes arrivent
et partent de ce projet en ayant chacune apporté quelque chose à l'élaboration de ce système
de prototypage rapide qui pourrait être une innovation majeur dans le monde des systèmes
électroniques. Je suis fier d'avoir pu apporter ma contribution à ce projet.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 39
Glossaire
Glossaire
ASIC (Application-Specific Integrated Circuit) : circuit intégré spécialisé produit selon des
besoins détérminés. La production de ces circuits se fait généralement pour de gros volumes. Les
ASICs de grande taille intégrant processeur, mémoires et interfaces sont qualifiés de system-on-chip
(SoC).
CRC (Contrôle par Redondance Cyclique ou Cyclic Redundancy Check) : Système de contrôle de
l'intégrité d'un paquet de données basée sur une opération mathématique, la division polynomiale.
FIFO (First In First Out) : Méthode de gestion de stockage de données (mémoire) dans laquelle les
premières données entrées sont les premières sorties.
FPGA (Field-Programmable Gate Array) : circuit intégré logique pouvant être reprogrammé après
sa fabrication.
JTAG (Joint Test Action Group) : terme souvent utilisé au lieu du terme générique Boundary Scan
pour désigner une technique de test des cartes électroniques numériques. Des ports JTAG sont
également souvent utilisés pour configurer des circuits (ex : FPGA). Le JTAG est défini par la
norme IEEE 1149.1
PCB (Printed Circuit Board) : support permettant de relier électriquement des composants
électroniques, autrement appelé circuit imprimé.
TSV (Through-Silicon-Vias) : connexion électrique verticale réalisée à travers un wafer ou tranche
de silicium.
VHDL (Very high speed integrated circuits Hardware Description Language) : langage de
description matérielle définissant le comportement et l'architecture d'un système électronique
numérique, très utilisé dans la conception de circuits ASIC ou FPGA
WaferBoard™ : Système de prototypage rapide de systèmes électroniques développé par l'équipe
DreamWafer™.
WaferIC™ : Circuit de type WSI utilisé dans le WaferBoard™ (les composants y sont déposés).
WaferNet : Réseau d'interconnexion interne du WaferBoard™ .
WSI (Wafer Scale Integration) : Système de construction de circuits intégrés large échelle (taille
de la tranche de silicium).
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 40
Références Bibliographiques
Références Bibliographiques
[1] US Patent 11/611,263 - Richard Norman, “Reprogrammable Circuit Board with
Alignment-Insensitive Support for Multiple Component Contact Types”.
[2] Basile-Bellavance et al., “Faults Diagnosis Methodology for the WaferNet
Interconnection Network” IEEE NEWCAS-TAISA Conference, Toulouse, France, June 28July1, 2009
[3] P. K. Parker, “The boundary-scan handbook: analog and digital”, 2nd ed., Ch. 1.4.,
Kluwer Academic Publishers Boston/ Dordrecht/ London, 1998
[4] Norman et al., “An Interconnection Network for a Novel Reconfigurable Circuit Board”
IEEE NEWCAS-TAISA Conference, Montreal, Canada, Jun 22-25, 2008
[5] R. Norman, O. Valorge, Y. Blaquiere, E. Lepercq, Y. Basile-Bellavance, Y. El-Alaoui, R.
Prytula. Y. Savaria, “An Active Reconfigurable Circuit Board”, NEWCAS 2008.
[6] M. Madou, “Fundamentals of Microfabrication: The Science of Miniaturization”, (2nd
ed.), CRC Press, 2002.
[7] « USB Serial Bus specification »,
http://www.usb.org/developers/docs/
disponible
sur
le
site
usb.org
:
[8] Open Core HDL modeling guidelines, disponible sur le site opencores.org :
http://cdn.opencores.org/downloads/opencores_coding_guidelines.pdf
[9] Pong P. Chu, “FPGA Prototyping by VHDL Examples”, page 77 (4.2.2 Register), WileyInterscience, 2008.
[10] Pong P. Chu, “FPGA Prototyping by VHDL Examples”, page 107 (Chapter 5, FSM),
Wiley-Interscience, 2008.
Sites Internet
UQAM, Génie microélectronique : http://www.micro.uqam.ca/
Projet DreamWafer : http://www.dreamwafer.com/
Vidéo de présentation du WaferBoard :
http://www.youtube.com/watch?v=LNNXgW2wUfU
TechnoCap : http://www.technocap.com/
Actel : http://www.actel.com/
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 41
ANNEXES
ANNEXES
Sommaire Annexes
Spécifications Protocoles......................................................................................................43
Protocole JTAG.................................................................................................................... 59
Cas de simulation.................................................................................................................62
Rapports Phase 11................................................................................................................65
Présentation CD / Contenu SVN..........................................................................................68
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 42
ANNEXES
ANNEXE 1
Spécifications Protocoles
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 43
ANNEXES
ANNEXE 2
Protocole JTAG
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 59
ANNEXES
En 1985, un groupe de compagnie ont formé un consortium dans le but de mettre au point un
nouveau standard pour le test de PCB basé sur un protocole de communication sérielle entièrement
contrôlable par logiciel. L’objectif du standard est d’accéder au contrôle et à l’observation des
broches des circuits intégrés d’un circuit imprimé (PCB) dans le but de tester les interconnexions
des circuits discrèts sur le PCB. Le terme « boundary scan » (chaîne de balayage) a été ainsi créé.
Ce groupe s’est appellé Joint European Test Action Group (JETAG). Quelques années plus tard, le
concept s’est généralisé en Amérique du Nord pour prendre le nom de JTAG et a été accepté comme
standard IEEE 1149.1.
Le test JTAG n’influe en rien sur la fonctionnalité du noyau logique. En fait, le chemin du
Boundary- Scan est indépendant de la fonction du composant.
Soit la carte ci-dessous :
Cette figure montre une carte contenant quatre composants JTAG. Notons qu’il existe sur la carte
un connecteur en entrée nommé TDI connecté sur l’entrée TDI du premier composant. Le TDO du
premier composant est relié au TDI du second composant. Et ainsi de suite jusqu’à la sortie du
dernier composant appelée TDO. Les TCK et TMS sont reliées à chacun des composants en
parallèle. Dans ce chemin, certains tests particuliers peuvent être appliqués à chacun des
composants par l’intermédiaire du chemin de scan global. Ainsi il va être possible de charger une
valeur spécifique dans les cellules JTAG d'entrées via la broche TDI de la carte (opération de
décalage d’entrée), d’appliquer cette valeur au composant (opération update), de mémoriser la
réponse du composant (opération capture), et de sortir cette valeur sur la broche TDO de la carte
(opération décalage de sortie).
Un système de test JTAG possède un certain nombre d’éléments :
•
“Tap Controller” : une machine à état fini dont le diagramme d’état est représenté à
sur la figure de la page suivante.
•
“Bypass register” : un registre simple obligatoire dans le standard utilisé pour
raccourcir les chemins sériels entre les circuits intégrés sous test.
•
“Instruction register” : défini le mode dans lequel la chaîne de balayage est utilisée.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 60
ANNEXES
Ainsi que les 5 ports JTAG :
•
Le port tdi: signal d’entrée des données sérielles de test à appliquer aux chaînes de
balayage
•
Le port tms : signal de contrôle du “Tap Controller” (voir figure G.2).
•
Le port tck : signal d’horloge activé lors du mode test
•
Le port tdo : signal de sortie des données sérielles (résultats du test appliqué)
•
Le port trst : signal de réinitialisation
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 61
ANNEXES
ANNEXE 3
Cas de simulation
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 62
ANNEXES
Cas 1 : Changement de la fréquence du signal tck JTAG par deux trames destinées au
registre freq_ctrl_reg :
Cas 2 : Envoi d'une commande avancée JTAG start_shift_dr sur le reticule 4 avec 8 bits de
données :
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 63
ANNEXES
Cas 3 : Envoi de différentes commandes JTAG sur les réticules (cas de test ret5)
Cas 4 : Commande jtag « rst » sur les 4 réticules successivement (cas de test ret0)
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 64
ANNEXES
ANNEXE 4
Rapports Phase 11
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 65
ANNEXES
Romain Clochard WorkPlan
Phase 11 (May-Aug 2010)
DreamWafer™



Waferboard Communication Protocols
◦
Definition of a communication architecture
◦
Establish specifications
Power-Block FPGA
◦
Write VHDL code according to the communication architecture
◦
Perform simulations to test and debug
◦
Implementation on Spartan 3 Board : test generation
◦
Implementation on AGL060V5
Bottom-PCB FPGA
◦
FPGA selection (with BrioConcept)
◦
Write VHDL code according to the communication architecture
◦
Perform simulations to test and debug
◦
Implementation on Spartan3 Board : test generation
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 66
ANNEXES
Romain Clochard WorkPlan
Phase 11 (May-Aug 2010)
DreamWafer™


Waferboard Communication Protocols
◦
Definition of a communication architecture
◦
Establish specifications
Power-Block FPGA
◦
Write VHDL code according to the communication architecture
◦
Perform simulations to test and debug
◦
Implementation on Spartan 3 Board : test generation
(POWER BLOCK FPGA DESIGN NOT TESTED WITH THE ACTEL
EVALBOARD)
◦

Implementation on AGL060V5
Bottom-PCB FPGA
◦
FPGA selection (with BrioConcept)
◦
Write VHDL code according to the communication architecture
◦
Perform simulations to test and debug
◦
Implementation on Spartan3 Board : test generation
◦

Added Tasks
◦
Test Environment creation for Power-Block FPGA debugging
◦
Writing master's degree internship report
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 67
ANNEXES
ANNEXE 5
Présentation CD / Contenu SVN
Dans cette partie est détaillé le contenu du CD accompagnant ce rapport. L'organisation des
répertoires reprend en partie celle créée sous l'espace de partage SVN du projet DreamWafer™ où
les membres du projet pourront retrouver les fichiers et codes produits pendant cette période de
stage.
/Design FPGA/
Bloc-diagrammes du FPGA du Power Block
/Documentation Logiciels_Matériel/
Documents contructeur sur le FPGA Actel Igloo AGL060, la carte d'évaluation Actel A2F.
Documents sur les logiciels ModelSim (Mentor Graphics) et Synplify Synthesis (Synopsis).
/fpga_pb/
bench/
fichiers VHDL de type « test bench »
doc/
documentation sur l'utilisation du bloc CRC VHDL.
document « OpenCores Coding Guidelines » sur des règles de programmation
en VHDL
Description des composants de la Librairie Igloo
Guide d'utilisation de SmartGen
Fichiers Log issus de SmartGen et de la génération des blocs FIFO
lib/
Librairies work et igloo utilisées par les fichiers VHDL
rtl/
Codes VHDL (1 fichier par bloc)
scripts/
Scripts power_block_lib (création des librairies) et power_block_sim (script de de
simulations)
Fichiers .do de configuration de la simulation (signaux, durée)
syn/
Fichiers liés à la synthèse du FPGA sous Synplify Synthesis
test/
document décrivant les tests effectués avec l'environnement de test
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 68
ANNEXES
CodeBlocksProject/
Projet crée sous Code::Blocks pour élaborer l'environnement de test
src/
Fichiers sources C++ (.cpp et .h)
testvector_input/
Contient un répertoire par série de trames créé sous l'environnement de test.
Chaque répertoire contient les fichiers interframe.txt (espace intertrame),
LogFileIn.log, vec*.txt (1 fichier par trame BOT-PB) et vectorsforsim.txt
(créé par le script de simulation par concaténation des fichiers interframe et
vec*).
testvector_output/
Contient un répertoire par série de trames créé sous l'environnement de test.
Chaque répertoire contient les fichiers resultsfromsim.txt (resultats de la
simulation), vecExpect*.txt (prévisions trame PB-BOT), vec*.txt (1 fichier
par trame PB-BOT issue de l'analyse de resultsfrom.sim.txt), JtagData.txt
(signaux JTAG issus de la simulation), LogFileOut.log, RegulData.txt
(signaux régulateur issus de la simulation).
/Gestion de Projet/
Tâches personnelles pour la phase 11 du projet
/Protocoles/
Frames Description : fichier décrivant les champs de trames BOT-PB, PB-BOT et les
données contenues dans le FIFO header_ctrl.
Envoi Signaux JTAG : exemple de référence pour l'envoi de signaux JTAG aux réticules.
Spécifications des Procotoles du WaferBoard™
/Rapport de Stage/
Rapport de stage sous format Open Office et PDF
/WaferBoard/ (ensemble des documents en anglais)
Glossaire, Liste des brevets déposés ou en cours, revue de presse, présentation du
WaferBoard™, terminologie autour du projet.
Research Papers/
Publications scientifiques de l'équipe DreamWafer™.
DreamWafer™ : Conception de FPGA et communications inter-FGPA
Page 69
RÉSUMÉ
Ce stage s'inscrit dans le projet de recherche DreamWafer™ qui vise à développer
une plateforme de prototypage rapide pour les systèmes électroniques appelée
WaferBoard™. L'ambition du projet est de réaliser pour les systèmes électroniques ce
que les FPGA sont aux microprocesseurs : rendre possible une reprogrammation
complète du circuit.
L'utilisateur du WaferBoard™ place les composants sur la surface du WaferIC™ et
referme un couvercle : les composants sont repérés, identifiés, alimentés. Les
connexions entres les circuits peuvent être configurées : le prototype est prêt à
fonctionner.
Pour son fonctionnement interne, le WaferBoard™ comprend plusieurs PCB équipés
de FPGAs.
Ce document porte sur ma contribution à ce projet sur les points suivants :
• La création des protocoles de communication entre FPGA ainsi que la
rédaction des spécifications.
• La conception ou « design » des FPGA des Power Blocks (circuits imprimés
inclus dans le WaferBoard™ ) en langage VHDL.
• La mise au point d'un environnement de test en langage C++, conforme aux
spécifications établies et permettant un débogage avancé du design.
Ces travaux constituent une première étape importante dans le design des FPGA des
autres PCB ainsi que dans la création du logiciel qui pilotera le WaferBoard™.

Documents pareils