Projet de master Laboratoire de Systèmes Microélectroniques (LSM), EPFL
|
|
|
- Tristan Vachon
- il y a 10 ans
- Total affichages :
Transcription
1 Projet de master Laboratoire de Systèmes Microélectroniques (LSM), EPFL Etudiant : François EMERY Superviseur : Alain VACHOUX Professeur : Yusuf LEBLEBICI
2 Table des matières 1. Introduction Convertisseurs Types de conversion A/D Conversion A/D temporelle Conversion A/D de Fourier Conversion A/D de Walsh-Hadamard Générateur d Hadamard Matrices d Hadamard Fonctions d Hadamard Simulation du générateur d Hadamard numérique Synthèse du générateur d Hadamard numérique en portes logiques Placement et routage du générateur d Hadamard numérique Bloc de modulation Structure d intégration Génération des signaux de commande Gain et retard du bloc de modulation Adaptation à un système différentiel Bloc ADC Etage pipeline Décodeur Banc de registres Additionneur à redondance Imperfections modélisées Adaptation à un système différentiel Résultats ADC Correction d erreurs Résultats de simulations Démodulateur de Walsh-Hadamard Principe de démodulation Démodulateur à 2 canaux Démodulateur à 4 canaux Structure du démodulateur développé Simulation du démodulateur Synthèse du démodulateur de Walsh-Hadamard en portes logiques Placement et routage du générateur d Hadamard numérique Système complet Générateur de fonctions d Hadamard Modulateur Convertisseurs ADC pipelines Démodulateur /106
3 7.5. Convertisseur de Walsh-Hadamard complet Résultats de simulation Cas à 2 canaux Cas à 4 canaux Conclusion Remerciements Bibliographie Annexes techniques Algorithme : Générateur d Hadamard Fonctions de Walsh Construction du générateur d Hadamard Algorithme démodulateur ère Etape : Conversion std_logic_vector / unsigned ème Etape : Opérations arithmétiques ème Etape : Système de switches de sortie Annexes code Code VHDL du Package Code VHDL du générateur de fonctions de Walsh-Hadamard Code VHDL du démodulateur générique de Walsh-Hadamard Code VHDL / VHDL- AMS du modulateur Code VHDL / VHDL-AMS du Convertisseur pipeline Code du système complet /106
4 1. Introduction Le but de ce projet consiste à développer un modèle comportemental, en utilisant les langages VHDL et VHDL-AMS, des différentes parties d un convertisseur parallèle imaginé par G. Ding utilisant, pour la modulation, les fonctions de Walsh-Hadamard. La contribution au design d un tel convertisseur proviendra essentiellement du développement d algorithmes génériques chargés de modéliser les deux principaux blocs digitaux de ce circuit, à savoir le générateur d Hadamard, fournissant les fonctions utilisées pour la modulation ainsi que pour la création de tous les signaux de commande utiles au fonctionnement du système complet, et le démodulateur, chargé de recombiner les signaux modulés afin de restituer correctement le mot de sortie du système. Les codes de ces deux blocs génériques seront alors synthétisés pour aboutir à des layout importables sur Cadence qui seront utilisés par G. Ding pour la réalisation d un prototype de convertisseur de Walsh-Hadamard complet intégré réalisé dans la technologie umc 0.18μ. Pour pouvoir simuler le système complet, deux autres blocs analogiques ont été modélisés en utilisant une démarche montante qui consiste à partir de blocs déjà réalisés au niveau transistor pour aboutir à une modélisation comportementale de ces derniers ayant un certain niveau d abstraction. Les modèles devront posséder une structure identique à l implémentation physique c'est-à-dire avoir les mêmes entrées et sorties et devront être capables de simuler le comportement global du circuit sans pour autant modéliser toutes les imperfections liées à l implémentation physique réelle. Pour ce faire, le langage que nous avons utilisé est le langage VHDL-AMS qui offre une grande flexibilité d utilisation et la possibilité d ajout d imperfections. Ce langage présente l avantage d être beaucoup plus rapide à simuler qu un modèle au niveau purement transistor et infiniment plus flexible dans le cas où l on veut pouvoir tester le comportement approximatif du circuit au changement d un paramètre comme le nombre de canaux utilisés. Le langage VHDL-AMS représente donc un bon compromis entre flexibilité et réalisme de la modélisation répondant ainsi pleinement aux objectifs de ce projet. Le chapitre 2 explicitera l utilité et les avantages d un convertisseur parallèle utilisant les fonctions de Walsh-Hadamard par rapport à un convertisseur usuel. Les chapitres 3 à 6 décriront les blocs élémentaires développés dans le cadre de ce projet qui constitueront les éléments de base du convertisseur complet de Walsh-Hadamard. Le chapitre 7 présentera la structure du convertisseur de Walsh-Hadamard complet générique que nous avons réalisé et simulé en utilisant à la fois ADVance MS et l environnement Cadence. Le chapitre 8 reprendra les points importants de ce projet. Les chapitres suivants sont les annexes et contiennent notamment les codes ainsi que les explications des algorithmes développés pour les blocs digitaux. 3/106
5 2. Convertisseurs Les convertisseurs analogique-numérique (convertisseurs A/D) ont pour but de convertir un signal analogique en un signal numérique (digital) composé de mots numériques codés en binaires. Cette transformation, appelée numérisation, comporte deux activités distinctes : l échantillonnage, consistant à prélever périodiquement des échantillons du signal analogique, et la quantification qui a pour but d attribuer une valeur numérique à chaque échantillon prélevé. La qualité du signal numérique récupéré à la sortie du convertisseur dépendra donc de deux facteurs : 1) La fréquence d échantillonnage : Plus celle-ci est grande, plus le nombre d échantillons prélevés est important et donc plus le signal de sortie sera fidèle à l original 2) La résolution : Plus la résolution est fine, plus le nombre de valeurs que peut prendre la sortie dans l intervalle spécifié sera grand et donc meilleure sera la qualité du signal de sortie Pour ne pas perdre d information lors de la conversion d un signal, la fréquence d échantillonnage doit respecter le théorème de l échantillonnage de Shannon. Ce dernier nous donne l inéquation suivante entre la fréquence théorique d échantillonnage minimum f e et la fréquence maximum du signal d entrée f max : f e > 2*f max Si la fréquence d échantillonnage se situe en dessous de cette limite théorique, il y a alors forcément perte d information lors de la conversion A/D et il n est plus possible de reconstituer correctement le signal à partir de la sortie numérique du convertisseur D/A. Un exemple de non-respect du théorème d échantillonnage de Shannon est montré à la figure 2-1. Un sinus de fréquence f 1 à numériser est appliqué à l entrée d un convertisseur A/D ayant une fréquence d échantillonnage inférieure à 2* f 1. Le signal de sortie de ce convertisseur est alors envoyé dans un convertisseur D/A chargé de reconstituer le sinus. Dans cet exemple, T e = 1.1*T Figure 2-1 : Non-respect du théorème d échantillonnage de Shannon 4/106
6 Nous pouvons voir que le signal apparent de sortie ne correspond pas au signal d entrée. Le convertisseur A/D doit donc avoir une fréquence d échantillonnage respectant le théorème de Shannon pour fonctionner correctement. En pratique, la condition sur la fréquence d échantillonnage est beaucoup plus sévère que celle théorique imposée par le théorème de Shannon et ce pour assurer une conversion suffisamment fidèle du signal d entrée. Une fréquence minimum d échantillonnage de 20 fois la fréquence maximale du signal à convertir sera en principe utilisée (loi empirique). f e > 20*f max Les convertisseurs standards actuels (comme les convertisseurs A/D flash par exemple) fonctionnent à des fréquences d échantillonnage suffisamment élevées pour la plupart des applications, mais dans certains cas où le signal d entrée à convertir est à très haute fréquence, un taux d échantillonnage plus élevé peut être requis. Ceci peut notamment être le cas dans les applications radars ainsi que pour certains systèmes de communication. Dans ce cas, une solution possible consiste à utiliser plusieurs canaux, possédant chacun un convertisseur, en parallèle. Dans le cas d un système à N canaux (donc N convertisseurs), la fréquence de travail de chaque convertisseur peut alors être N fois inférieure à la fréquence d échantillonnage requise. Il est donc possible d utiliser N convertisseurs en parallèle travaillant à une fréquence valant f e /N à la place d un simple convertisseur à la fréquence f e. Les configurations de la figure 2-2 et 2-3 sont donc fonctionnellement identiques. Figure 2-2 : Convertisseur simple canal : fréquence f e Figure 2-3 : Convertisseur à N=4 canaux : fréquence f e /N= f e /4 5/106
7 Si l on considère que les convertisseurs travaillent à la même fréquence dans les deux cas, la configuration à N canaux permettra de convertir correctement (c'est-à-dire en respectant la condition empirique sur la fréquence d échantillonnage donnée plus haut) des signaux d entrée ayant une fréquence N fois supérieure à celle pouvant être convertie en utilisant un seul convertisseur. Le prix à payer pour ce faire est une augmentation de la complexité du circuit de part l utilisation de N modulateurs et d un démodulateur. Quelque soit le type de convertisseur parallèle utilisé, il contiendra toujours N modulateurs, N convertisseurs et un bloc de démodulation. Les modulateurs servent à diviser le signal d entrée en N signaux orthogonaux, ce qui sera réalisé en multipliant l entrée par les fonctions U j d une base. Les convertisseurs traduisent la valeur d entrée analogique en un mot de sortie digital. Le bloc de démodulation est chargé de reconstituer le signal de sortie à partir des signaux partiels délivrés par chaque canal. Il convient de relever que la base [U 1,, U N ] utilisée par les modulateurs doit impérativement être orthogonale pour que les signaux convertis puissent être reconstruits univoquement par le démodulateur. Les fonctions U j correspondent aux lignes des matrices utilisées comme base répétées périodiquement. 6/106
8 2.1. Types de conversion A/D Dans cette partie, nous allons brièvement présenter les deux principaux moyens de conversion analogique-numérique (conversion A/D temporelle et conversion A/D de Fourier) usuellement utilisés et les comparer à la conversion A/D de Walsh-Hadamard utilisée par le circuit qui nous intéresse Conversion A/D temporelle La base orthogonale pour ce type de conversion est la matrice identité : Figure 2-4 : Matrice pour conversion A/D temporelle (cas N=4 : 4 canaux). Le principe de fonctionnement de cette conversion temporelle réside dans le fait que chaque canal prend en charge seulement 1 échantillon toutes les N périodes d échantillonnage. En d autres termes, pour un système à quatre canaux, le convertisseur du canal 1 s occupe des échantillons 1, 5, 9,, celui du canal 2 des échantillons 2, 6, 10,, celui du canal 3 : 3,7,11, et finalement celui du canal 4 : 4, 8, 12,.... Ce principe de fonctionnement est illustré à la figure 2-6. Chaque convertisseur dispose donc de quatre fois (N fois dans le cas à N canaux) plus de temps pour effectuer la conversion et peut donc travailler avec une fréquence d échantillonnage 4 (N) fois plus petite que si un seul convertisseur était utilisé Figure 2-5 : Schéma de principe de la conversion A/D temporelle (cas N=4 : 4 canaux) 7/106
9 sample_1 sample_1 canal 1 sample_2 hold_1 hold_1 sample_2 t canal 2 sample_3 hold_2 t canal 3 sample_4 hold_3 t canal 4 hold_4 t Figure 2-6 : Principe de fonctionnement des Sample & Hold Un point restreint cependant fortement l utilisation de ce type de conversion pour des applications à très haute fréquence. Il s agit de sa forte sensibilité à tout problème de synchronisation entre les divers canaux qui limite sérieusement la fréquence maximale du signal d entrée. Les résultats de cette sensibilité sont particulièrement visibles pour des signaux ayant des composantes très hautes fréquences car ils peuvent varier fortement entre deux prises d échantillons et il faut donc assurer un synchronisme parfait entre les divers canaux Conversion A/D de Fourier La base orthogonale pour ce type de conversion est la matrice de Fourier donnée ci-dessous : e e e 1 π j 2 jπ 3π j 2 e e e Figure 2-7 : Matrice pour conversion A/D de Fourier (cas N=4 : 4 canaux) Dans cette approche, les canaux ne sont pas utilisés successivement comme dans le cas de la conversion temporelle mais le sont continuellement. Chaque canal ne prend en revanche en charge qu une partie f max / N du spectre fréquentiel du signal d entrée (f max = fréquence maximum du signal d entrée) ce qui réduit la fréquence du signal entrant dans chaque convertisseur à f max / N et leur permet ainsi de travailler avec une fréquence d échantillonnage N fois plus petite que dans le cas où un seul convertisseur est utilisé, tout en respectant la contrainte liant la fréquence d échantillonnage à la fréquence maximale du signal d entrée du convertisseur. 1 jπ j2π j3π e e e 1 3π j 2 j3π 9π j 2 8/106
10 Le principe de fonctionnement de ce type de convertisseur est donné à la figure 2-8. Il nécessite l utilisation d un élément intégrateur (filtre passe-bas) placé juste après la multiplication du signal d entrée par les fonctions tirées de la matrice de Fourier et sert à limiter le spectre fréquentielle pris en charge par chaque canal à une fréquence f max / N. Figure 2-8 : Schéma de principe de la conversion A/D de Fourier (cas N=4 : 4 canaux) Ce type de système offre l énorme avantage d être beaucoup moins sensible à d éventuels problèmes de synchronisation que ne l est la conversion A/D temporelle. Cela est dû au fait que tous les canaux sont pilotés par les mêmes signaux d horloge et ne sont pas utilisés successivement. Cette conversion présente cependant deux désavantages majeurs qui résident premièrement dans le fait que le signal d entrée doit théoriquement être périodique pour que ce circuit fonctionne parfaitement et deuxièmement dans la forte complexité du circuit avec notamment l introduction de parties réelles et imaginaires qui nécessitent un dédoublement de chaque canal pour pouvoir traiter chaque partie séparément. Le démodulateur, chargé d effectuer la transformée de Fourier inverse, est également très lourd à implémenter. La conversion A/D de Fourier est donc physiquement (implémentation sur circuit imprimé) très lourde à réaliser de part son niveau extrêmement élevé de complexité (surtout pour la démodulation). 9/106
11 Conversion A/D de Walsh-Hadamard La base orthogonale utilisée pour ce type de conversion est la matrice d Hadamard : Figure 2-9 : Matrice pour conversion A/D de Walsh-Hadamard (cas N=4 : 4 canaux) La conversion A/D réalisée à l aide de la base d Hadamard possède l avantage d être peu sensible aux problèmes de synchronisation comme la conversion de Fourier, mais est beaucoup plus simple à implémenter physiquement. De plus, l utilisation des fonctions de Walsh-Hadamard permet d obtenir un convertisseur plus général que celui utilisant les fonctions de Fourier en étant beaucoup moins exigeant sur la périodicité du signal d entrée. Figure 2-10 : Schéma de principe de la conversion A/D de Walsh-Hadamard (cas N=4 : 4 canaux) Ce type de conversion n est cependant applicable qu à des systèmes ayant un nombre limité de canaux (4, voir au maximum 8), les fonctions de Walsh-Hadamard ayant des composantes haute fréquence difficilement gérables si l on élève ce nombre. La suite de ce rapport sera dédiée exclusivement à ce type de convertisseur. Les chapitres qui suivent ont pour but de présenter les différents blocs d un tel convertisseur représenté à la figure 2-10, à savoir le générateur de fonctions d Hadamard (chargé de fournir les signaux contenus dans les matrices d Hadamard utilisés pour la modulation et la génération de tous les signaux de contrôle du convertisseur), le bloc de modulation, les convertisseurs A/D ainsi que le bloc de démodulation. 10/106
12 3. Générateur d Hadamard La base que nous allons utiliser pour moduler le signal d entrée est la base d Hadamard qui, pour des raisons de reconstruction univoque du signal d entrée, est orthogonale (le produit scalaire entre deux fonctions appartenant à cette base est nul). Outre l utilisation des fonctions tirées de cette base pour la modulation du signal d entrée, elles serviront également à la construction de tous les signaux de commande utiles aussi bien au fonctionnement des blocs de modulation, aux convertisseurs de chaque canal ainsi qu au démodulateur. Pour garantir la plus grande souplesse d utilisation, nous avons développé un générateur générique (à l aide du langage VHDL) capable de fournir les N_hadamard premières fonctions d Hadamard numériques ainsi que leurs complémentaires et ceci à partir d un simple signal d horloge en entrée. Ces fonctions seront utilisées par la suite pour le contrôle du circuit complet. Il est à noter que la valeur N_hadamard devra être une puissance de 2 compte tenu de la nature des fonctions d Hadamard et de la méthode générique utilisée pour implémenter ce bloc. La suite de ce chapitre sera consacrée exclusivement à l explication de ce que sont les fonctions d Hadamard ainsi qu à l analyse des résultats provenant des diverses simulations du code développé pour ce générateur, réalisées à différents niveaux d abstraction (avant synthèse, synthétisé au niveau portes logiques et après placement-routage); l explication de la méthodologie utilisée pour aboutir à ce code figurant dans les annexes techniques du chapitre 11. La vue symbolique d un générateur d Hadamard à 8 fonctions est donnée ci-dessous : Figure 3-1 : Générateur des 8 premières fonctions d Hadamard 11/106
13 3.1. Matrices d Hadamard La base d Hadamard est composée des vecteurs contenus dans les matrices d Hadamard. Ces dernières sont des matrices carrées dont les coefficients valent soit +1, soit -1 et dont les lignes sont orthogonales entre elles. Elles peuvent être construites simplement de manière récursive en utilisant la propriété suivante dite propriété de Sylvestre : avec Où n = nombre de lignes et de colonnes de la matrice d Hadamard En appliquant cette méthode de manière récursive, il est aisé de construire les matrices d ordre 2 k pour tout entier naturel k. Ces dernières sont symétriques et présentent la particularité d avoir leur 1 ère ligne et leur 1 ère colonne remplis uniquement d éléments positifs, le reste de la matrice étant composé à part égal d éléments négatifs et positifs. Les matrices d Hadamard d ordre 2, 4 et 8 construites à l aide de la propriété ci-dessus sont les suivantes : Figure 3-2 : Matrices d Hadamard 12/106
14 Ce que nous appellerons, par abus de langage, les fonctions d Hadamard logiques sont les signaux binaires tirés des lignes des matrices d Hadamard, le +1 correspondant à un 1 logique et le -1 à un 0, répétées périodiquement. La fonction d Hadamard d ordre i est déduite de la ligne i+1 de n importe quelle matrice d Hadamard. La fonction d Hadamard d indice 0 (HAD0) équivaudra à la 1 ère ligne de n importe quelle matrice d Hadamard répétée périodiquement et sera donc constante à la valeur 1. La fonction d indice 1 (HAD1) obtenue à l aide de la seconde ligne des matrices d Hadamard alternera les valeurs 1 et 0 et ainsi de suite. Les huit premières fonctions d Hadamard logiques sont représentées à la figure 3-3, l horloge d entrée du générateur correspondant au signal d horloge du convertisseur de Walsh- Hadamard : Figure 3-3 : Représentation des 8 premières fonctions d Hadamard 13/106
15 3.2. Fonctions d Hadamard La méthode complète utilisée pour obtenir les N_hadamard premières fonctions d Hadamard et leurs complémentaires à partir d un unique signal d horloge comme entrée est décrite en détail dans l annexe technique (chapitre 11.1) et ne sera pas détaillée dans cette partie. Pour information, elle est basée sur un système de divisions fréquentiels du signal d entrée dont les signaux résultants, combinés entre eux, permettent de fournir toutes les fonctions d Hadamard. Par exemple, toutes les fonctions d Hadamard de la figure 3-3 peuvent être optenues en combinant les fonctions résultants de divisions fréquentiels par 2, 4 et 8 comme représenté dans la figure suivante : Figure 3-4 : Signaux résultant de divisions fréquentiels Simulation du générateur d Hadamard numérique Le résultat de la simulation sur Modelsim du code générique du générateur d Hadamard numérique pour N_hadamard = 8 est représenté à la figure 3-5. Figure 3-5 : 8 premières fonctions d Hadamard numériques Les fonctions d Hadamard logiques ainsi que leurs inverses correspondent bien aux résultats escomptés, représentés à la figure Synthèse du générateur d Hadamard numérique en portes logiques Le code VHDL du générateur d Hadamard numérique générique a été synthétisé au niveau porte logique à l aide du programme Synopsys Design Vision. 14/106
16 Le circuit réel nécessitera les 8 premières fonctions d Hadamard et devra pouvoir fonctionner jusqu à une fréquence maximum de 400 Mhz. A cette étape, nous avons synthétisé en portes logiques le générateur d Hadamard générique que nous avons développé avec une contrainte sur l horloge d entrée de 400 Mhz et ce pour un générateur capable de fournir les 4, 8 et 16 premières fonctions d Hadamard. Pour ce faire nous avons employé la technologie umc 0.18μ, fonctionnant avec une tension d alimentation de VDD = 1,8V, qui est celle utilisée par le circuit réel. Pour garantir le respect de la contrainte imposée sur le timing dans des conditions normales, le circuit a été testé avec des conditions ayant un effet particulièrement défavorable sur sa vitesse. Celles-ci correspondent à une température de 85 degrés Celsius et un voltage 10% inférieur à celui requis (c'est-à-dire égal à 1,62V). Ainsi, si la contrainte sur le chemin critique est respectée avec de telles conditions, une marge de sécurité est ajoutée lors du fonctionnement normal. Le schéma en blocs logiques élémentaires obtenu en synthétisant un générateur d Hadamard fournissant les 8 premières fonctions en technologie umc 0.18μ est donné à la figure suivante (les signaux rouges et oranges représentent respectivement les 8 fonctions d Hadamard et leurs complémentaires, le signal jaune : l horloge, le signal en noir foncé : le signal de reset barre et le signal violet : le chemin critique). Figure 3-6 : Générateur des 8 premières fonctions d Hadamard en blocs logiques élémentaires Dans le tableau suivant, nous avons regroupé les résultats concernant la surface, le timing, ainsi que la consommation de puissance pour un générateur fournissant les 4, les 8 et les 16 premières fonctions d Hadamard. 15/106
17 La surface est séparée en 3 parties : celle utilisée par la logique combinatoire, celle pour la logique non combinatoire ainsi qu une estimation de la surface des interconnections. Le timing est défini par le slack qui représente la marge entre le temps que met le signal le plus lent pour se propager de l entrée à la sortie (chemin critique) et le temps à disposition correspondant à une période du signal d horloge (2,5 ns dans notre cas, car l horloge fonctionne à 400 Mhz). Un slack positif signifie que la contrainte sur le timing est respectée. La puissance est subdivisée en 2 : celle servant au fonctionnement propre des blocs logiques élémentaires et celle utilisée pour le changement d état des lignes. Générateur Hadamard Surface Combinatoire (μm 2 ) Non Combinatoire (μm 2 ) Interconnections (μm 2 ) Total (μm 2 ) Timing (période = 2.5ns) Slack (ns) 0,92 0,15 0,04 Consommation Puissance interne (μw) Switch des lignes (μw) Total (μw) Figure 3-7 : Tableau comparatif pour diverses configurations du générateur d Hadamard Les simulations réalisées sur les générateurs d Hadamard synthétisés à 4, 8 et 16 fonctions fournissent des résultats semblables à ceux attendus. Lors de la synthèse, des délais estimés, représentant le temps de transition lors d un changement d état de la sortie et ce pour chaque porte logique et bascule, sont ajoutés par le simulateur provoquant ainsi un retard sur les signaux de sortie du générateur. La logique servant au calcul des fonctions d Hadamard étant différente pour chacune d entre elles, le temps de réponse sera donc différent pour chaque fonction, conduisant à l apparition de glitches durant la phase de transition des fonctions d Hadamard. Si l on excepte ce phénomène limité et purement transitoire, propre à tout circuit électronique, la forme des fonctions d Hadamard est en adéquation avec le résultat attendu. La figure 3-8 contient les résultats de simulation après synthèse du générateur d Hadamard à 8 fonctions. Figure 3-8 : 8 premières fonctions d Hadamard après synthèse en portes logiques 16/106
18 Placement et routage du générateur d Hadamard numérique La dernière étape à effectuer consiste à convertir le code du générateur d Hadamard numérique en un circuit final au niveau transistor importable dans l environnement Cadence et directement utilisable pour la réalisation d une puce électronique. Les librairies nécessaires à cette étape n étant pas encore disponibles pour le placementroutage en technologie umc 0.18μ, nous l avons réalisé en ams 0.35μ. Le principe demeure rigoureusement le même si l on excepte le fait que le circuit final sera vraisemblablement un peu moins rapide et un peu plus grand que celui dans le cas où la technologie umc 0.18μ aurait été utilisée. Pour cette étape, réalisée pour des générateurs d Hadamard à 4, 8 et 16 fonctions, nous avons utilisé le programme Cadence Encounter qui nous permet d obtenir le schéma final au niveau transistor d un générateur d Hadamard sur Cadence IC tout en nous fournissant des netlists utilisables pour effectuer des simulations sur Modelsim. Le layout pour un générateur fournissant les 8 premières fonctions d Hadamard et leurs complémentaires est le suivant : Sorties = Fonctions d Hadamard et leurs complémentaires VDD GND reset_barre clk_system Figure 3-9 : Layout générateur des 8 premières fonctions d Hadamard 17/106
19 Les données sur la taille et la consommation du circuit au niveau transistor ne nous sont pas réellement utiles, car la technologie utilisée est plus grande que celle du circuit réel. De plus, la technologie ams 0 35μ fonctionne avec une tension d alimentation de 3,3 V, alors que l umc 0.18μ est alimenté en 1,8 V. Les estimations de timing, de taille ainsi que de consommation de puissance réalisées dans le cas de la synthèse en portes logiques du point seront plus proches des valeurs réelles du générateur d Hadamard qui sera intégré dans le prototype du convertisseur complet de Walsh- Hadamard que les estimations pouvant être fournies dans cette partie (car la synthèse au niveau porte logique a été réalisée en technologie umc 0.18μ, ce qui n a pas été possible de faire pour le placement et routage). Le circuit au niveau transistor a été simulé sur Modelsim et produit des résultats identiques à ceux escomptés (phénomène transitoire durant la phase de transition résultant en des glitches dû aux temps de réponse différents des éléments fournissant les fonctions d Hadamard). Figure 3-10 : Fonctions d Hadamard après placement et routage 18/106
20 4. Bloc de modulation Cette partie a pour but d expliquer le principe de fonctionnement du bloc de modulation d un convertisseur A/D de Walsh-Hadamard à N canaux. Le modulateur possédera N canaux composés chacun des éléments suivants : Un mélangeur chargé de multiplier le signal d entrée par la fonction d Hadamard correspondant au numéro du canal-1. Un intégrateur prenant en entrée la sortie du mélangeur et devant être vidé périodiquement à chaque cycle (si chaque canal doit travailler à une fréquence de 100 Mhz, il faudra vider l intégrateur toutes les 10 ns). La sortie de l intégrateur sera ensuite envoyée dans le convertisseur A/D du canal correspondant pour y être échantillonnée et numérisée comme représenté à la figure 4-1. MODULATEUR Canal 1 du modulateur Canal 2 du modulateur Canal 3 du modulateur Canal 4 du modulateur Figure 4-1 : Schéma de principe d un convertisseur idéal de Walsh-Hadamard à 4 canaux Le modulateur, qui est un bloc analogique, a été réalisé au niveau transistor par G. Ding (pas encore tout à fait terminé). La modélisation VHDL-AMS se devra donc de posséder une structure identique à l implémentation physique, c'est-à-dire de disposer des mêmes entrées et sorties et devra être capable de simuler le comportement global sans pour autant modéliser toutes les imperfections liées à l implémentation physique réelle. Le convertisseur complet de Walsh-Hadamard pourra ainsi être simulé soit avec le bloc de modulation modélisé présenté dans cette partie, soit avec le modulateur réel au niveau transistor de G. Ding. La suite de ce chapitre est dédiée à l explication du principe de fonctionnement d un tel modulateur. 19/106
21 4.1. Structure d intégration L intégrateur de chaque canal est censé fonctionner continuellement et doit être vidé à chaque période du signal de contrôle des canaux. Physiquement, cela ne peut cependant pas être réalisé instantanément. Une solution consiste alors à remplacer l intégrateur par un système comprenant deux intégrateurs fonctionnant chacun à tour de rôle, suivi d un Sample&Hold à 2 entrées, chargé de sélectionner et de maintenir la valeur à appliquer à la sortie. Le schéma de principe de cette structure d intégration est donné ci-dessous : Sous-canal A Sous-canal B Figure 4-2 : Structure remplaçant l intégrateur Le principe de fonctionnement de cette structure est relativement simple et est représenté graphiquement à la figure 4-3. Cette dernière possède deux sous-canaux, pourvu tout deux d un intégrateur (sous-canal A et sous-canal B), qui sont utilisés alternativement, chacun durant la moitié de la période du signal d horloge pilotant le bloc de modulation. L entrée de la structure d intégration, nommée An_in, est relié à la sortie du mélangeur et correspond donc à la multiplication du signal d entrée du convertisseur de Walsh-Hadamard par une fonction d Hadamard dont l indice dépend du canal en question (fonction d Hadamard d indice i-1 pour le canal i). Cette valeur est appliquée alternativement (la moitié du temps) et périodiquement à l entrée de l intégrateur du sous-canal A, puis à celle du sous-canal B grâce aux signaux complémentaires de commande Int_A et Int_B. Lorsque An_in est appliquée à l entrée de l intégrateur A, l entrée de l intégrateur B est mise à zéro (et inversement) ce qui a pour effet de bloquer la valeur de sortie de cet intégrateur (par définition, lorsque l entrée d un intégrateur est nulle, sa sortie demeure constante). Dans notre système, lorsque le signal Int_A vaut 1, l entrée An_in multipliée par VDD (1,8 V) est appliquée à l entrée de l intégrateur du sous-canal A et l on dira que l intégrateur A est utilisé. Lorsque ce signal vaut 0, l entrée de l intégrateur A sera nulle de part la multiplication par 0 (VSS) et l intégrateur A ne sera alors plus utilisé (idem pour le canal B, excepté qu il répond au signal complémentaire Int_B). Durant la phase où l intégrateur d un sous-canal n est plus utilisé, la valeur de sortie de ce dernier pourra être appliquée à la sortie de la structure à l aide du Sample&Hold, puis l intégrateur de ce sous-canal pourra être vidé (remis à 0). 20/106
22 Pour garantir une intégration continuelle du signal d entrée de la structure, les signaux Int_A et Int_B se doivent d être complémentaires. De cette manière, l un des 2 intégrateurs sera en phase d intégration pendant que l autre pourra être échantillonné puis vidé. Les signaux smpl_a et smpl_b sont chargés de commander le Sample&Hold de sortie. A chaque flanc montant de smpl_a (respectivement smpl_b), la sortie de l intégrateur du souscanal A (B) sera appliquée à la sortie du bloc de modulation. Les signaux rst_a et rst_b, actifs au flanc montant, vident les intégrateurs des sous-canaux A, respectivement B. Chaque sous-canal de la structure d intégration pourra donc se trouver dans l une des 3 phases énumérées ci-dessous : 1. Phase d intégration : intégration du signal d entrée (lorsque Int_A (respectivement Int_B) vaut 1 ) 2. Phase d échantillonnage : échantillonnage et maintien de la valeur de sortie de l intégrateur sur la sortie du modulateur (lorsque smpl_a (smpl_b) = 1 ) 3. Phase de reset : remise à 0 de la valeur de sortie de l intégrateur (lorsque rst_a (rst_b) = 1 ). La figure 4-3 met en lumière les différentes phases et la forme des signaux de commande utilisés ainsi que les entrées et sorties de la structure d intégration et des 2 intégrateurs. Période d un cycle de l horloge des canaux Intégration A S&H A Rst A Intégration A S&H B Rst B Intégration B S&H B Rst B Figure 4-3 : Phases de la structure d intégration 21/106
23 Comme nous l avons fait remarquer dans la 1 ère partie de ce rapport, l utilisation de N canaux en parallèle nous permet de travailler, pour chaque canal, avec une fréquence N fois inférieure à celle du système global. La structure d intégration aura donc à une fréquence de travail valant f système /N. Etant donné que cette dernière est composée de 2 sous-canaux en parallèle (sous-canal A et sous-canal B), la fréquence de chaque sous-canal pourra donc être 2 fois plus faible que celle de la structure d intégration complète et vaudra par conséquent f système /(2*N). En introduisant la valeur Nbr_bitstocodechannels représentant le nombre de bits nécessaires à la différenciation des divers canaux (1 pour 2 canaux, 2 pour 3 et 4 canaux, 3 pour 5 à 8 canaux, ), la fréquence de travail de chaque sous-canal de la structure d intégration sera la suivante (remplacement de N par 2 Nbr_bitstocodechannels ) : f système /(2*2 Nbr_bitstocodechannels ) = f système /(2 Nbr_bitstocodechannels+1 ). Ainsi, le signal Int_A est un signal carré de fréquence f système /(2 Nbr_bitstocodechannels+1 ) et le signal Int_B, son complémentaire. Le signal smpl_a a une fréquence semblable mais n est actif que durant ⅛ de la période, le signal rst_a possédant la même forme mais décalé temporellement d ⅛ de période. Les signaux smpl_b et rst_b ont une forme semblable à smpl_a et rst_a, mais décalés temporellement d une demi période. La prochaine étape, décrite au point suivant, consiste à créer ces signaux de commande à partir des fonctions d Hadamard fournit par le générateur d Hadamard. 22/106
24 4.2. Génération des signaux de commande La vue symbolique Cadence du générateur des signaux de commande du bloc de modulation (phase _generator) dans le cas où Nbr_bitstocodechannels = 2 (3 ou 4 canaux) est donnée cidessous :.Figure 4-4 : Générateur des signaux de commande pour le cas Nbr_bitstocodechannels = 2 (3 ou 4 canaux) L horloge d entrée du générateur d Hadamard correspondra à l horloge du système oscillant à une fréquence f système. Comme expliqué dans la partie des annexes techniques (chapitre 11) consacrée au générateur d Hadamard, les fonctions d Hadamard d indice 2 i sont simplement des signaux carrés oscillant à une fréquence f système /2 i+1 (cf. figure 3-3). En utilisant cette propriété, il est aisé d obtenir la correspondance entre les fonctions d Hadamard et les signaux Int_A et Int_B qui sont simplement égaux à la fonction d Hadamard, respectivement sa fonction complémentaire, d indice 2 Nbr_bitstocodechannels. Les signaux de reset des intégrateurs ainsi que ceux pilotant le Sample&Hold de sortie ont la même fréquence, mais sont actifs seulement durant ⅛ de période comme représenté à la figure 4-3. Pour construire ces fonctions, il nous faut utiliser 3 fonctions carrées : la première identique à celle du signal Int A (fréquence = f système /(2 Nbr_bitstocodechannels+1 ), la seconde aillant une fréquence double et la dernière, une fréquence quatre fois plus élevée. 23/106
25 Ces fonctions correspondent, pour un système à plus de deux canaux, aux fonctions d Hadamard d ordre 2 Nbr_bitstocodechannels, 2 Nbr_bitstocodechannels-1 et 2 Nbr_bitstocodechannels-2. Pour le cas à deux canaux (Nbr_bitstocodechannels = 1), la fonction d Hadamard d indice 2 Nbr_bitstocodechannels-2 n existe pas. La fonction carrée oscillant à une fréquence quatre fois supérieure à f système /(2 Nbr_bitstocodechannels+1 ) est simplement le signal d horloge du système (4*f système /(2 Nbr_bitstocodechannels+1 ) = f système ) appliqué à l entrée du générateur d Hadamard. Tous les signaux de commande du bloc de modulation peuvent donc être construits en combinant les fonctions f 1, f 2 et f 3 selon les formules données dans le tableau ci-dessous (où f 1 = fonction d Hadamard d indice 2 Nbr_bitstocodechannels, f 2 = fonction d Hadamard d indice 2 Nbr_bitstocodechannels-1 et f 3 = fonction d Hadamard d indice 2 Nbr_bitstocodechannels-2 ou horloge du système pour le cas à 2 canaux). Int _ A = Smpl _ A = f f 1 1 and f 2 and f 3 // // Int _ B = Smpl _ B = f f 1 1 and f 2 and f 3 Rst _ A = f 1 and f 2 and f 3 // Rst _ B = f 1 and f 2 and f 3 Les signaux construits en utilisant les formules ci-dessus sont représentés graphiquement dans la figure 4-5 et peuvent être comparés avec ceux de la figure 4-3.Figure 4-5 : Construction des signaux de contrôle du bloc de modulation 24/106
26 4.3. Gain et retard du bloc de modulation Le bloc de modulation induit une importante différence d amplitude entre les signaux d entrée et ceux de sortie. Cette atténuation est due au fait que les intégrateurs ne fonctionnent que durant un temps relativement court (correspondant à une demi période des signaux Int pulsant à 2 Nbr_bitstocodechannels+1 /f système ) avant d être vidés. En conséquence, un signal d amplitude élevé à l entrée n entraîne qu une faible variation à la sortie. Un gain, interne à la structure, va être ajouté dans le bloc de modulation pour compenser cette différence et coïncider ainsi avec les caractéristiques du circuit réel. Pour pouvoir calculer la valeur de ce dernier, il va falloir avant tout déterminer mathématiquement le gain du modulateur. Pour ce faire, nous allons calculer la valeur obtenue à la sortie du bloc de modulation en y appliquant, à l entrée, une constante IN. Cette valeur est multipliée par VDD durant un temps égal à période_canal/2, puis par VSS (= 0V dans notre cas) durant la deuxième moitié de période_canal. Elle est ensuite intégrée et appliquée à la sortie. Mathématiquement, cela peut être traduit par l équation suivante : OUT = = période_ canal / 2 t= 0 période_ canal / 2 t= 0 IN * VDD* dt IN * VDD* dt + période_ canal IN * VSS * dt t= période_ canal / 2 période_ canal = IN * VDD* 2 Le gain du système, défini comme le rapport entre l amplitude de sortie et celle d entrée, vaut alors : OUT VDD * période _ canal GAIN = = IN 2 Comme nous l avons mentionné au point 4.1, la fréquence de travail de chaque canal vaut f système /2 Nbr_bitstocodechannels+1 ce qui signifie que la période de chaque canal est de 2 Nbr_bitstocodechannels+1 /f système secondes. En remplaçant cette valeur dans l équation précédente, il vient : GAIN = VDD Nbr_bitsto * 2 f système codechanne ls Le modulateur réel a été dimensionné de manière à obtenir un gain valant 1,5 pour un système à 2 canaux travaillant à une fréquence de 200 Mhz avec une tension d alimentation de 1,8V. 25/106
27 En introduisant ces valeurs dans l équation précédente, un gain de 1,8*10-8 est obtenu. Un gain interne au modulateur modélisé doit donc être ajouté pour que ses caractéristiques correspondent à celles du modulateur réel. Ce gain interne vaut 8,34*10 7 (1,5/1,8*10-8 ). Ainsi, pour un système à 2 canaux, à une fréquence de 200 Mhz et avec une tension de 1,8V, le modèle du modulateur aura un gain de 1,5 ce qui coïncide avec le cas réel. En tenant compte de ce gain interne, le gain total du modulateur pourra être obtenu grâce à la formule suivante : GAIN mod ulateur VDD * 2 = 83,4 * Nbr_bitstocodechannels f système où f clk est en Mhz Le bloc de modulation provoque également un décalage temporel entre le signal d entrée et le signal de sortie qui équivaut à une période de l horloge commandant les canaux. Cette horloge oscillant à f système /2 Nbr_bitstocodechannels, la latence engendrée par le bloc de modulation vaudra donc : Décalage temporel _ mod ulateur 2 = Nbr_bitstocodechannels f système μs où f clk est en Mhz En conséquence, plus la fréquence de l horloge du système augmente, plus le gain et la latence du bloc de modulation diminuent. En revanche, augmenter le nombre de canaux équivaut à augmenter ces deux valeurs. Ce phénomène peut être observé dans les résultats de simulation du système complet donnés aux figures 7-9 et /106
28 4.4. Adaptation à un système différentiel Le modulateur analogique développé par G. Ding est un bloc possédant des entrées et des sorties différentielles. Le modèle VHDL-AMS se devra donc de travailler avec des entrées et des sorties différentielles. Pour ce faire, nous avons tout simplement ajouté un bloc d entrée chargé de convertir les deux entrées différentielles en un seul signal non différentiel (signal nondiff = entrée + - entrée - ). Ce faisant, la tension de mode commun est supprimée et l amplitude du signal double par rapport à celle de l une des entrées différentielles comme représenté à la figure 4-6 dans le cas d entrées différentielles de forme triangulaire. Figure 4-6 : Conversion des entrées différentielles en entrée non différentielle L entrée en mode non différentiel aura donc la même forme que l entrée différentielle positive, mais avec une amplitude double. La modulation sera alors réalisée sur cette entrée, fournissant ainsi une sortie non différentielle. La sortie différentielle positive est reconstituée en additionnant la moitié de cette valeur à la tension de mode commun, tandis que la sortie différentielle négative résulte de la soustraction de la moitié de cette valeur à la tension de mode commun. Il convient de relever que le système réel impose une limitation sur la plage de fonctionnement de sortie des intégrateurs qui va être limitée à une valeur de sortie en non différentielle comprise entre -750 mv et +750 mv. L amplitude pour chaque sortie différentielle se situera donc dans une plage de 375 mv autour de la tension de mode commun Vcm valant 900 mv dans le cas du système réel (525 mv valeurs de sortie différentielle du modulateur 1,275 V). 27/106
29 5. Bloc ADC Dans ce travail, le convertisseur de chaque canal a été modélisé par un pipeline non idéal, écrit en VHDL-AMS, développé par le professeur A.Vachoux et adapté à notre système. Ce convertisseur travaillera sur 10 bits et présentera la possibilité d inclure des effets non idéaux standards sur les convertisseurs flash de chaque étage (en ajoutant soit un offset sur la tension threshold de référence, soit une hystérèse) ainsi que sur les Sample&Hold (en filtrant les échantillons grâce à un filtre passe-bas du second ordre). Il sera également pourvu d un système de redondance digital permettant de limiter l influence d une erreur sur un étage du pipeline. La conversion A/D pipeline réside sur le principe de séparation du circuit en plusieurs étages, chacun réalisant une partie de la conversion globale. Le schéma de principe est donné à la figure suivante, chaque étage fournissant une valeur au suivant ainsi que des bits qui donneront, après décodage, le mot de sortie : Figure 5-1 : Schéma de principe d un ADC pipeline Les principaux avantages d une telle configuration sont les suivants : 1) Le pipeline nous permet d atteindre de hautes résolutions pour le système global (10 bits dans notre cas, mais peut être facilement supérieur à 15 bits) tout en utilisant des systèmes de conversion relativement simples et travaillant sur un faible nombre de bits pour chaque étage (1,5 bits dans notre cas). 2) Les différents étages effectuent les opérations de façon concurrente résultant en un taux de sortie supérieur à celui obtenu en utilisant un convertisseur devant effectuer toutes les opérations en même temps (typiquement 100 Msamples/s pour une résolution sur 10 bits). Le principal inconvénient de ce type de convertisseur réside dans la latence engendrée par les registres séparant les divers étages. Dans la suite de ce chapitre, nous allons décrire les principaux blocs constituant cet élément. 28/106
30 5.1. Etage pipeline Chaque étage du pipeline génère 2 bits de sortie D n, D n-1 qui, après recombinaison avec ceux provenant des autres étages par le décodeur, fournissent le mot de sortie de l ADC. Parallèlement, l étage produit une valeur résidu Vout qui sera envoyée à l étage suivant pour réaliser la suite de la conversion globale. Le schéma de principe d un étage du pipeline est donné ci-dessous : Figure 5-2 : Etage pipeline Le convertisseur A/D 2 bits de chaque étage pipeline est un convertisseur flash composé de 2 comparateurs dont les tensions de basculement valent : V th1,2 = ± V ref /4 (en admettant que l ADC pipeline ait une dynamique comprise entre ± V ref ). L entrée Vin pouvant être comprise entre ± V ref, la sortie de cet élément pourra donc prendre 3 valeurs distinctes : - 00 si Vin < -V ref /4-01 si -V ref /4 < Vin < V ref /4-11 si V ref /4 < Vin Ces 3 valeurs correspondent à un code thermométrique (le LSB vaut forcément 1 si le MSB est égal à 1 ) qu il convient de convertir en code binaire 00, 01 et 10, en utilisant le bloc nommé th2bin, pour obtenir les 2 bits de sortie de l étage pipeline. Etant donné que seul trois des quatre valeurs binaires pouvant être codés sur 2 bits peuvent être effectivement obtenues à la sortie, les étages pipelines seront appelés étages 1,5 bits. Le code binaire de sortie vaudra donc : - D n D n-1 = 00 si Vin < -V ref /4 - D n D n-1 = 01 si -V ref /4 < Vin < V ref /4 - D n D n-1 = 10 si V ref /4 < Vin Pour obtenir la valeur résidue, qui sera envoyée à l étage suivant, le code thermométrique est reconverti en analogique à travers un convertisseur D/A à trois niveaux (sortie = -V ref si le code thermométrique vaut 00, 0 s il vaut 01 et V ref s il est égal à 11 ). Cette valeur est ensuite divisée par 2 puis soustraite au signal d entrée avant d être multipliée par 2 et d être échantillonnée par un Sample&Hold comme représenté à la figure /106
31 La relation liant la valeur de résidu Vout à la valeur d entrée ainsi qu aux 2 bits de sortie D n et D n-1 pour un étage donné est la suivante : - Vout = 2*Vin + V ref si D n D n-1 = 00 - Vout = 2*Vin si D n D n-1 = 01 - Vout = 2*Vin - V ref si D n D n-1 = 10 Ces trois cas peuvent être remplacés de façon équivalente par une seule formule : Vout = * V 2 * Vin + Dn * Dn 1 * Vref Dn * Dn 1 ref Les valeurs de sorties (les 2 bits et le résidu) peuvent être déduits directement de cette formule en sachant que les seuils pour les comparateurs sont fixés à ± V ref /4 comme représenté graphiquement à la figure 5-3. Figure 5-3 : Bits de sortie et valeur résidu d un étage donné en fonction de sa tension d entrée 30/106
32 5.2. Décodeur Chaque étage du pipeline nous fournit 2 bits devant être recombinés entre eux afin d obtenir le mot de sortie de l ADC. Le décodage se fera en 2 étapes. Premièrement, vu que chaque étage est synchrone, il faudra introduire un banc de registres de manière à ce que les bits de sortie de tous les étages correspondent au même mot d entrée de l ADC. Deuxièmement, comme l ADC dispose d un système de correction d erreur reposant sur le concept de redondance, il faudra recombiner les bits de manière à obtenir le mot de sortie Banc de registres Le résidu de chaque étage étant fournit comme entrée à l étage suivant à chaque flanc montant de l horloge, un mot donné à l entrée du système ne parviendra à l étage i qu après un nombre i-1 de coup d horloge. Il faudra donc retarder chaque étage de manière inversement proportionnelle (les étages d indice élevés devront être moins retardés que ceux ayant un indice faible) de façon à ce que tous les bits de sortie fournis par les étages correspondent au même mot d entrée. Le schéma de principe du banc de registres pour le cas d un convertisseur ADC à 9 étages (10 bits) est donné à la figure 5-4 et sera toujours en forme de triangle rectangle, quelque soit le nombre d étages considérés. Figure 5-4 : Banc de registres Ainsi les bits sortant du banc de registres correspondent tous au même mot d entrée, le nombre de coup d horloge entre entrée et sortie étant, pour chaque étage, égal au nombre d étage /106
33 Additionneur à redondance Comme nous l avons mentionné précédemment, les différents étages fournissent des bits redondants servant à la correction d une éventuelle erreur pouvant se produire notamment sur l un des seuils des convertisseurs flash. Le deuxième bloc sert donc à recombiner les bits de sortie redondants du banc de registre afin de reconstituer le mot de sortie du convertisseur. Il sera composé d additionneurs 2 bits à retenue dont la table de vérité est explicitée ci-dessous. Figure 5-5 : Additionneur 2 bits à retenue Le MSB fournit par chaque étage (sauf le premier) est combiné avec le LSB de l étage suivant au moyen d un additionneur de ce type, la retenue se propageant d additionneurs en additionneurs. En utilisant ce système, illustré à la figure 5-6 pour le cas à 9 étages (donc 18 bits à la sortie du banc de registres), la sortie équivaudra à un mot d une longueur égale au nombre d étages pipelines + 1, donc 10 dans ce cas de figure. Figure 5-6 : Schéma de principe du décodeur 32/106
34 5.3. Imperfections modélisées Deux types d imperfections relativement simples à modéliser ont été implémentées dans ce convertisseur. Premièrement, les comparateurs des convertisseurs flash peuvent être biaisés de part l ajout d un offset ou d une hystérèse afin de rendre leur comportement plus conforme avec la réalité. L offset modifie la valeur du seuil de détection tandis que l hystérèse change la symétrie lorsque le comparateur veut passer d un état haut à un état bas ou inversement. Figure 5-7 : Imperfections modélisées sur les comparateurs La seconde imperfection modélisée pour ce convertisseur concerne les Sample&Hold chargés d échantillonner les valeurs des résidus de sortie pour chaque étage pipeline. Pour accroître le réalisme de la modélisation de ces blocs, la sortie est filtrée, durant l échantillonnage, à travers un filtre passe-bas du second ordre dont la fonction de transfert est la suivante : H ( p) = p 2 1 TAU 1 + QF * TAU 1 p + TAU Dans cette équation, p vaut jω et les constantes TAU et QF sont les paramètres du filtre où TAU représente la constante de temps et QF le facteur de qualité. 33/106
35 5.4. Adaptation à un système différentiel Le modulateur analogique développé par G. Ding fournissant des sorties en mode différentiel, le convertisseur, prenant ces valeurs en entrée, devra donc travailler avec des entrées différentielles. Afin de garder une structure identique à celle présentée aux points précédents, nous avons tout simplement ajouté un bloc d entrée chargé de convertir les deux entrées différentielles en une entrée non différentielle. Comme nous l avons expliqué au paragraphe 4-4, ce faisant la tension de mode commun est supprimée et le signal obtenu a une forme identique à celle de l entrée différentielle positive mais avec une amplitude double. La tension de référence Vref du convertisseur vaudra donc le double de la valeur maximum d un des signaux différentiels d entrée. Dans le cas du circuit réel, étant donné que les entrées des convertisseurs sont reliés aux sorties du bloc de modulation qui sont limités à une plage de ± 375 mv autour de la tension de mode commun, l amplitude maximum pour une entrée différentielle du convertisseur vaut alors 375 mv. La tension de référence du convertisseur est donc égale à 750 mv ce qui signifie que le convertisseur fonctionne pour une entrée non différentielle allant de -750 à +750 mv. 34/106
36 5.5. Résultats ADC Correction d erreurs Pour illustrer nos dires quand à la faculté du convertisseur à corriger une erreur sur la tension de référence des comparateurs constituant les convertisseurs 2 bits flash de chaque étage, nous allons prendre, comme exemple, le cas d un convertisseur 10 bits (donc possédant 9 étages) ayant une tension de référence de 750 mv (Vref = 750 mv, cf. figure 5-3). Ces paramètres correspondent au convertisseur que nous avons utilisé pour le convertisseur de Walsh-Hadamard complet. Supposons que l on veuille obtenir la valeur de sortie correspondant à une entrée non différentielle de 400 mv mais que l étage 4 possède une erreur sur sa valeur de threshold 2 qui, au lieu de valoir 750/4 = 187,5 mv, vaut 210 mv. Les graphiques ci-dessous résument le cas idéal ainsi que le cas présenté ci-dessus. D D D V n n n D D D résidu n 1 n 1 n 1 = 00 si Vin < 187,5mV = 01 si 187,5mV < Vin < + 187,5 mv = 10 si Vin > + 187,5mV = 2 * Vin + D n * D n 1 * V ref D n * D n 1 * V ref Cas idéal sans erreur Etage Vin [mv] Dn Dn-1 "10" "01" "01" "10" "00" "01" "01" "10 "00" Vrésidu [mv] Dn Dn Mot sortie Cas avec erreur sur le threshold 2 de l'étage 4 (210mV au lieu de 187,5mV) : Etage Vin [mv] Dn Dn-1 "10" "01" "01" "01" "10" "01" "01" "10 "00" Vrésidu [mv] Dn Dn Mot sortie Figure 5-8 : Exemple de correction d erreur L erreur sur la tension de seuil de l étage 4 change donc la valeur du code de sortie de cet étage («01» au lieu de «10»), mais modifie également la valeur de résidu envoyée à l étage 5. Ce faisant, les codes de sortie des étages suivants vont également changer, ayant pour 35/106
37 résultat d obtenir, à la sortie du système d additionneurs à redondance, la bonne valeur pour le mot de sortie de l ADC (« »), Une erreur sur une tension de référence d un étage implique donc une réaction sur les étages suivants corrigeant ainsi cette dernière afin de fournir le mot attendu en sortie Résultats de simulations Des simulations ont été réalisées pour un convertisseur à 10 bits (9 étages) en faisant varier les entrées différentielles d 1/2 LSB à chaque coup d horloge, ce qui revient à incrémenter l entrée non différentielle correspondante d un LSB à chaque période. La figure suivante montre les résultats obtenus en zoomant à la moitié de la plage du convertisseur (correspondant à la valeur 0), provenant de la simulation du code VHDL-AMS dans l environnement Cadence. Retard CLK Figure 5-9 : Simulation ADC Nous pouvons constater qu il faut effectivement 10 (= nombre d étages + 1) cycles d horloge pour que le signal se propage de l entrée à la sortie. Pour le voir, nous avons compté le nombre de cycles séparant le moment où les deux signaux différentiels sont égaux (à ce point, ils sont égaux à la tension de mode commun) et le moment où la sortie affiche la valeur 512 qui se trouve à la mi-échelle (MSB à 1 et tous les autres bits à 0 ) de l ADC et qui correspond à la valeur 0. 36/106
38 6. Démodulateur de Walsh-Hadamard Le bloc de démodulation a pour fonction de recombiner les signaux de sortie modulés, provenant des convertisseurs A/D de chaque canal, afin de restituer correctement le mot de sortie du système complet. Le démodulateur exposé ci-dessous présente les caractéristiques suivantes : Utilisable par un convertisseur de Walsh-Hadamard parallèle Adaptable à un nombre quelconque de canaux Adaptable au nombre de bits de sortie des convertisseurs A/D Ce modèle se veut donc entièrement générique afin de répondre à n importe quelle configuration du convertisseur de Walsh-Hadamard indépendamment du nombre de canaux ou du type de convertisseurs A/D utilisés. La suite de ce chapitre est consacrée exclusivement à la description du principe de fonctionnement du bloc de démodulation ainsi qu à l analyse des résultats pour différents niveaux d abstraction (avant synthèse, synthétisé au niveau portes logiques et après placement-routage); la méthode de construction générique utilisée étant décrite dans l annexe technique du chapitre /106
39 6.1. Principe de démodulation La méthode employée, pour démoduler les signaux provenant des divers canaux du convertisseur de Walsh-Hadamard, réside sur une série d opérations arithmétiques (additions et soustractions), définies par les fonctions d Hadamard, à effectuer sur les différents canaux du système. Les opérations arithmétiques peuvent être déduites des matrices d Hadamard en considérant, dans l ordre, chaque colonne de la matrice comme un canal (colonne 1 => canal 1 et ainsi de suite) puis en effectuant l opération arithmétique correspondant à chaque valeur de la colonne (+1 correspondant à une addition et -1 à une soustraction) et ce pour chaque ligne. Cette méthode nous fournira donc un mot résultant de la combinaison des divers canaux pour chaque ligne de la matrice d Hadamard. Le nombre de lignes étant identique au nombre de colonnes dans une matrice d Hadamard, un système à N canaux (où N est une puissance de 2) fournira donc N mots résultants de combinaisons différentes des canaux d entrée. Ces mots seront alors appliqués à tour sur la sortie grâce à un système de switches sélectionnant un mot à chaque coup d horloge du système global (à 200 Mhz dans le cas du circuit développé par G. Ding). Pour expliciter cette méthode, nous allons développer deux cas : celui du démodulateur à 2 canaux et celui d un système à 4 canaux Démodulateur à 2 canaux Pour une configuration à 2 canaux, la figure 6-1 représente formellement la méthode décrite ci-dessus. Canal_1 Canal_2 H 2 = Mot 1 = Canal_1 + Canal_2 Mot 2 = Canal_1 - Canal_2 Figure 6-1 : Opérations arithmétiques à effectuer, cas à 2 canaux Le schéma de principe pour effectuer ce type d opérations est donné à la figure 6-2 pour un démodulateur adapté à un convertisseur de Walsh-Hadamard à 2 canaux, dont la fréquence des signaux d entrée (provenant des ADC) est 2 fois inférieure à celle du système globale. Le switch de sortie est chargé d appliquer le résultat de l addition ou de la soustraction des mots de ces 2 canaux sur la sortie et ceci à une fréquence correspondant à celle du système global. 38/106
40 SWITCH_CLK (FCLK/2) CHANNEL_1 (FCLK/2) CHANNEL_2 FCLK SOUT SWITCH Figure 6-2 : Schéma de principe du démodulateur, cas à 2 canaux Pour une compréhension optimale des divers signaux de ce circuit, un exemple dans le cas idéal (en négligeant le délai pour tous les éléments) est donné ci-dessous : Figure 6-3 : Principaux signaux du démodulateur, cas à 2 canaux Les valeurs internes de sortie de l additionneur et du soustracteur ont été ajoutées dans la figure. Le signal de commande switch_clk sélectionne à chaque période de l horloge du système le mot, résultant des opérations arithmétiques réalisées sur les deux canaux, à appliquer à la sortie qui atteint ainsi la fréquence désirée en sortie correspondant à celle du système Démodulateur à 4 canaux Le cas à 4 canaux s effectue de manière similaire à celui à 2 canaux et est décrit ci-dessous. Canal_1 Canal_2 Canal_3 Canal_4 H 4 = Mot 1 = Canal_1 + Canal_2 + Canal_3 + Canal_4 Mot 2 = Canal_1 - Canal_2 + Canal_3 - Canal_4 Mot 3 = Canal_1 + Canal_2 - Canal_3 - Canal_4 Mot 4 = Canal_1 - Canal_2 - Canal_3 + Canal_4 Figure 6-4 : Opérations arithmétiques à effectuer, cas à 4 canaux 39/106
41 Le schéma de principe est un peu plus compliqué que dans le cas à 2 canaux et nécessite un plus grand nombre d opérations. Le système de switches pour la sortie comprend, dans cette configuration, 3 switches commandés par deux signaux de commande de fréquence respectivement f clk /2 et f clk /4 permettant de sélectionner tour à tour l un des 4 mots résultant des opérations arithmétiques. Figure 6-5 : Schéma de principe du démodulateur, cas à 4 canaux La figure 6-6, réalisée dans le cas idéal sans délais, permet d expliciter le principe de fonctionnement de ce schéma. Figure 6-6 : Principaux signaux du démodulateur, cas à 4 canaux Les deux signaux de contrôle des switches ont une fréquence respectivement deux et quatre fois inférieure à celle du signal d horloge ce qui permet de sélectionner le résultat de l une des quatre opérations arithmétiques et d obtenir ainsi un signal de sortie à une fréquence identique à celle de l horloge du système global. 40/106
42 6.2. Structure du démodulateur développé Le principe de fonctionnement de la démodulation pour un convertisseur parallèle de Walsh- Hadamard ayant été décrit au point précédent, nous allons à présent présenter la structure du démodulateur réel tel que développé dans le cadre de ce projet. Cette dernière présente la particularité de pipeliner les opérations arithmétiques. L idée du pipeline pour les opérations arithmétiques consiste à diviser les opérations d addition et de soustraction, à effectuer pour chaque canal afin d obtenir les mots de sortie, en sous opérations constituées uniquement d une addition ou d une soustraction de 2 mots et ce à chaque coup de l horloge de commande pulsant à une fréquence de f clk /N où N = nombre de canaux du convertisseur parallèle; les différents étages du pipeline étant isolés par des bancs de registres commandés par l horloge de commande. Le système de switches de sortie permet, quand à lui, de sélectionner alternativement l un des mots provenant du dernier étage et de l appliquer sur la sortie à une fréquence f clk. La méthode générique implémentée pour réaliser ce démodulateur est expliquée en détail dans l annexe technique L exemple d un convertisseur à 4 canaux utilisant notre démodulateur pipeliné est représenté schématiquement à la figure 6-7 et peut être comparé avec le démodulateur non pipeliné de la figure 6-5. Figure 6-7 : Schéma de principe du démodulateur pipeline, cas à 4 canaux Les additions et soustractions des 4 canaux simultanément ont été, dans ce cas, remplacées par un système d additions et de soustractions à deux entrées suivis de bancs de registres ayant une horloge d une fréquence f clk /4. Le système de switches pour la sortie reste quand à lui le même. 41/106
43 La version pipelinée a été choisie pour les raisons suivantes : La généricité de l algorithme repose sur le pipeline des opérations arithmétiques Les divers étages effectuent les opérations de manière concurrentes permettant ainsi aux additionneurs et soustracteurs de bénéficier d un temps plus élevé pour le calcul La logique nécessaire pour les additionneurs est réduite en tenant compte de la structure répétitive des fonctions de Walsh-Hadamard Chaque opération arithmétique est isolée des autres permettant de garantir une utilisation partagée des opérations provenant des étages précédents L utilisation d une méthode pipelinée nécessite cependant l ajout de bancs de registres entre chaque étage du pipeline, augmentant la taille du circuit et engendrant une latence propre au démodulateur proportionnel aux nombres d étages nécessaires pour effectuer les opérations arithmétiques. Ce nombre d étage est égal au logarithme en base 2 du nombre de canaux (1 pour le cas à 2 canaux, 2 pour celui à 3 et 4 canaux, 3 pour 5 à 8 canaux, ). Le retard de ce démodulateur équivaut au nombre d étages multiplié par la période du signal de contrôle des registres séparant ces derniers auquel s ajoute une période d horloge du système global pour les registres de sortie (après le système de switch). 42/106
44 6.3. Simulation du démodulateur Le démodulateur générique de Walsh-Hadamard a été simulé pour différent nombre de canaux. La figure 6-8 représente le cas à 4 canaux avec des entrées valant respectivement, en unsigned, 670 pour le canal 1, 547 pour le 2, 597 pour le 3 et 496 pour le 4. La sortie doit fournir successivement les valeurs 774 ( ), 736 ( ), 636 ( ) et 534 ( ). Une telle configuration du démodulateur possède 2 étages et provoque donc un retard égal à la somme de 2 périodes du signal d horloge clk_add du banc de registres séparant les étages et d une de l horloge du système comme cela peut être vu sur la figure 6-8. Figure 6-8 : Résultats de simulation du démodulateur pipeline, cas à 4 canaux Les valeurs de sortie, sont celles attendues (774, 736, 636 et 534). La latence est elle bien égal à deux périodes de l horloge clk_add auquel s ajoute une du système global. Pour voir cela, il suffit de regarder le nombre de cycles séparant le moment où le signal de reset barre passe à 1 (et donc où le système est activé) et le moment où un signal différent de 512 apparaît sur la sortie. Le cas à 8 canaux est donné à la figure 6-9 pour bien expliciter le rapport entre le nombre d étages et la latence engendrée par ce bloc qui équivaut dans ce cas à 3 périodes du signal d horloge clk_add (3 étages) auquel il faut rajouter une période de l horloge du système. Comme pour le cas précédent, cela peut être visionné en comptant le nombre de cycle séparant l activation du système (le reset barre passe à 1 ) du moment où la sortie se met à bouger. Figure 6-9 : Résultats de simulation du démodulateur pipeline, cas à 8 canaux 43/106
45 Synthèse du démodulateur de Walsh-Hadamard en portes logiques Comme pour le générateur de fonctions d Hadamard, le code générique VHDL du démodulateur a été synthétisé au niveau porte logique à l aide du programme Synopsys Design Vision. Dans le circuit réel, nous intégrerons un démodulateur de Walsh-Hadamard à 4 canaux fonctionnant à une fréquence de 200 Mhz. Ce démodulateur générique a été synthétisé, au niveau porte logique avec une technologie umc 0.18μ, puis testé pour les cas à 2, 4 et 8 canaux avec une contrainte sur l horloge du système de 200 Mhz. Le schéma en blocs logiques élémentaires obtenu en synthétisant un démodulateur de Walsh- Hadamard à 4 canaux est donné à la figure suivante (le signal rouge correspond à la sortie, le jaune à l horloge du système, l orange à l horloge des banc de registres (clk_add) et le violet au signal de reset barré). Figure 6-10 : Démodulateur pour le cas à 4 canaux en blocs logiques élémentaires 44/106
46 Comme pour le générateur d Hadamard, nous avons regroupés les résultats en terme de surface, de timing et de puissance pour un démodulateur à 2, 4 et 8 canaux dans le tableau suivant : Démodulateur WH Surface Combinatoire (μm 2 ) Non Combinatoire (μm 2 ) Interconnections (μm 2 ) Total (μm 2 ) Timing (période = 5ns) Slack (ns) 3,48 1,01 0,34 Consommation Puissance interne (μw) Switch des lignes (μw) Total (μw) Figure 6-11 : Tableau comparatif pour un démodulateur à 2, 4 et 8 canaux Les résultats de simulations pour ces diverses configurations nous donnent des résultats semblables à ceux avant synthèse si l on excepte les glitches provenant de la modélisation des délais des portes logiques utilisée pour le circuit synthétisé. Le cas à 4 canaux, identique à celui développé en début du chapitre 6.3, est donné ci-dessous : Figure 6-12 : Résultats de simulation du démodulateur pipeline synthétisé en portes logiques, cas à 4 canaux Placement et routage du générateur d Hadamard numérique Le placement-routage d un démodulateur à 2, 4 et 8 canaux a été réalisé avec une approche similaire à celle décrite au paragraphe La technologie utilisée pour cette partie sera à nouveau l ams 0.35μ. Le layout résultant de notre code pour le cas d un démodulateur à 4 canaux est le suivant : 45/106
47 clk_add switch_clk clk_system rst_b 4*10 bits d entrées venant des ADC Mot de 10 bits de sortie du démodulateur GND Figure 6-13 : Layout du démodulateur à 4 canaux VDD Les résultats d une simulation de la netlist au niveau transistor dans Modelsim sont visibles à la figure 6-14 et correspondent aux valeurs attendues. Figure 6-14 : Résultats de simulation du démodulateur pipeline après placement et routage, cas à 4 canaux 46/106
48 7. Système complet Les différents blocs constituant le convertisseur A/D de Walsh-Hadamard ayant été décrits en détail aux points précédents, il convient à présent de présenter le système complet générique que nous avons développé et testé à l aide d ADVance MS, puis que nous avons schématisé, importé puis resimulé sur Cadence IC. Le convertisseur complet étant générique, il pourra servir aisément comme aide au design (par exemple pour tester le bloc de modulation au niveau transistor développé par G. Ding) pour un système possédant un nombre quelconque de canaux. Dans la suite de ce chapitre, nous allons décrire les signaux à utiliser et ce pour chaque bloc du système générique avant de présenter des résultats de simulations pour le système complet Générateur de fonctions d Hadamard Cette entité sert à fournir toutes les fonctions utiles à la modulation du signal d entrée ainsi qu à la génération des divers signaux de commande des autres blocs. Elle prendra en entrée le signal d horloge du système qui est un signal carré de fréquence f système. Le bloc de modulation nécessite les N_channels premières fonctions d Hadamard pour la modulation à proprement parlé du signal d entrée, mais en utilisera un plus grand nombre pour la génération des signaux de commande du modulateur. La fonction d Hadamard la plus élevée qui devra être fournit est celle d ordre 2 Nbr_bitstocodechannels. Le générateur devra donc être capable de générer les 2 Nbr_bitstocodechannels+1 premières fonctions d Hadamard. Un système à 2 canaux nécessitera donc la création des 4 premières fonctions d Hadamard. Pour un système à 4 canaux, il faudra les 8 premières fonctions et dans le cas à 8 canaux, les 16 premières. Le tableau de la figure 7-1 explicite, sous forme résumée, toutes les entrées-sorties ainsi que les paramètres de ce bloc en fonction du nombre de canaux du système. paramètre Nbr_bitstocodehadamard in rst_b clk Générateur de fonctions d'hadamard valeur description Nbr_bitstocodechannels + 1 Génère 2 Nbr_bitstocodeHadamard fonctions out description Signal de reset barre du générateur Signal d'horloge du f système H_logic< 2 Nbr_bitstocodeHadamard -1 : 0 > H_logic_barre< 2 Nbr_bitstocodeHadamard -1 : 0> Fonctions d'hadamard Fonctions d'hadamard barre Figure 7-1 : Résumé des paramètres du générateur d Hadamard 47/106
49 7.2. Modulateur Le bloc de modulation comprendra N_channels en parallèle travaillant chacun à une fréquence égal à f système /2 Nbr_bitstocodechannels. Comme nous l avons expliqué au chapitre 4, la structure d intégration de chaque canal étant composée de 2 sous-canaux, ces dernières travailleront à une fréquence valant f système /2 Nbr_bitstocodechannels+1. Le modulateur prendra en entrée les 2 Nbr_bitstocodechannels+1 fonctions d Hadamard provenant du générateur d Hadamard, les entrées différentielles du système ainsi que différents signaux de référence. Les fonctions d Hadamard seront utilisées pour générer les différents signaux de contrôle Int_A/B, rst_a/b et smpl_a/b (phase_generator) du bloc de modulation à proprement parlé (channel) ainsi que pour moduler le signal d entrée pour chaque canal. La vue Cadence montrant la décomposition du bloc de modulation est donné ci-dessous pour le cas à 2 canaux : Figure 7-2 : Vue Cadence de la structure du modulateur, cas à 2 canaux Pour un système à 2 canaux, ces derniers fonctionneront à une fréquence égal à f système /2 et chaque sous-canal des structures d intégration à la fréquence f système /4. Pour le cas à 4 canaux, les fréquences de travail seront respectivement de f système /4 et f système /8, tandis qu elles seront de f système /8 et f système /16 pour le cas à 8 canaux. Les paramètres INT_max et INT_min représentent les limites inférieures et supérieures de saturation de la sortie des intégrateurs en mode non différentiel. Ils ont été choisis de manière à obtenir une dynamique de sortie en mode différentiel allant de -375 mv à mv comme cela a été expliqué au chapitre 4.4. Le choix de la valeur du paramètre GAIN a, quand à lui, été développé en détail au chapitre /106
50 Nbr_channels INT_max INT_min GAIN paramètres VDD VSS in H_logic< 2 Nbr_bitstocodeHadamard -1 : 0 > H_logic_barre< 2 Nbr_bitstocodeHadamard -1 : 0 > INP INN CM_ref IREF_channel CHANNEL_enable Modulateur valeur description N_channels Nombre de canaux du modulateur 750 mv Limite supérieure de saturation des intégrateurs (non diff.) -750 mv Limite inférieure de saturation des intégrateurs (non diff.) 8,34*10 7 Gain interne du modulateur 1.8 V Tension d'alimentation positive 0.0 V Tension d'alimentation négative out description Fonction d'hadamard Fonction d'hadamard complémentaires Entrée différentielle positive du système Entrée différentielle négative du système Tension de référence du mode commun (900 mv) Courant de référence (100 μa) Enable des canaux du modulateur (fonctionne au niveau haut) OUTP<N_channel:1> Sortie différentielle positive du modulateur (une par canal) OUTN<N_channel:1> Sortie différentielle négative du modulateur (une par canal) Figure 7-3 : Paramètres du modulateur Compte tenu de la tension de mode commun du système valant 900 mv ainsi que des bornes de saturation des intégrateurs, les signaux différentiels de sortie du bloc de modulation appartiendront nécessairement à l intervalle allant de 525 mv à 1,275 V (900 ± 375 mv). 49/106
51 7.3. Convertisseurs ADC pipelines Les sorties analogiques différentielles de chaque canal du modulateur doivent être converties en mots binaires à l aide des convertisseurs pipelines présentés au chapitre 5. Ces derniers sont des convertisseurs différentiels 10 bits possédant 9 étages. Les signaux d entrées proviennent des sorties des divers canaux du modulateur possédant une amplitude limitée à ± 375 mv autour de la tension de mode commun. La plage de fonctionnement du convertisseur en mode non différentiel sera donc de ± 750 mv. Grâce au parallélisme du système, chaque convertisseur pourra travailler à une fréquence 2 Nbr_bitstocodechannels fois inférieure à celle du système global. Le signal d horloge des convertisseurs correspond ainsi tout simplement à la fonction d Hadamard d indice 2 Nbr_bitstocodechannels-1. La vue Cadence pour un système à 2 canaux est la suivante : Figure 7-4 : Vue Cadence des convertisseurs pour un système à 2 canaux Pour un système à 2 canaux, la fréquence de l horloge des convertisseurs sera tout simplement deux fois inférieure à celle du système global et équivaudra à la première fonction d Hadamard. Dans le cas à 4 canaux, la fréquence sera 4 fois moins élevée que celle du système global et sera représentée par la seconde fonction d Hadamard. Pour 8 canaux, la fréquence sera divisée par 8 et les convertisseurs seront pilotés par la 4 ème fonction d Hadamard. 50/106
52 paramètres Nbr_bits_ADC NSTAGES NBITPST Ymax Ymin VDD VSS in clk nenable dac_vref_plus dac_vcm dac_vref_minus tinp tinn Convertisseur ADC pipeliné valeur description 10 Nombre de bits de sortie de l'adc 9 Nombre d'étages pipelinés de l'adc 2 Nombre de bits de sortie par étage 375 mv Borne d'entrée sup. (en différentiel en dessus de Vcm) -375 mv Borne d'entrée inf. (en différentiel en dessous de Vcm) 1.8 V Tension d'alimentation positive 0.0 V Tension d'alimentation négative out description Horloge = Hadamard< 2 (Nbr_bitstocodechannels-1) > Enable barre ( Convertisseur activ au niveau bas) Tension valant V Tension valant 0.9 V Tension valant V Entrée analogique différentielle positive du convertisseur Entrée analogique différentielle négative du convertisseur dout < 9:0 > Sortie binaire du convertisseur Figure 7-5 : Paramètres des convertisseurs 51/106
53 7.4. Démodulateur Le démodulateur reçoit, en entrée, les N_channels mots de 10 bits de sortie des convertisseurs. Il dispose de trois horloges. La première, clk_add, pilote les bancs de registres séparant les différents étages de notre modèle pipeline. Elle est identique à celle appliquée aux convertisseurs et possède donc une fréquence égale à f système /2 Nbr_bitstocodechannels, pouvant être représentée par la fonction d Hadamard d indice 2 Nbr_bitstocodechannels-1. La seconde, clk_system, commande les registres de sortie du démodulateur situés après le système de switches. Elle correspond simplement à l horloge du système global. Enfin, la troisième, switch_clk, est composée de Nbr_bitstocodechannels horloges et est utilisée comme un compteur ayant pour but d appliquer la bonne valeur sur la sortie. Ce compteur devant changer d état toute les périodes du système global, les horloges le composant devront donc avoir une fréquence 2 fois, puis 4 fois, 8 fois, et ainsi de suite inférieure à celle du système global. Ces signaux correspondent aux fonctions d Hadamard d indice 1, puis 2, puis 4, (2 i ). Figure 7-6 : Vue Cadence du démodulateur pour un système à 4 canaux 52/106
54 Pour le cas d un système à 2 canaux, clk_add et switch_clk équivalent à la fonction d Hadamard 1 tandis que clk_system correspond au signal d horloge du système. Pour le cas à 4 canaux, clk_add et switch_clk<1> sont égales à la fonction d Hadamard 2, switch_clk<0> à celle d indice 1 et clk_system au signal d horloge global. Pour 8 canaux, clk_add et switch_clk<2> seront connectées à la fonction d Hadamard 4, switch_clk<1> à la 2, switch_clk<0> à la une et finalement clk_system sera toujours relié au signal d horloge d entrée du système. Les paramètres du démodulateur sont donnés ci-dessous : Démodulateur paramètres Valeur description Nbr_bits_ADC 10 Nombre de bits de sortie de l'adc Nbr_channels N_channels Nombre de canaux du système complet in out description rst_b Signal de reset barre du démodulateur clk_system Horloge du système global clk_add Horloge des canaux = Hadamard< 2 (Nbr_bitstocodechannels-1) > switch_clk< Nbr_bitstocodechannels-1:0 > Horloge pilotant le système de switches de sortie s_array_in< Nbr_channels:1 > Nbr_channels mots de 10 bits venant des ADC s_out< 9:0 > Signal de sortie du système complet Figure 7-7 : Paramètres du démodulateur 53/106
55 7.5. Convertisseur de Walsh-Hadamard complet En reliant ensemble tous les éléments présentés ci-dessous, l on obtient le convertisseur de Walsh-Hadamard complet. Le schéma Cadence pour le cas à 2 canaux est donné ci-dessous : Figure 7-8 : Schéma bloc Cadence du convertisseur de Walsh-Hadamard à 2 canaux Il convient de relever que les différents blocs du système global provoquent des latences et/ou des gains sur le signal de sortie du système. Le gain et la latence total du circuit peuvent être obtenus très simplement en sommant les différents effets de chaque bloc séparant l entrée de la sortie. Le bloc de modulation provoque une latence égale à une période du signal d horloge des canaux (fréquence : f système /2 Nbr_bitstocodechannels ). En remplaçant VDD par 1,8V dans la formule du gain du modulateur développé au chapitre 4.3, l on obtient un rapport des amplitudes de sortie sur celles d entrée valant 150*2 Nbr_bitstocodechannels /f système en Mhz. Le convertisseur induit, quand à lui, uniquement une latence égale à 10 périodes du signal d horloge des canaux. Enfin, le démodulateur ajoute une latence correspondant à la somme de Nbr_bitstocodechannels périodes de l horloge des canaux et d une période de l horloge du système. En sommant toutes ces contributions, nous arrivons aux formules suivantes valables pour le système global : GAIN système LATENCE système 150 * 2 = f Nbr _ bitstocodechannels systeme en MHz 1+ (11 + Nbr _ bitstocodechannels) * 2 = f systeme en Hz Nbr _ bitstocodechannels Pour un système fonctionnant à 200 Mhz, dans le cas à 2 canaux, le gain vaut 1,5 et la latence 125 ns. Pour un système à 4 canaux, le gain vaut 3 et la latence 265 ns et pour le cas à 8 canaux, le gain sera de 6 et la latence de 565 ns. 54/106
56 7.6. Résultats de simulation Le système complet pour les cas à 2, 4 et 8 canaux a été simulé dans l environnement ADVance MS ainsi que sur Cadence. Les résultats obtenus sont semblables et correspondent à ceux attendus. Ils sont donnés, dans le cas des 2 premières configurations, dans les sous-chapitres qui suivent Cas à 2 canaux Le convertisseur complet simulé dans cette partie est un convertisseur de Walsh-Hadamard à 2 canaux travaillant à une fréquence de 200 Mhz. Les signaux d entrées utilisés sont des signaux différentiels sinusoïdaux de fréquence 500 khz et d amplitude 115 mv avec une tension de mode commun valant 900 mv (signal jaune INP et vert INN de la figure 7-9). Sur les graphes qui suivent, la sortie OUTPUT_DESIRED (signal orange) correspond à la sortie théorique du système en analogique. Elle a été calculée en prenant le signal d entrée non différentiel (INP-INN), puis en lui ajoutant un gain et une latence selon les formules données au point 7.5. La sortie du système étant représentée par un mot binaire, nous l avons reconvertit en analogique pour vérifier que ce mot corresponde bien à la valeur attendue. Ces mots binaires de sortie, convertis en analogique, sont représentés graphiquement par la courbe rose. Il est aisé de constater que les résultats obtenus et désirés coïncident. Le signal de sortie est donc égal à celui d entrée non différentiel auquel un gain de 1,5 et une latence de 125 ns ont été ajoutés. Figure 7-9 : Simulation Convertisseur de Walsh-Hadamard complet, 2 canaux 55/106
57 Un zoom a été réalisé sur le signal de sortie converti en analogique et le signal désiré. Globalement le signal obtenu est très proche du signal théorique et les résultats peuvent être jugés très satisfaisants. Il est intéressant de remarquer que, dans cette configuration, le signal d horloge des canaux est 2 fois plus lent que celui du système. Les ADC travaillent donc à une fréquence 2 fois inférieure à celle de sortie du système. Figure 7-10 : Zoom Convertisseur de Walsh-Hadamard complet, 2 canaux 56/106
58 Cas à 4 canaux En appliquant exactement la même entrée à un convertisseur de Walsh-Hadamard à 4 canaux, l on obtient les résultats suivants : Figure 7-11 : Simulation Convertisseur de Walsh-Hadamard complet, 4 canaux Figure 7-12 : Zoom Convertisseur de Walsh-Hadamard complet, 4 canaux 57/106
59 Deux points méritent d être soulignés. Premièrement, par rapport à la simulation du système à 2 canaux, nous pouvons remarquer que le gain et la latence augmentent dans le cas à 4 canaux. Le gain double, passant de 1,5 à 3 tandis que la latence augmente de 140 ns (125 ns pour le cas à 2 canaux contre 265 pour le cas à 4 canaux). Deuxièmement, la fréquence de l horloge de travail des canaux diminue pour devenir 4 fois plus faible que celle du système total. Ces résultats sont en parfaite adéquation avec les commentaires qui ont été faits précédemment. Un modèle de convertisseur de Walsh-Hadamard générique a donc pu être implémenté et testé avec succès. 58/106
60 8. Conclusion Ce projet a eu pour but de réaliser et de tester un convertisseur de Walsh-Hadamard complet générique possédant un bloc de modulation ayant une structure rigoureusement identique à celle que G. Ding est entrain de finaliser. Un tel modèle trouve toute son utilité lors du design d un convertisseur en offrant la possibilité de modifier rapidement et aisément par exemple le nombre de canaux utilisés et de voir l effet de ces modifications sur le comportement global du circuit. Ce convertisseur fonctionne parfaitement et le schéma Cadence ayant servi pour tester le circuit complet pourra également être utilisé en remplaçant le modèle de notre modulateur par le bloc réel au niveau transistor fournit par G. Ding. Les deux blocs digitaux ont pu être synthétisés au niveau transistor tout en répondant aux contraintes sur le timing qui leur étaient imposées (400 Mhz pour le générateur d Hadamard et 200 Mhz pour le démodulateur). Les layout, importés sur Cadence, ne pourront cependant pas être utilisés tel quel dans le prototype du convertisseur de Walsh-Hadamard étant donné que ceux-ci ont été réalisés dans une technologie ams 0.35μ qui ne correspond pas à celle (umc 0.18μ) avec laquelle travaille G. Ding. Cette adaptation ne devrait cependant pas poser de problèmes et va être réalisée dès que les librairies seront mises à jour afin de pouvoir lui fournir ces blocs en vu d une implémentation sur le prototype. Les modèles développés dans le cadre de ce projet répondent ainsi parfaitement aux spécifications qui leur étaient imposées. La puce électronique (prototype) qui va être réalisée contiendra le générateur d Hadamard à 8 fonctions synthétisé au niveau transistor développé dans le cadre de ce projet, deux blocs de modulations (l un à 2 et l autre à 4 canaux) permettant, en fonction de la valeur d un signal d entrée, de travailler soit avec un convertisseur 2 canaux, soit avec un système à 4 canaux ainsi que le bloc de démodulation pour un système à 4 canaux développé de ce rapport. Si le système à 2 canaux est sélectionné, les entrées 3 et 4 du bloc de démodulation vont simplement être mise à zéro. Les convertisseurs, par contre, ne seront pas intégrés au prototype mais consisteront en des convertisseurs pipeline commerciaux externes. Lausanne, le François Emery 59/106
61 9. Remerciements Je tiens à présenter toute ma gratitude au personnel du laboratoire de système microélectronique (LSM) et plus particulièrement au professeur Alain Vachoux ainsi qu au doctorant Guillaume Ding pour l aide précieuse qu ils m ont apportée durant ce projet ainsi que pour la disponibilité dont ils ont fait preuve à mon égard. 10. Bibliographie - «Frequency-interleaving technique for high-speed A/D conversion», G.Ding / C.Dehollain / M.Declercq / K.Azadet, ISCAS «Hardware Realization of Walsh Functions and their applications using VHDL and reconfigurable logic», A.Bin Ateeq / S.Abbasi / A.Alamoud / K.Azadet, King Saud University - «Les fonctions binaires orthogonales Walsh-Hadamard-Paley», J.Auvray : article tiré du site suivant daté du : - «Analog and Mixed-Signal Systems Modeling, Practical lab, Pipelined A/D converter», Alain Vachoux, LSM, EPFL, /106
62 11. Annexes techniques Algorithme : Générateur d Hadamard Dans cette annexe, nous allons décrire l algorithme mathématique que nous avons développé afin de générer les N_hadamard premières fonctions d Hadamard logiques à partir d un unique signal d horloge en entrée. Rappelons que, compte tenu de la méthode de construction des matrices d Hadamard, N_hadamard devra forcément être une puissance de 2. Les fonctions d Hadamard logiques, tel que nous les avons définies au chapitre 3, ne sont qu une représentation périodique des lignes tirées des matrices d Hadamard et ne peuvent donc pas être considérées comme de vraies fonctions au sens mathématique du terme. Pour réaliser notre générateur d Hadamard il a donc fallu introduire un nouveau type de fonctions que sont les fonctions de Walsh possédant de multiples propriétés mathématiques. L utilité d introduire ces dernières réside dans le fait qu elles vont pouvoir être crées, comme expliqué au point , à partir d un simple signal d horloge. Le sous-chapitre suivant est consacré à une description des fonctions de Walsh ainsi qu à une méthode permettant d obtenir les fonctions d Hadamard à partir des fonctions de Walsh Fonctions de Walsh Les fonctions de Walsh sont des fonctions réelles ne pouvant prendre que 2 états +1 et -1, étant tout comme ce que nous avons appelé les fonctions d Hadamard, matérialisées par les lignes des matrices d Hadamard. Elles présentent néanmoins l avantage d être des fonctions au sens mathématique du terme dont la définition stricte est donnée par la formule ci dessous. De plus, une méthode reposant sur un système de diviseurs fréquentiels permet d obtenir facilement ces fonctions et est expliquée au point suivant. Elles diffèrent des fonctions d Hadamard par leur intervalle de définition ainsi que par leurs indices. En effet, conceptuellement elles ne sont définies que dans la plage [-1/2,1/2]. Néanmoins, dans ce chapitre, nous les considérerons sous forme périodique en répétant les valeurs de cette plage à l infini. Concernant leurs indices, nous avions vu au chapitre 3 que la fonction d Hadamard d indice i correspond toujours à la ligne i+1 d une matrice quelconque d Hadamard. Pour les fonctions de Walsh, cette méthode ne peut être appliquée, l indice correspondant à une ligne diffère selon l ordre de la matrice d Hadamard que l on utilise. Pour illustrer cela, nous allons développer un exemple après avoir donné la formule mathématique définissant les fonctions de Walsh périodiques. avec k = indice de la fonction de Walsh, ki = i ème r = PartieRéelle(Log2(k) + 1). bit du nombre k écrit en binaire et 61/106
63 Les 8 premières fonctions de Walsh (d indice 0 à 7) peuvent être obtenues en multipliant entre elles les fonctions Sign(cos(πt)), Sign(cos(2πt)) et Sign(cos(4πt)) selon la formule cidessus. Etant donné que le cosinus est périodique de période 2π, nous avons simplement représenté ces dernières sur une seule période c'est-à-dire pour une valeur de t allant de 0 à 2 Figure 11-1 : Formule et représentation graphique des 8 premières fonctions de Walsh En comparant les fonctions de Walsh des graphes ci-dessus aux lignes des différentes matrices d Hadamard de la figure 3-2, il est aisé de constater qu une fonction de Walsh d indice i correspond à une ligne différente selon l ordre de la matrice d Hadamard choisie. Par exemple, la fonction de Walsh d indice 1 est représentée par la 2 ème ligne de la matrice d Hadamard 2 (+1/-1), mais par la 3 ème de celle d ordre 4 (+1/+1/-1/-1) et par la 5 ème de celle d ordre 8 (+1/+1/+1/+1/-1/-1/-1/-1). A contrario, la 1 ère fonction d Hadamard sera toujours égale à la 2 ème ligne de n importe quelle matrice d Hadamard (+1/-1/+1/-1/ ). La différence entre les fonctions de Walsh et celles d Hadamard réside donc dans leurs indices respectifs. Il convient à présent de trouver un moyen de relier les indices des fonctions de Walsh avec ceux des fonctions d Hadamard. 62/106
64 Relation entre les indices des fonctions de Walsh et ceux d Hadamard Il existe une méthode relativement simple pour passer des indices des fonctions d Hadamard à ceux de Walsh. Les étapes à suivre sont les suivantes : 1) Convertir l indice de la fonction d Hadamard en nombre binaire de longueur Nbr_bitstocodeHadamard = Log 2 (N_hadamard) où N_hadamard = ordre de la matrice d Hadamard considérée = nombre de fonctions d Hadamard pouvant être générées 2) Inverser l ordre des bits du nombre obtenu 3) Lire le nombre décimal correspondant à l aide du code de Gray Les tableaux suivants illustrent cette méthode dans le cas où N_hadamard = 4 (Conversion de l indice en mot de Nbr_bitstocodeHadamard = log(4) = 2 bits) et où Nbr_bitstocodeHadamard = 8 (Conversion de l indice en mot de B = log(8) = 3 bits). Indice fonctions Binaire inversé Indice fonctions d'hadamard a1 a0 b1 b0 de Walsh Soit H(0) = Walsh(0) Soit H(1) = Walsh(3) Soit H(2) = Walsh(1) Soit H(3) = Walsh(2) d'hadamard a2 a1 a0 b2 b1 b0 de Walsh Soit H(0) = Walsh(0) Soit H(1) = Walsh(7) Soit H(2) = Walsh(3) Soit H(3) = Walsh(4) Soit H(4) = Walsh(1) Soit H(5) = Walsh(6) Soit H(6) = Walsh(2) Soit H(7) = Walsh(5) Code de Gray Nombre décimal Code Gray b2 b1 b Figure 11-2 : Relation entre les indices des fonctions d Hadamard et ceux de Walsh Pour passer du nombre binaire de Gray b Nbr_bitstocodeHadamard-1 b 1 b 0 au nombre binaire correspondant, il est possible d utiliser la propriété suivante (par définition du code de Gray) : Résultat = Nbr_bitstocodeHadamard 1 XOR binaire b i i= 0 i+ 1 { * (2 1) } Pour expliciter cette méthode, prenons le cas d un générateur d Hadamard capable de fournir les 8 premières fonctions d Hadamard ainsi que leurs inverses. Conformément à ce qui a été dit précédemment, Nbr_bitstocodeHadamard vaudra donc 3 (log2(8) = 3). Appliquons la méthode décrite ci-dessus pour obtenir l indice de la fonction de Walsh correspondant à la fonction d Hadamard d indice 5. 63/106
65 En binaire codé sur Nbr_bitstocodeHadamard bits (3 dans ce cas), 5 s écrit 101. Le nombre inversé correspondant au code de Gray vaut donc 101, ce qui signifie en utilisant la notation développée ci-dessus : b2 = 1 / b1 = 0 et b0 = 1. Il ne nous reste plus qu à utiliser la formule pour le code de Gray. L équation binaire à résoudre est donc 1*1 xor 0*3 xor 1*7 = 001 xor 000 xor 111 = 110 ce qui équivaut à 6. La 3 ème fonction d Hadamard, pour un générateur chargé d en fournir les 8 premières, sera donc égale à la fonction de Walsh d indice Hadamard comme multiplication de fonctions de Walsh Au point précédent, nous avons décrit une méthodologie donnant la correspondance entre les indices des fonctions d Hadamard et ceux des fonctions de Walsh pour un générateur de taille donné. Dans cette partie, nous allons pousser le raisonnement plus loin en égalant les fonctions d Hadamard à des produits de fonctions de Walsh d indice 2 j -1 ; de telles fonctions pouvant être aisément obtenues à l aide d un simple signal d horloge comme expliqué au point Pour se faire, nous allons utiliser la propriété des fonctions de Walsh suivante : Walsh(k)*Walsh(l) = Walsh(k xor l) N importe quelle fonction de Walsh peut ainsi être décomposée en un produit de fonctions de Walsh d'indice 2 j -1 étant donné que n importe quel nombre binaire peut être obtenu à l aide de nombres binaires de la forme 2 j -1 combinés entre eux à l aide de fonctions xor. Pour effectuer cette décomposition, il faut convertir l'indice de la fonction de Walsh considérée en binaire puis l'égaler à l'aide de fonctions xor (ou-exclusif) à des nombres du type 2 j -1 écrits en binaire. L'exemple ci-dessous décrit la méthodologie. Exemple : Construisons Walsh(9) à partir des fonctions de Walsh d indices 2 j -1. 1) En binaire, 9 = ) 1001 = 1111 xor 0111 xor = 15 xor 7 xor 1 (symboliquement) Walsh(9) = Walsh(15)*Walsh(7)*Walsh(1) Mathématiquement, décomposer une fonction de Walsh en un produit de fonctions de Walsh d indice 2 j -1 revient à trouver les coefficients b Nbr_bitstocodeHadamard-1 b 1 b 0 répondant à l équation suivante : Résultat = Nbr_bitstocodeHadamard 1 XOR binaire b i i= 0 i+ 1 { * (2 1) } 64/106
66 puis à multiplier les fonctions Walsh d indice (b j *(2 j+1-1)) entre elles : Walsh ( Indice) = Nbr_bitstocodeHadamard-1 j= 0 j { + 1 Walsh[( * (2 1)) } b j Dans cette 2 ème formule, les coefficients b j (obtenus grâce à la 1 ère formule) valant 0 conduisent à effectuer une multiplication par la fonction de Walsh d indice 0 qui est une constante valant +1 représentant l élément nul pour la multiplication. Les coefficients valant 0 peuvent donc être purement et simplement négligés. Il est donc possible d'exprimer n'importe quelle fonction de Walsh uniquement en multipliant des fonctions d'indices 2 j -1. Pour ce faire, il suffit de calculer les valeurs b j, puis de multiplier entre elles les fonctions Walsh(2 j+1-1) telles que b j = 1. L étape suivante consiste à exprimer les fonctions d Hadamard sous forme de produits de telles fonctions. Il faut alors combiner les méthodologies présentées ci-dessus et celle du point précédent. Ce faisant, l on constate que la dernière étape du point précédent consistant à traduire l indice grâce au code de Gray et la première étape de celui-ci s annulent (formules identiques, mais dans le premier cas il faut trouver la valeur de l indice à l aide des coefficients et dans le 2 ème, retrouver les coefficients à l aide de l indice) La méthodologie complète pour relier les fonctions d'hadamard à un produit de fonction de Walsh d indice 2 j -1 est donc composée des 2 premières étapes du point précédent ainsi que de la 2 ème de celui-ci et est résumée ci-dessous : 1) Convertir l'indice k de la fonction d'hadamard considérée en nombre binaire de longueur Nbr_bitstocodeHadamard = Log2(N_hadamard) a Nbr_bitstocodeHadamard-1 a 1 a 0 2) Inverser l ordre des bits du nombre obtenu b Nbr_bitstocodeHadamard-1 b 1 b 0 = a 0 a 1 a Nbr_bitstocodeHadamard-1 3) Ne considérer que les j tels que b j = '1' (j = 0,, Nbr_bitstocodeHadamard-1) Hadamard(k) = (Walsh(2 j+1-1)) Il est à remarquer que pour la fonction d Hadamard d indice 0, tous les b j seront égaux à 0. Or la méthode exposée ci-dessus ne prend pas en compte les coefficients valant 0 et donc la solution ne sera pas déterminée pour cette fonction. Pour résoudre ce problème, en sachant que cette fonction d Hadamard doit être constante à la valeur +1, il suffit alors de multiplier deux fonctions identiques de Walsh entre elles (c'est-à-dire d élever au carré les valeurs d une fonction de Walsh quelconque). Comme les fonctions de Walsh peuvent prendre uniquement les valeurs +1 ou -1, en multipliant deux fonctions identiques entre elles, l on obtient bien une fonction constante à la valeur +1 ( (+1)*(+1) = +1 et (-1)*(-1) = +1 ). Dans le programme que nous avons développé, nous avons défini la fonction d Hadamard d indice 0 comme étant la multiplication entre elles des deux fonctions de Walsh d indice le plus élevé, c'est-à-dire des fonctions de Walsh d indice 2 Nbr_bitstocodeHadamard /106
67 Hadamard(0) = Walsh(2 Nbr_bitstocodeHadamard -1)* Walsh(2 Nbr_bitstocodeHadamard -1) Pour une meilleure compréhension de la méthodologie figurant ci-dessus, prenons, comme exemple, le cas d un générateur fournissant les 8 premières fonctions d Hadamard. Dans ce cas de figure, Nbr_bitstocodeHadamard sera égal à 3 (log2(8) = 3). Si l on désire obtenir la correspondance pour la matrice d Hadamard 5, il faudra donc faire : 1) En binaire, 5 = 101 (Nbr_bitstocodeHadamard = 3 bits) 2) Inversion des bits : 101 b 2 = 1 / b 1 = 0 / b 0 = 1 3) On ne considère que les j valant 0 et 2 (b j valant 1 ) Hadamard(3) = (Walsh(2 j+1-1)) = Walsh( ) * Walsh( ) = Walsh(7) * Walsh(1) Pour ce générateur, la fonction Hadamard 5 sera donc égale au produit des fonctions de Walsh d indices 1 et 7. La figure 11-3 résume tous les cas possibles pour un générateur fournissant les 8 premières fonctions d Hadamard (Nbr_bitstocodeHadamard = 3) : Walsh(2 j+1-1) = Walsh( ) = Walsh(7) Walsh(2 j+1-1) = Walsh( ) = Walsh(3) Walsh(2 j+1-1) = Walsh( ) = Walsh(1) Figure 11-3 : Relation entre fonctions d Hadamard et fonctions de Walsh d indice 2 i -1 66/106
68 Construction du générateur d Hadamard Jusqu à maintenant, nous avons donné une méthode permettant de construire n'importe quelle fonction d'hadamard d'indice inférieur ou égal à 2 Nbr_bitstocodeHadamard -1 à partir d un produit de fonctions de Walsh d'indices 2 j -1 avec j = 1,, Nbr_bitstocodeHadamard. Il nous reste maintenant à construire de telles fonctions à partir d un unique signal d horloge comme entrée. Pour simplifier les indices utilisés dans notre code, nous avons décidé d introduire les fonctions de Rademacher périodiques qui sont identiques aux fonctions de Walsh d indices 2 j -1 La relation qui relie ces deux types de fonctions est la suivante : Rademacher(0) = Walsh(1) Rademacher(1) = Walsh (3) Rademacher(n) = Walsh (2 n+1-1) Figure 11-4 : Fonctions de Rademacher Le fait d utiliser ces fonctions ne change rien à la méthodologie ou au concept utilisé, mais permet simplement d implémenter dans notre code des fonctions ayant des indices plus compréhensibles (de 0 à N et non pas de 1 à 2 N+1-1) Construction des fonctions de Rademacher logiques Le but étant de générer les fonctions d'hadamard logiques à l'aide d'une horloge d'entrée numérique, nous allons à présent présenter un moyen matériel de les construire. Les fonctions de Rademacher logiques sont tout simplement des fonctions carrées oscillant à des fréquences différentes de celle de l horloge et peuvent être obtenues à la sortie d un diviseur fréquentiel comme illustré à la figure suivante : 67/106
69 Figure 11-5 : Construction des fonctions de Rademacher La fonction de Rademacher d indice le plus élevé (Nbr_bitstocodeHadamard-1), correspondant à la fonction de Walsh d indice 2 Nbr_bitstocodeHadamard -1, sera donc forcément un signal carré de fréquence moitié inférieure à celle de l horloge d entrée, celle d indice Nbr_bitstocodeHadamard-2 aura une fréquence valant 1/4 de celle de l horloge et ainsi de suite (1/8 puis 1/16, ). Pour la réalisation de ce diviseur fréquentiel, nous avons utilisé un simple compteur binaire nous permettant d obtenir les fonctions de Rademacher. Le code VHDL utilisé pour réaliser cela est donné ci-dessous : begin -- Lorsque rst_b = '0' : phase d'initialisation if rst_b = '0'then compteur := (others=>'0'); elsif rst_b = '1' then if clk'event and clk = '1' then -- Fonctions de Rademacher = sortie d'un compteur binaire Rademacher := not (std_logic_vector(compteur)); compteur := compteur + 1; Les résultats de simulation pour les quatre premières fonctions de Rademacher sont bien semblables aux résultats attendus exprimés à la figure 11-4 (excepté le fait qu il s agissent de signaux logiques 0 et 1 et non de signaux analogiques binaires -1 et +1). Figure 11-6 : Fonctions de Rademacher logiques 68/106
70 Construction des fonctions d'hadamard logiques Les fonctions d'hadamard analogiques ne peuvent prendre que deux niveaux ±1 et sont obtenues en multipliant entre elles les fonctions de Rademacher analogiques (correspondant aux fonctions de Walsh d indice 2 j -1) comme expliqué au point Or, ce que nous cherchons est d obtenir les fonctions d Hadamard logiques à partir de fonctions de Rademacher logiques. Pour ce faire, en considérant les tables de la multiplication et celle de la fonction not xor (inverse du ou exclusif), nous pouvons constater que le '0' logique joue le rôle du -1 et le '1' logique celui du +1. Faire le produit de fonctions ±1 est donc identique à combiner les fonctions binaires 0, 1 correspondantes à l aide de fonctions not(xor). Figure 11-7 : Tables de multiplication et de la fonction not xor La méthode décrite à la fin de la partie peut donc être réutilisée en remplaçant les multiplications par des fonctions not(xor) et en se rappelant que Walsh(2 j -1) = Rademacher(j-1). Les fonctions d'hadamard d'indices k peuvent donc être obtenues en suivant les étapes suivantes : 1) Convertir l'indice k de la fonction d'hadamard considérée en nombre binaire de longueur Nbr_bitstocodeHadamard = Log2(N_hadamard) a Nbr_bitstocodeHadamard-1 a 1 a 0 2) Inverser l ordre des bits du nombre obtenu b Nbr_bitstocodeHadamard-1 b 1 b 0 = a 0 a 1 a Nbr_bitstocodeHadamard-1 3) Ne considérer que les j tels que b j = '1' (j = 0,, Nbr_bitstocodeHadamard-1) Hadamard ( k) = NOT ( XOR){ Rademacher ( j)} Le code VHDL utilisé pour obtenir les 2 Nbr_bitstocodeHadamard premières fonctions d'hadamard logiques à partir des Nbr_bitstocodeHadamard premières fonctions de Rademacher correspondra exactement à la méthodologie décrite ci-dessus. 69/106
71 begin -- Le calcul des fonctions d'hadamard se fait entre 2 flancs montants -- Lorsque rst_b = '0' : phase d'initialisation if rst_b = '0'then compteur := (others=>'0'); elsif clk'event and clk = '1' then -- Fonctions de Rademacher = sortie d'un compteur binaire Rademacher := not(std_logic_vector(compteur)); compteur := compteur + 1; -- génère les fonctions d'hadamard logiques '0'-'1' à partir des fonctions de Rademacher logiques Hadamard(0) := not(rademacher(nbr_bitstocodehadamard-1) xor Rademacher(Nbr_bitstocodehadamard -1)); for k in 1 to 2** Nbr_bitstocodehadamard -1 loop -- Indice k de la fonction d'hadamard en binaire dont l'ordre des bits a été inversé reg := std_logic_vector(to_unsigned(k,reg'length)); -- On initialise Hadamard à '1' car c'est l'élément neutre de la fonction not xor Hadamard(k) := '1'; for m in 0 to Nbr_bitstocodehadamard-1 loop if reg(m) = '1' then Hadamard(k) := not(rademacher(nbr_bitstocodehadamard-1-m) xor Hadamard(k)); end if; end loop; end loop; end if; end if; H_logic <= Hadamard; H_logic_barre <= not(hadamard); end process; 70/106
72 11.2. Algorithme démodulateur La méthode conceptuelle de fonctionnement du démodulateur a été explicitée au chapitre 6 et se base sur une série d additions ou de soustractions effectuées sur les divers canaux conformément aux valeurs contenues dans les lignes des matrices d Hadamard, suivi d un système de switches sélectionnant le mot à appliquer à la sortie. Cette annexe a pour but d expliquer la manière dont nous avons réalisé ce démodulateur générique et les spécificités exigées par le système auquel il a été adapté, puis de décrire étape par étape le code VHDL utilisé pour réaliser cette fonctionnalité. L algorithme développé s appuie sur la propriété fondamentale de construction des matrices d Hadamard répétée ci-dessous : avec Cette propriété étant valable pour des matrices d ordres 2n, le démodulateur générique sera donc adapté à des systèmes possédant 2 i canaux où i est supérieur ou égal à 1. Un démodulateur spécifique sera alors crée pour chaque configuration à 2, respectivement 4, 8, 16, canaux. Dans le cas d un convertisseur parallèle possédant un nombre de canaux différents de 2 i, il est possible de travailler avec le démodulateur adapté à un système à 2 i canaux où la valeur de i est choisi de manière à ce que 2 i soit la valeur supérieure la plus proche du nombre de canaux de la configuration choisie; les entrées des canaux surnuméraires étant alors mis à 0 (par exemple, pour une configuration à 6 canaux, il suffit de prendre le démodulateur 8 canaux et de mettre les entrées correspondants aux canaux 7 et 8 à la valeur 0). Une remarque importante découlant du paragraphe précédent réside dans le fait que, pour obtenir un modèle générique, nous avons dû contraindre le design, ce dernier n étant alors pas optimisé pour une configuration différente de 2 i canaux. En effet, dans ce cas, des registres et de la logique inutiles au fonctionnement du circuit sont insérés pour les canaux surnuméraires, engendrant une augmentation de la taille du circuit. Néanmoins, en tenant compte du fait que le nombre de canaux d un convertisseur de ce type doit rester relativement faible ( 8 car sinon problèmes dus aux composantes hautes fréquences des fonctions de Walsh-Hadamard difficilement gérables) et que le bloc numérique de démodulation risque d être d une taille sensiblement inférieure aux parties analogiques (modulateurs et convertisseurs), l approche générique pourra être appliquée sans grande répercussion à des systèmes ayant un nombre de canaux différent de 2 i. Le démodulateur est constitué de trois parties distinctes expliquées dans les trois souschapitres suivants. 71/106
73 ère Etape : Conversion std_logic_vector / unsigned La première étape à effectuer consiste à contrôler le nombre de canaux du système et, dans le cas où le système n en possède pas 2 i, à mettre les canaux surnuméraires à la valeur 0. Compte tenu du fait que les entrées du démodulateur correspondent aux sorties des ADC de chaque canal (composés de Nbr_bits_ADC bits) et que ces valeurs sont signées, il convient de ne pas oublier que le 0 est situé à la moitié de la plage des ADC, soit à la valeur 2 (Nbr_bits_ADC-1) correspondant à un mot binaire de longueur Nbr_bits_ADC ayant son MSB à 1 et tout ces autres bits à 0. Une autre opération, résultant de l utilisation du langage VHDL, qui sera effectuée dans cette étape, vient du fait que les opérations d additions et de soustractions ne sont pas définies de manière implicite pour des signaux binaires de type std_logic_vector en VHDL. Il faudra donc transformer ces mots binaires en mots de type unsigned pour lequel ces opérations sont définies. La finalité de cette étape est donc de transformer les mots binaires d entrées en unsigned tout en complétant, au besoin, les mots des canaux manquants par la valeur 0 conformément aux réflexions faites ci-dessus. La figure 11-8 représente schématiquement cela dans le cas d un système à 3 canaux (utilisation d un démodulateur à 4 canaux) et est décrit par le code VHDL générique ci-dessous.. CONVERSION Figure 11-8 : Schéma de conversion pour un système à 3 canaux ---- CONVERSION_UNSIGNED + MISE A 0 DES CANAUX SURNUMERAIRES ---- process(rst_b,s_array_in) begin for i in 1 to Nbr_channels loop word_channels(i) <= unsigned(s_array_in(i)); end loop; -- Mise à 0 (MSB = 1, les autres bits = 0 ) des canaux surnuméraires for j in Nbr_channels+1 to 2**Nbr_bitstocodechannels loop word_channels(j) <= (Nbr_bits_ADC-1 => '1', others => '0'); end loop; end process; 72/106
74 ème Etape : Opérations arithmétiques La deuxième étape est l étape de démodulation à proprement parlé où les mots venant de chaque canal sont additionnés ou soustraits entre eux de manière à correspondre aux lignes de la matrice d Hadamard et ainsi fournir les différentes valeurs à appliquer à la sortie. Comme expliqué au chapitre 6.2, cette partie se fera de manière pipelinée, les différents mots subissant les opérations 2 à 2. Chaque étage prendra comme valeurs d entrée celles fournies par l étage précédent afin d aboutir, au dernier étage, à la reconstitution des mots ayant subis les opérations décrites par les lignes de la matrice d Hadamard. Chaque résultat provenant de l addition ou de la soustraction de 2 mots sera stocké dans un autre mot, qui sera utilisé par l étage suivant, accessible grâce à un système de pointeurs. Au 1 er étage, les mots provenant des 2 premiers canaux convertis en unsigned vont être additionnés et soustraits (canal 1 canal 2) pour obtenir 2 mots stockés sur l adresse respectivement 1 et 2 du système de pointeurs (l on va dire que ces mots se trouvent dans la première colonne de l étage 1). De même pour les canaux 3 et 4 qui donneront 2 mots accessibles aux adresses 3 et 4 (2 ème colonne de l étage 1) ; 5 et 6 et ainsi de suite. Ces résultats correspondent aux opérations données par les lignes de la matrice d Hadamard d ordre 2 pour chaque paire de canal pris 2 à 2 et vont être utilisés par l étage suivant. Le nombre de mots de sortie vaudra alors : 2 Nbr_bitstocodechannels. Au 2 ème étage, l on va additionner puis soustraire au premier mot de la colonne 1 de l étage 1 et au second le premier mot de la colonne 2 (respectivement le 2 ème mot) pour donner 4 mots de sortie pour cet étage qui constitueront la colonne 1 de l étage 2. Les mots des canaux suivants vont être regroupés de manière identique (formant les colonnes 2,3, ). En entrées, l on avait donc les opérations correspondant à la matrice d Hadamard d ordre 2 pour les canaux 1 et 2, 3 et 4, Comme résultats, l on obtiendra les différentes sommes des opérations à effectuer conformément aux lignes de la matrice d Hadamard d ordre 4 en prenant les canaux 4 par 4. Le nombre de mots de sortie pour cet étage sera identique à celui du précédent. Chaque étage va ensuite être réalisé de la sorte en sommant puis en soustrayant aux j mots de la colonne 1 de l étage précédent correspondant aux résultats des opérations dictées par la matrice d Hadamard d ordre 2 j-1 appliquées aux j premiers canaux, les j mots correspondants de la colonne 2 de l étage précédent (opérations obéissant aux valeurs de la matrice d Hadamard d ordre 2 j-1 appliquées aux j canaux suivants) et formant ainsi les 2j mots constituant la 1 ère colonne de l étage considéré correspondant aux opérations à effectuer sur les 2j premiers canaux en suivant les valeurs fournies par les lignes de la matrice d Hadamard d ordre 2 j (respectivement la colonne 3 et 4 de l étage précédent vont former la colonne 2 de cet étage et ainsi de suite). Dès qu un étage ne comprend plus qu une seule colonne (ce qui arrive après Nbr_bitstocodechannels étages), les valeurs appartenant à cette dernière sont les mots recherchés résultant des opérations d additions et de soustractions réalisées sur les divers canaux conformément aux matrices d Hadamard. Un exemple, donné au point , permet d illustrer ce procédé. 73/106
75 Cette méthode s appuie sur la propriété de construction des matrices d Hadamard suivante : A chaque étage stage, les résultats des opérations effectués sur les canaux 2 stage par 2 stage obtenus à partir de la matrice d Hadamard d indice 2 stage résulteront simplement de l addition et de la soustraction ligne par ligne des résultats fournis par l étage précédent basé sur les matrices d Hadamard 2 stage-1 appliqués aux canaux 2 stage-1 par 2 stage-1 Chaque étage sera constitué de 2 Nbr_bitstocodechannels mots de longueur Nbr_bits_ADC en entrée et en comptera le même nombre en sortie. Il suffit donc d ajouter un offset au pointeur d une valeur égale à 2 Nbr_bitstocodechannels pour passer d un étage au suivant. Si le nombre d éléments d entrée et de sortie reste le même pour chaque étage, le nombre de colonnes et d éléments par colonne va varier sensiblement en fonction de ce dernier. L étage stage comprendra 2 Nbr_bitstocodechannels-stage colonnes contenant, pour chacune d entre elles, 2 stage valeurs. Pour passer d une colonne à la suivante pour un étage donné, il faut donc ajouter au pointeur la valeur 2 stage. Pour expliciter cette étape, nous avons développé ci-dessous le cas à 8 canaux Cas d un système à 8 canaux L exemple suivant permet de visualiser la stratégie utilisée pour un démodulateur à 8 canaux (Nbr_bitstocodechannels = 3). La partie de gauche nous indique les opérations à réaliser pour chaque colonne représentant chacune un canal, les tableaux suivants indiquant les opérations à effectuer à chaque étage. La partie de droite indique, quant à elle, les valeurs stockées et explicite le système de pointeurs utilisé pour le faire. Dans cet exemple, Hadn correspond aux opérations arithmétiques découlant de la matrice d Hadamard d ordre n représentée à la figure /106
76 Canal Opérations à effectuer Colonne Colonne ETAGE Had2[1] Had2[2] Had2[3] Had2[4] Had2[1] -Had2[2] Had2[3] -Had2[4] Had2[1] Had2[2] -Had2[3] -Had2[4] Had2[1] -Had2[2] -Had2[3] Had2[4] add (1) add (3) add (5) add (7) add (2) add (4) add (6) add (8) add (1) -add (3) add (5) -add (7) add (2) -add (4) add (6) -add (8) add (1) add (3) -add (5) -add (7) add (2) add (4) -add (6) -add (8) add (1) -add (3) -add (5) add (7) add (2) -add (4) -add (6) add (8) Colonne ETAGE Had4[1] Had4[2] Had4[1] -Had4[2] add (9) add (13) add (10) add (14) add (11) add (15) add (12) add (16) add (9) -add (13) add (10) -add (14) add (11) -add (15) add (12) -add (16) ETAGE 3 Had8[1] add (17) add (18) add (19) add (20) add (21) add (22) add (23) add (24) Figure 11-9 : Exemple, démodulateur à 8 canaux Les mots de sortie, calculés à partir des valeurs des lignes de la matrice d Hadamard d ordre 8 appliquées aux canaux, sont ceux donnés au dernier étage et seront donc stockés sur les emplacements add(17) à add(24). Il est aisé de constater que l indice du pointeur est bien incrémenté de 2 Nbr_bitstocodechannels = 8 lorsque l on passe d un étage au suivant et que, pour un étage stage donné, il faut ajouter 2 Stage pour passer d une colonne de cet étage à la suivante. 75/106
77 Particularités et description du code implémenté Les mots d entrée du démodulateur provenant des ADC des différents canaux sont signés. Or, pour obtenir une valeur signée à la sortie d une addition de 2 mots, il ne faut pas les garder les 2 en signés, mais en garder un tel quel et donner la valeur du second en relatif par rapport au 0 du système. Par exemple, si l on veut additionner les nombres 507 et 513 en signés sur 10 bits (la valeur du 0 sera à « » = 512), il faudra faire ( ) = 508 et non = Compte tenu du fait qu un seul mot devra être signé pour obtenir le résultat en signé lors d une opération comprenant plusieurs additions et soustractions nous choisissons, pour notre démodulateur, de garder le mot venant du 1 er canal tel quel et de travailler avec les autres valeurs en relatifs (c'est-à-dire, de leur enlever la valeur 2 (Nbr_bits_ADC-1) ). De cette façon, seul la 1 ère colonne de chaque étage sera signée conduisant à des valeurs de sortie (1 ère colonne du dernier étage) signées. Le code VHDL utilisé pour le 1 er étage est le suivant : er ETAGE Les 2 premiers éléments du 1 er étage sont signés les autres non add_word(1)<=word_channels(1) + (word_channels(2)-2**(nbr_bits_adc-1)); add_word(2)<=word_channels(1) - (word_channels(2)-2**(nbr_bits_adc-1)); if Nbr_bitstocodechannels > 1 then for i in 2 to 2**(Nbr_bitstocodechannels-1) loop -- Les éléments suivants du 1 er étage sont non signés. Or, les mots d entrées word_channels le sont. Il faut donc retirer " " = 2**(Nbr_usefulbits_ADC-1)à chaque valeur d entrée pour obtenir un mot correspondant non signé > -2*(2**(Nbr_usefulbits_ADC-1)) = -2**Nbr_usefulbits_ADC > 2**(Nbr_usefulbits_ADC-1) - 2**(Nbr_usefulbits_ADC-1) = 0 add_word(2*i-1) <= word_channels(2*i-1) + (word_channels(2*i)-2**(nbr_bits_adc));++ add_word(2*i) <= word_channels(2*i-1) - word_channels(2*i); +- end loop; ---- Fin 1er ETAGE---- Concernant les étages suivants, le code correspond exactement à ce qui a été dit précédemment. Chaque étage prenant 2 Nbr_bitstocodechannels mots à l entrée et à la sortie, il suffit d ajouter ce nombre au pointeur pour passer à l étage suivant. Pour passer d une colonne à la suivante, il faudra incrémenter ce pointeur de 2 stage. En sachant que, pour le calcul d un étage il lui faut, en entrée, les valeurs obtenues à l étage précédent, nous avons dû utiliser 2 pointeurs ; le premier pointant sur les mots obtenus à l étage précédent utilisés comme entrées pour les additionneurs et les soustracteurs de l étage en question et le second pointant sur les mots où doivent être stockés les résultats de cet étage. Le reste du code comprend uniquement les diverses additions et soustractions réalisées sur les mots de l étage précédent afin d obtenir les mots de sortie de cet étage comme expliqué dans la première partie de ce point. 76/106
78 ---- AUTRES ETAGES stage = étage de l'addition pipelinée où l'on se trouve for stage in 2 to Nbr_bitstocodechannels loop offset_previousstage_pointer := offset_stage_pointer; offset_stage_pointer:=offset_stage_pointer+2**nbr_bitstocodechannels; for j in 1 to 2**(stage-1) loop -- 1ère colonne add_word(j+offset_stage_pointer) <= add_word(j+offset_previousstage_pointer) + add_word(j+2**(stage-1)+offset_previousstage_pointer); add_word(j+2**(stage-1)+offset_stage_pointer) <= add_word(j+offset_previousstage_pointer) - add_word(j+2**(stage-1)+offset_previousstage_pointer); -- FIN 1 ère colonne -- Autres colonnes if Nbr_bitstocodechannels > stage then for k in 1 to 2**(Nbr_bitstocodechannels-stage)-1 loop add_word(j+k*2**stage+offset_stage_pointer) <= add_word(j+k*2**stage+offset_previousstage_pointer) + add_word(j+k*2**stage+2**(stage-1)+offset_previousstage_pointer); add_word(j+k*2**stage+2**(stage-1)+offset_stage_pointer) <= add_word(j+k*2**stage+offset_previousstage_pointer) - add_word(j+k*2**stage+2**(stage-1)+offset_previousstage_pointer); end loop; end if; -- Fin autres colonnes end loop; -- Fin étage considéré end loop; -- FIN ETAGES SUIVANTS-- -- Remise à 0 des offsets des pointeurs pour le prochain coup d'horloge offset_previousstage_pointer := 0; offset_stage_pointer := 0; ème Etape : Système de switches de sortie Les mots, résultant des opérations d additions et de soustractions sur les valeurs d entrée provenant des différents canaux conformément aux lignes de la matrice d Hadamard considérée ayant été calculés, il reste à les appliquer tour à tour sur la sortie à une fréquence f clk. Pour faire cela, nous avons utilisé un système chargé de sélectionner le mot et qui s incrémente à chaque coup d horloge (système bouclé : dès qu il atteint sa borne supérieure, il revient à la première valeur). Ce système équivaudra à un simple compteur (qui est remplacé par de la logique combinatoire lors de la synthèse) nommé switch_clk. 77/106
79 Les mots du dernier étage devant être appliqués à la sortie ayant un indice variant en fonction du nombre de canaux (donc d étages) du système, nous avons crée une fonction chargée de calculer cette valeur dont le code est donné ci-dessous. Pour un démodulateur possédant Nbr_bitstocodechannels étages composés chacun de 2 Nbr_bitstocodechannels valeurs, l offset à ajouter pour passer directement au dernier étage vaudra donc simplement le nombre d étages avant le dernier (Nbr_bitstocodechannels-1) multiplié par le nombre de valeurs de chaque étage. function offset_final_calculation(nbr_bitstocodechannels : in integer) return natural is variable result : natural; begin if Nbr_bitstocodechannels > 1 then result := (Nbr_bitstocodechannels-1)*2**Nbr_bitstocodechannels; else result := 0; end if; return result; end function offset_final_calculation ; L échantillonnage se fait à un flanc montant du signal d horloge et la valeur sélectionnée dépend de l état du signal switch_clk qui fonctionne comme un compteur. Le code VHDL utilisé pour faire cela est donné ci-dessous. -- Valeur de l'offset pour le pointeur à la sortie du dernier étage du calculateur constant offset_final : natural := offset_final_calculation(nbr_bitstocodechannels); -- Switches de sortie chargés de choisir la sortie du démodulateur à appliquer à la sortie du système complet process(switch_clk,clk_system,rst_b) begin if rst_b = '0' then s_out <= (Nbr_bits_ADC-1 => '1', others => '0'); elsif clk_system'event and clk_system ='1' then for i in 2**Nbr_bitstocodechannels-1 downto 0 loop if to_integer(unsigned(not(switch_clk))) = i then end if; end loop; end if; end process; s_out end architecture bhv; <= std_logic_vector(add_word(offset_final+i+1)); 78/106
80 12. Annexes code Code VHDL du Package Package package function_package is -- design_vision ne supporte pas la librairie math_real contenant les fonctions log2 et ceil qui nous auraient permis de calculer directement Nbr_bitstocodechannels à partir du nombre de canaux -- Nbr_bitstocodechannels = ceil(log2((nbr_channels)); -- On crée une fonction nous retournant directement cette valeur function bits2codechannels(input : in integer) return integer; -- Calcul de l offset à ajouter au pointeur pour à l étage de sortie du démodulateur pipeline function offset_final_calculation(nbr_bitstocodechannels : in integer) return natural; end package function_package; package body function_package is -- Corps du package function bits2codechannels(input : in integer) return integer is variable result : integer := 0; begin case input is when 1 2 => result := 1; when 3 4 => result := 2; when 5 to 8 => result := 3; when 9 to 16 => result := 4; when 17 to 32 => result := 5; when others => result := 6; end case; return result; end function bits2codechannels; function offset_final_calculation(nbr_bitstocodechannels : in integer) return natural is variable result : natural; begin if Nbr_bitstocodechannels > 1 then result := (Nbr_bitstocodechannels-1) *2**Nbr_bitstocodechannels; else result := 0; end if; return result; end function offset_final_calculation ; end package body function_package; Package (2) use work.function_package.all; package demodulator_parameters is -- Nombre de canaux du convertisseur de Walsh-Hadamard en parallèle constant Nbr_channels : integer := 4; -- Nombre de bits de sortie de l'adc constant Nbr_bits_ADC : integer := 10; -- Nombre de bits nécessaire pour coder l indice des canaux constant Nbr_bitstocodechannels: integer := bits2codechannels(nbr_channels); -- Les 2**Nbr_bitstocodehadamard premières fonctions d'hadamard seront crées constant Nbr_bitstocodeHadamard: integer := Nbr_bitstocodechannels + 1; -- Tableau contenant tous les mots de sortie des ADC type std_logic_vector_array_in_nbits_adc is array 1 to Nbr_channels) of std_logic_vector(nbr_bits_adc-1 downto 0); -- Tableaux contenant les résultats (mots de Nbr_bits_ADC) des opérations arithmétiques des différents étages du démodulateur type additionwords_pointor is array (1 to Nbr_bitstocodechannels*2**Nbr_bitstocodechannels) of unsigned(nbr_bits_adc-1 downto 0); -- Mots contenus dans l étage de sortie du démodulateur type additionwords_out_pointor is array (1 to 2**Nbr_bitstocodechannels) of unsigned(nbr_bits_adc-1 downto 0); end package demodulator_parameters; 79/106
81 12.2. Code VHDL du générateur de fonctions de Walsh-Hadamard Générateur de fonctions d Hadamard génériques use work.function_package.all; use work.demodulator_parameters.all; --- Générateur générique de fonctions d'hadamard binaires entre '0' et '1' --- entity Hadamard_generator is port( -- Signal de reset pour initialiser le compteur à 0. Actif au niveau BAS signal rst_b : in std_logic := '0'; -- Signal d'horloge signal clk : in std_logic := '1'; -- Fonctions d'hadamard binaires et ses inverses signal H_logic, H_logic_barre : out std_logic_vector(2**nbr_bitstocodehadamard-1 downto 0)); end entity Hadamard_generator; architecture bhv of Hadamard_generator is begin -- générateur des Nbr_bitstocodeHadamard premières fonctions de Rademacher binaires '0'-'1' -- process(clk,rst_b) -- Fonctions de Rademacher utiles pour créer les fonctions d'hadamard variable Rademacher : std_logic_vector(0 to Nbr_bitstocodeHadamard-1) := (others =>'1'); -- Compteur jouant le rôle d'un diviseur de fréquence variable compteur : unsigned(nbr_bitstocodehadamard-1 downto 0); -- Fonctions d'hadamard en variable variable Hadamard : std_logic_vector(2**nbr_bitstocodehadamard-1 downto 0); -- Registre contenant l'indice de la fonction d'hadamard calculé en binaire dont l'ordre des bits a été inversé variable reg : std_logic_vector(nbr_bitstocodehadamard-1 downto 0); begin Générateur de fonctions d Hadamard génériques (2) -- Le calcul des fonctions d'hadamard se fait entre 2 flancs montants -- Lorsque rst_b = '0' : phase d'initialisation if rst_b = '0'then compteur := (others=>'0'); Hadamard := (others=>'0'); elsif clk'event and clk = '1' then -- Fonctions de Rademacher = sortie d'un compteur binaire Rademacher := not(std_logic_vector(compteur)); compteur := compteur + 1; -- génère les fonctions d'hadamard binaires '0'-'1' à partir des fonctions de Rademacher Hadamard(0) := not(rademacher(nbr_bitstocodehadamard-1) xor Rademacher (Nbr_bitstocodeHadamard-1)); for k in 1 to 2**Nbr_bitstocodeHadamard-1 loop -- Indice k de la fonction d'hadamard en binaire dont l'ordre des bits a été inversé reg := std_logic_vector(to_unsigned(k,reg'length)); -- On initialise à '1' car c'est l'élément neutre de la fonction not xor Hadamard(k) := '1'; for m in 0 to Nbr_bitstocodeHadamard-1 loop if reg(m) = '1' then Hadamard(k) := not(rademacher (Nbr_bitstocodeHadamard-1-m) xor Hadamard(k)) ; end if; end loop; end loop; end if; H_logic <= Hadamard; H_logic_barre <= not(hadamard); end process; end bhv; 80/106
82 12.3. Code VHDL du démodulateur générique de Walsh-Hadamard Démodulateur générique de Walsh-Hadamard use work.demodulator_parameters.all; use work.function_package.all; -- Démodulateur générique de Walsh-Hadamard -- entity demodulator is port ( -- Horloge du système complet utilisé en sortie du démodulateur signal clk_system : in std_logic; -- Signal de reset (actif au niveau BAS signal rst_b : in std_logic; -- Horloge contrôlant les bancs de registres séparant les étages d'additionneurs (fclk_add = fclk_system/nbr_canaux) signal clk_add : in std_logic; -- Horloges contrôlant les switches de sortie signal switch_clk : in std_logic_vector (Nbr_bitstocodechannels-1 downto 0); -- Valeurs d'entrées provenant des ADC en parallèle (1 ADC par canal) codées sur le nombre de bits des ADC signal s_array_in : in std_logic_vector_array_in_nbits_adc; -- Mot binaire de sortie du système signal s_out: out std_logic_vector (Nbr_bits_ADC-1 downto 0)); end entity; architecture bhv of demodulator is -- Type identique au type des mots d'entrées sauf qu'il s'agit d'unsigned et non de bit_vector(les opérations d'additions et de soustractions utiles à la démodulation n'étant pas défini pour des bit_vector dans l'environnement VHDL) type unsigned_in4demodulator is array (1 to 2**Nbr_bitstocodechannels) of unsigned(nbr_bits_adc-1 downto 0); -- Mots d'entrées convertis en unsigned signal word_channels : unsigned_in4demodulator := (others=>(nbr_bits_adc-1 => '1', others => '0')); -- Registres contenant les résultats intermédiaires des opérations d'additions et de soustractions signal add_word : additionwords_pointor; -- Valeur de l'offset pour pointer sur le dernier étage du calculateur constant offset_final :natural := offset_final_calculation(nbr_bitstocodechannels); begin Démodulateur générique de Walsh-Hadamard (2) -- CONVERSION_UNSIGNED + MISE A 0 DES CANAUX SURNUMERAIRES -- Remarque : notre méthode de démodulation est définie pour un nombre de canal valant 2**i où i = quelconque -- Si,par exemple, i = 3, le démodulateur nécessite 8 canaux en entrée. Si l'on a que 6 canaux, les 2 derniers seront mis a une valeur constante de 0 process(rst_b,s_array_in) begin for i in 1 to Nbr_channels loop word_channels(i) <= unsigned(s_array_in(i)); end loop; for j in Nbr_channels+1 to 2**Nbr_bitstocodechannels loop -- Mise à 0 (" ") des canaux surnuméraires word_channels(j) <= (Nbr_bits_ADC-1 => '1', others => '0'); end loop; end process; -- CALCUL DES ELEMENTS DES POINTEURS -- process(rst_b,clk_add) -- Offset du pointeur pour le calcul des valeurs lors du reset variable offset_reset : natural := 0; -- Offset du pointeur sur l'étage précédent variable offset_previousstage_pointer : natural := 0; -- Offset du pointeur sur l'étage analysé variable offset_stage_pointer : natural := 0; begin 81/106
83 Démodulateur générique de Walsh-Hadamard (3) -- Initialisation, Remise à zéro du démodulateur if rst_b = '0' then offset_reset := 0; add_word <= (others=>(others => '0')); -- Certains registres sont en signés, d autres non. On initialise donc les registres signés à " " et les autres à " " pour que la sortie vaille " " durant toute la phase de latence for k in 1 to Nbr_bitstocodechannels loop for j in 1 to 2**k loop add_word(j+offset_reset) <= (Nbr_bits_ADC-1 => '1', others => '0'); end loop; offset_reset := offset_reset + 2**Nbr_bitstocodechannels; end loop; offset_previousstage_pointer := 0; offset_stage_pointer := 0; elsif clk_add'event and clk_add = '1' then -- 1er ETAGE Les 2 premiers éléments du 1 er étage sont signés les autres non add_word(1) <= word_channels(1) + (word_channels(2) 2**(Nbr_bits_ADC-1)); add_word(2) <= word_channels(1) - (word_channels(2) 2**(Nbr_bits_ADC-1)); if Nbr_bitstocodechannels > 1 then for i in 2 to 2**(Nbr_bitstocodechannels-1) loop -- Les éléments suivants du 1 étage sont non signés. Or, les mots d entrées word_channels le sont. Il faut donc retirer " " = 2**(Nbr_bits_ADC-1)à chaque valeur d entrée pour obtenir un mot correspondant non signé > -2*(2**(Nbr_bits_ADC-1)) = -2**Nbr_bits_ADC > 2**(Nbr_bits_ADC-1) - 2**(Nbr_bits_ADC-1) = 0 add_word(2*i-1) <= word_channels(2*i-1)+(word_channels(2*i)- 2**(Nbr_bits_ADC));-- ++ add_word(2*i) <= word_channels(2*i-1)-word_channels(2*i);+end loop; -- Fin 1er ETAGE Démodulateur générique de Walsh-Hadamard (4) -- AUTRES ETAGES stage = étage de l'addition pipelinée où l'on se trouve for stage in 2 to Nbr_bitstocodechannels loop offset_previousstage_pointer := offset_stage_pointer; offset_stage_pointer := offset_stage_pointer + 2**Nbr_bitstocodechannels; for j in 1 to 2**(stage-1) loop -- 1ère colonne add_word(j+offset_stage_pointer) <= add_word(j+offset_previousstage_pointer) + add_word(j+2**(stage-1)+offset_previousstage_pointer); add_word(j+2**(stage-1)+offset_stage_pointer) <= add_word(j+offset_previousstage_pointer) - add_word(j+2**(stage-1)+offset_previousstage_pointer); -- Fin 1ère colonne -- Autres colonnes if Nbr_bitstocodechannels > stage then for k in 1 to 2**(Nbr_bitstocodechannels-stage)-1 loop add_word(j+k*2**stage+offset_stage_pointer) <= add_word(j+k*2**stage+offset_previousstage_pointer) + add_word(j+k*2**stage+2**(stage-1) + offset_previousstage_pointer); add_word(j+k*2**stage+2**(stage-1)+offset_stage_pointer)<= add_word(j+k*2**stage+offset_previousstage_pointer) - add_word(j+k*2**stage+2**(stage-1) + offset_previousstage_pointer); end loop; end if; -- Fin autres colonnes end loop; -- Fin étage considéré end loop; -- FIN ETAGES SUIVANTS-- end if; -- Remise à 0 des offsets des pointeurs pour le cycle suivant offset_previousstage_pointer := 0; offset_stage_pointer := 0; end if; end process; 82/106
84 Démodulateur générique de Walsh-Hadamard (5) -- Switches de sortie chargés de choisir la sortie du démodulateur à appliquer à la sortie du système complet process(switch_clk,clk_system,rst_b) begin if rst_b = '0' then s_out <= (Nbr_bits_ADC-1 => '1', others => '0'); elsif clk_system'event and clk_system ='1' then for i in 2**Nbr_bitstocodechannels-1 downto 0 loop if to_integer(unsigned(not(switch_clk))) = i then s_out <= std_logic_vector(add_word(offset_final+i+1)); end if; end loop; end if; end process; end architecture bhv; 83/106
85 12.4. Code VHDL / VHDL- AMS du modulateur Phase_generator use work.demodulator_parameters.all; use work.function_package.all; -- Génération des signaux de contrôle du modulateur pour un système possédant plus de 2 canaux -- entity phases_generator is generic( -- Tension d'alimentation de la partie numérique = 1.8 V constant VDD : real := 1.8; -- GND = 0.0 V constant VSS : real := 0.0); port( -- Fonctions d'hadamard et leurs complémentaires en binaires signal HAD,HADc : in std_logic_vector(2**nbr_bitstocodehadamard-1 downto 0); -- Période où le canal A (respectivement B intègre) signal INT_A, INT_B : out std_logic; -- Reset du canal A et B signal RST_A, RST_B : out std_logic; -- Echantilonnage sur la sortie du canal A ou B signal SMPL_A, SMPL_B : out std_logic); end entity; architecture bhv of phases_generator is begin -- Les intégrateurs se chargent en complémentaire INT_A <= HAD(2**(Nbr_bitstocodeHadamard-1)); INT_B <= HADc(2**(Nbr_bitstocodeHadamard-1)); Phase_generator (2) -- Signaux de commande process(had(2**(nbr_bitstocodehadamard-3)), HAD(2**(Nbr_bitstocodeHadamard-2)), HAD(2**(Nbr_bitstocodeHadamard-1))) begin if HAD(2**(Nbr_bitstocodeHadamard-3)) = '0' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '1' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '0' then SMPL_A <= '1'; SMPL_B <= '0'; RST_A <= '0'; RST_B <= '0'; elsif HAD(2**(Nbr_bitstocodeHadamard-3)) = '0' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '1' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '1' then SMPL_A <= '0'; SMPL_B <= '1'; RST_A <= '0'; RST_B <= '0'; elsif HAD(2**(Nbr_bitstocodeHadamard-3)) = '1' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '0' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '0' then SMPL_A <= '0'; SMPL_B <= '0'; RST_A <= '1'; RST_B <= '0'; elsif HAD(2**(Nbr_bitstocodeHadamard-3)) = '1' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '0' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '1' then SMPL_A <= '0'; SMPL_B <= '0'; RST_A <= '0'; RST_B <= '1'; else SMPL_A <= '0'; SMPL_B <= '0'; RST_A <= '0'; RST_B <= '0'; end if; end process; end architecture bhv; 84/106
86 Phase_generator_2 use work.demodulator_parameters.all; use work.function_package.all; -- Génération des signaux de contrôle du modulateur pour un système à 2 canaux -- entity phases_generator_2 is generic( -- Tension d'alimentation de la partie numérique = 1.8 V constant VDD : real := 1.8; -- GND = 0.0 V constant VSS : real := 0.0); port( -- Horloge du système signal clk_system : in std_logic; -- Fonctions d'hadamard et leurs complémentaires en binaires signal HAD,HADc : in std_logic_vector(2**nbr_bitstocodehadamard-1 downto 0); -- Période où le canal A (respectivement B intègre) signal INT_A, INT_B : out std_logic; -- Reset du canal A et B signal RST_A, RST_B : out std_logic; -- Echantilonnage sur la sortie du canal A ou B signal SMPL_A, SMPL_B : out std_logic); end entity; architecture bhv of phases_generator_2 is begin -- Les intégrateurs se chargent en complémentaire INT_A <= HAD(2**(Nbr_bitstocodeHadamard-1)); INT_B <= HADc(2**(Nbr_bitstocodeHadamard-1)); Phase_generator_2 (2) -- Signaux de commande process(clk_system, HAD(2**(Nbr_bitstocodeHadamard-2)), HAD(2**(Nbr_bitstocodeHadamard-1))) begin if clk_system = '0' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '1' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '0' then SMPL_A <= '1'; SMPL_B <= '0'; RST_A <= '0'; RST_B <= '0'; elsif clk_system = '0' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '1' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '1' then SMPL_A <= '0'; SMPL_B <= '1'; RST_A <= '0'; RST_B <= '0'; elsif clk_system = '1' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '0' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '0' then SMPL_A <= '0'; SMPL_B <= '0'; RST_A <= '1'; RST_B <= '0'; elsif clk_system = '1' and HAD(2**(Nbr_bitstocodeHadamard-2)) = '0' and HAD(2**(Nbr_bitstocodeHadamard-1)) = '1' then SMPL_A <= '0'; SMPL_B <= '0'; RST_A <= '0'; RST_B <= '1'; else SMPL_A <= '0'; SMPL_B <= '0'; RST_A <= '0'; RST_B <= '0'; end if; end process; end architecture bhv; 85/106
87 channel -- Canal de modulation -- entity channel is generic( -- Résistance d'entrée des ports IN constant Rin : real := 10.0e9; -- Résistance d'entrée du port CM_ref constant Rcm : real := 10.0e9; -- Résistance d'entrée de l'enable constant Renable : real := 10.0e9; -- Résistance d'entrée vu par le courant de référence constant Riref : real := 10.0; -- Saturation de sortie supérieure de l'intégrateur en V en mode non différentiel constant INT_max : real := 0.750; -- Saturation de sortie inférieure de l'intégrateur en V en mode non différentiel constant INT_min : real := ; -- Tension d'alimentation de la partie numérique = 1.8 V constant VDD : real := 1.8; -- GND = 0.0 V constant VSS : real := 0.0) port( -- Signaux de contrôle du S & H de sortie signal SMPL_A, SMPL_B : in std_logic; -- Signaux de reset des intégrateurs signal RST_A, RST_B : in std_logic; -- Signaux pour l'activations des intégrateurs signal INT_A, INT_B : in std_logic; -- Fonction d'hadamard modulant le signal d'entrée signal HAD, HADc : in std_logic; -- Valeurs d'entrée en différentiel terminal INP, INN : electrical; -- Tension de référence de mode commun terminal CM_REF : electrical; -- Enable pour le canal terminal CHANNEL_ENABLE : electrical; -- Référence de courant pour les blocs du canal terminal IREF_CHANNEL : electrical; -- Sorties différentielles du canal terminal OUTP, OUTN : electrical); end entity; channel(2) architecture bhv of channel is Terminaux et Quantités quantity uinp across iinp through INP; quantity uinn across iinn through INN; quantity ucm_ref across icm_ref through CM_REF; quantity uenable across ienable through CHANNEL_ENABLE; quantity uref across iref through IREF_CHANNEL; quantity uoutp across ioutp through OUTP; quantity uoutn across ioutn through OUTN; Signaux internes Gain du modulateur afin de réduire la différence entre amplitude d entrée et de sortie constant GAIN : real := 8.34e7; -- Entrée en mode non différentielle quantity input : real; -- Entrée multipliée par la fonction d'hadamard correspondant au canal en question quantity input_with_hadamard : real; -- Valeur d'entrée des structures d'intégration quantity input_integratorchannel: real; -- Sortie du multiplieur du canal 1 quantity canal1_mult_out : real; -- Valeur de sortie de l'intégrateur du canal 1 en ne tenant pas compte de la saturation quantity int1 : real; -- Valeur de sortie de l'intégrateur du canal 1 en tenant compte de la saturation quantity int1_out : real; -- Sortie du multiplieur du canal 2 quantity canal2_mult_out : real -- Valeur de sortie de l'intégrateur du canal 2 en ne tenant pas compte de la saturation quantity int2 : real; -- Valeur de sortie de l'intégrateur du canal 2 en tenant compte de la saturation quantity int2_out : real; -- Signal de sortie donnant la valeur en mode non différentiel signal nondiff_output : real := 0.0; begin 86/106
88 channel(3) --- relations entre tension et courant pour les entrées --- iinp == uinp/rin; iinn == uinn/rin; icm_ref == ucm_ref/rcm; ienable == uenable/renable; iref == uref/riref; -- MODELE D'UN CANAL DE MODULATION Conversion des entrées différentielles en non différentielle input == uinp-uinn; -- Multiplication de l'entrée par le signal d'hadamard correspondant (le '0' logique correspond à un -1 et le '1' à un +1) -- Entrées mises à 0 si l'enable n'est pas actif (actif à VDD) if DOMAIN = QUIESCENT_DOMAIN use input_with_hadamard == 0.0; elsif not(uenable'above((vdd-vss)/2.0)) use input_with_hadamard == 0.0; -- Mise à 0 de l'entrée elsif HAD = '1' use input_with_hadamard == input; -- Multiplication par +1 else input_with_hadamard == -input; -- Multiplication par -1 end use; -- Ajout d'un gain d'une valeur 8,34*e7 à cette valeur réduisant l'importante différence d'amplitude entre entrée et sortie du bloc de modulation input_integratorchannel == GAIN * input_with_hadamard; -- Séparation en 2 canaux contenant chacun un multiplieur, un intégrateur et un sample&hold -- Canal 1 -- Multiplieur if DOMAIN = QUIESCENT_DOMAIN use canal1_mult_out == 0.0; elsif INT_A = '1' use canal1_mult_out == VDD*input_integratorchannel; else canal1_mult_out == VSS*input_integratorchannel; end use; channel(4) - Intégrateur avec reset et saturation inférieure et supérieure if DOMAIN = QUIESCENT_DOMAIN use int1 == 0.0; elsif RST_A = '1' use int1 == VSS; else int1'dot == canal1_mult_out; end use; if int1'above(int_max) use -- Saturation positive int1_out == INT_max; -- Zone de non-saturation elsif int1'above(int_min) use int1_out == int1; else -- Saturation négative int1_out == INT_min; end use; -- Canal 2 -- Multiplieur if DOMAIN = QUIESCENT_DOMAIN use canal2_mult_out == 0.0; elsif INT_B = '1' use canal2_mult_out == VDD*input_integratorchannel; else canal2_mult_out == VSS*input_integratorchannel; end use; -- Intégrateur avec reset et saturation inférieure et supérieure if DOMAIN = QUIESCENT_DOMAIN use int2 == 0.0; elsif RST_B = '1' use int2 == VSS; else int2'dot == canal2_mult_out; end use; 87/106
89 Channel (5) if int2'above(int_max) use -- Saturation positive int2_out == INT_max; elsif int2'above(int_min) use -- Zone de non-saturation int2_out == int2; else -- Saturation négative int2_out == INT_min; end use; -- Sample and Hold de sortie du bloc de modulation process(smpl_a, SMPL_B, uenable'above((vdd-vss)/2.0)) begin if not(uenable'above((vdd-vss)/2.0)) then nondiff_output <= 0.0; -- Le canal A est sélectionné elsif SMPL_A'event and SMPL_A = '1' then nondiff_output <= int1_out; -- Le canal B est sélectionné elsif SMPL_B'event and SMPL_B = '1' then nondiff_output <= int2_out; end if; end process; if DOMAIN = QUIESCENT_DOMAIN use uoutp == 0.0; uoutn == 0.0; else -- On ajoute à la tension de mode commun la moitié de la valeur de sortie du modulateur en mode non différentiel (sortie différentielle positive) uoutp == ucm_ref + nondiff_output'ramp/2.0; -- On soustrait à la tension de mode commun la moitié de la valeur de sortie du modulateur en mode non différentiel (sortie différentielle négative) uoutn == ucm_ref - nondiff_output'ramp/2.0; end use; end architecture; 88/106
90 12.5. Code VHDL / VHDL-AMS du Convertisseur pipeline Comparateur -- Comparateur avec possibilité d'ajout d'imperfections -- entity comparator is generic ( -- Paramètres définis comme pourcentages de (VREF_P - VREF_N) -- Offset de Threshold constant THR_OFFS: real := 0.0; -- Hytérèse (>= 0.0) constant HYST: real := 0.0); port ( -- Terminaux d'entrées + et - terminal tip, tim: electrical; -- Référence de tension terminal vref_p, vref_n : electrical; -- Mot de sortie signal dout: out std_logic); end entity comparator; architecture hyst of comparator is quantity uin across tip to tim; quantity uvref_p across vref_p; quantity uvref_n across vref_n; -- Seuil du comparateur constant THRESH_EFF: real := (0.5*HYST + THR_OFFS)*(uvref_p - uvref_n); begin process variable thresh: real := THRESH_EFF; begin if uin'above(thresh) then dout <= '1'; thresh := -thresh; else dout <= '0'; thresh := thresh; end if; wait on uin'above(thresh); end process; end architecture hyst; Conversion terminaux réels en mots logiques -- Interface de conversion de terminaux en logique pour l'horloge et le nenable -- entity conv_logic is generic ( -- Résistances d'entrées clk & Enable_barre constant Rclk : real := 10.0e9; constant Rnenable : real := 10.0e9; -- Tension d'alimentation positive, partie numérique = 1.8V constant VDD : real := 1.8; -- Tension d'alimentation négative, partie numérique = 0.0V constant VSS : real := 0.0); port ( terminal clk, nenable : electrical; signal sclk, snenable : out std_logic); end entity conv_logic; architecture bhv of conv_logic is quantity uclk across iclk through clk; quantity unenable across inenable through nenable; begin iclk == uclk/rclk; inenable == unenable/rnenable; process(uclk'above((vdd-vss)/2.0)) begin if uclk'above((vdd-vss)/2.0) then sclk <= '1'; else sclk <= '0'; end if; end process; process(unenable'above((vdd-vss)/2.0)) begin if unenable'above((vdd-vss)/2.0) then snenable <= '1'; else snenable <= '0'; end if; end process; end architecture; 89/106
91 Conversion différentiel / non différentiel -- Convertit les entrées différentielles en une entrée réelle -- entity conv_modenondifferential is generic( -- Résistance d'entrée constant Rin : real := 10.0e9; constant Nbr_bits:positive:= 10; -- Borne de sortie supérieure en V du signal différentiel constant Ymax : real := 375.0e-3; -- Borne de sortie inférieure en V du signal différentiel constant Ymin : real := e-3; -- Tension d'alimentation de la partie numérique = 1.8 V constant VDD : real := GND = 0.0 V constant VSS : real := 0.0); port( -- Entrée différentielle négative terminal INN : electrical; -- Entrée différentielle positive terminal INP : electrical; -- Conversion des entrées différentielles en non différentiel terminal tout : electrical ); end entity conv_modenondifferential; architecture bhv of conv_modenondifferential is -- Intervalle de quantification (multiplié par 2 car l'entrée se fait en mode différentiel) constant q : real := 2.0*(Ymax-Ymin)/(2**real(Nbr_bits)); quantity uinn across iinn through INN; quantity uinp across iinp through INP; quantity uout across iout through tout; begin iinn == uinn/rin; iinp == uinp/rin; -- Conversion en non différentielle + ajoute d un LSB au convertisseur afin d'obtenir la valeur " " en sortie pour une valeur 0 en entrée uout == (uinp-uinn) + q; end architecture bhv; Amplificateur différentiel à gain variable -- Amplificateur différentiel à gain variable -- entity diff_amplifier is generic ( -- Facteur de gain constant GAIN : real := 0.5); port ( terminal tplus,tminus : electrical; terminal tout : electrical); end entity diff_amplifier; architecture bhv of diff_amplifier is quantity uin across tplus to tminus; quantity uout across iout through tout; begin uout == GAIN*uin; end architecture bhv; 90/106
92 Additionneur à redondance use work.demodulator_parameters.all; use work.function_package.all; -- Additionneur à redondance -- entity ovlpadd is generic ( -- Nombre d'étages du convertisseur pipeliné constant NSTAGES: positive := Nbr_bits_ADC-1; -- Nombre de bits par étage [2 pour une conversion 1,5 bits] constant NBITPST: positive := 2); port ( -- Entrée = sortie du banc de registres : vecteur de longueur NBITPST*NSTAGES signal dbin: in std_logic_vector(nstages*nbitpst-1 downto 0); -- Code de sortie de longueur NBITS signal dout: out std_logic_vector(9 downto 0)); end entity ovlpadd; architecture bhv of ovlpadd is begin process (dbin) procedure fadd2b ( variable a, b : in std_logic; variable cin : in std_logic; variable sum, co: out std_logic) is begin sum := a xor b xor cin; co := (a and b) or (a and cin) or (b and cin); end procedure fadd2b; variable vdout: std_logic_vector(dout'range); variable a, b, ci, sum, co: std_logic; variable i, j: natural; Additionneur à redondance (2) begin vdout := (others => '0'); i := 0; j := 0; while i <= NBITPST*NSTAGES-1 loop if i = 0 then vdout(0) := dbin(0); ci := '0'; i := 1; j := 1; else if i = NBITPST*NSTAGES-1 then a := '0'; else a := dbin(i+1); end if; b := dbin(i); fadd2b(a, b, ci, sum, co); vdout(j) := sum; ci := co; i := i + 2; j := j + 1; end if; end loop; dout <= vdout; end process; end architecture bhv; 91/106
93 Générateur des tensions de référence entity refgen is generic ( -- Résistance des lignes de référence constant Rdac_vref_plus : real := 10.0e9 ; constant Rdac_vcm : real := 10.0e9; constant Rdac_vref_minus : real := 10.0e9 -- Fraction de (vref_plus - vref_minus) pour calcul des threshold constant thresh0 : real := 3.0/8.0; constant thresh1 : real := 5.0/8.0); port ( -- Référence positive (entrée) terminal dac_vref_plus : electrical; -- Référence de mode commun (entrée) terminal dac_vcm : electrical; -- Référence négative (entrée) terminal dac_vref_minus: electrical; -- Référence positive pour les A/D & D/A = dac_vref_plusdac_vcm (sortie) terminal vref_p : electrical; -- Référence négative pour les A/D & D/A = dac_vref_minusdac_vcm (sortie) terminal vref_n : electrical; -- Seuils de décision pour les comparateurs des A/D (sortie) terminal tthr : electrical_vector(1 downto 0)); end entity; architecture bhv of refgen is quantity udac_vref_plus across idac_vref_plus through dac_vref_plus; quantity udac_vcm across idac_vcm through dac_vcm; quantity udac_vref_minus across idac_vref_minus through dac_vref_minus; quantity uvref_p across ivref_n through vref_p; quantity uvref_n across ivref_p through vref_n; quantity utthr across itthr through tthr; Générateur des tensions de référence (2) begin idac_vref_plus == udac_vref_plus/rdac_vref_plus; idac_vcm == udac_vcm/rdac_vcm; idac_vref_minus == udac_vref_minus/rdac_vref_minus; -- Les écarts entre udac_vref_plus/minus et udac_vcm sont multipliés par 2 car les entrées sont en différentielles => amplitude double en mode non différentiel uvref_p == 2.0*(udac_vref_plus - udac_vcm); uvref_n == 2.0*(udac_vref_minus - udac_vcm); utthr(0) == 2.0*(thresh0*((udac_vref_plus-udac_vcm)- (udac_vref_minus-udac_vcm)) + (udac_vref_minusudac_vcm)); utthr(1) == 2.0*(thresh1*((udac_vref_plus-udac_vcm)- (udac_vref_minus-udac_vcm)) + (udac_vref_minusudac_vcm)); end architecture bhv; 92/106
94 Colonne de registre pour le dernier étage -- Colonne de registre du dernier étage = 1 seul registre entity reg_slice_1 is generic ( -- Nombre de bits par étage NBPST: positive := 2); port ( signal clk, nenable: in std_logic; -- Valeurs d'entrée de la colonne de registres signal rsin : in std_logic_vector(nbpst-1 downto 0); -- Valeurs de sortie de la colonne de registres signal rsout: out std_logic_vector(nbpst-1 downto 0)); end entity reg_slice_1; architecture bhv of reg_slice_1 is begin process (clk, nenable) begin if nenable = '1' then rsout <= (others => '0'); elsif clk'event and clk = '1' then rsout <= rsin; end if; end process; end architecture bhv; Convertisseur Digital / Analogique 1,5 bits -- D/A 1,5 bits -- entity subdac_1b5 is generic ( -- Temps de transition pour l'interface D/A TT : real := 1.0e-10 ); port ( -- Entrée numérique du D/A signal din: in std_logic_vector(1 downto 0); -- Références de tension terminal vref_p, vref_n : electrical; -- Sortie analogique du D/A terminal tout: electrical); end entity subdac_1b5; architecture bhv of subdac_1b5 is signal sout : real := 0.0; quantity uvref_p across vref_p; quantity uvref_n across vref_n; quantity uout across iout through tout; begin -- Choisit en fonction du mot d entrée numérique la valeur analogique à appliquer sur la sortie process (din) begin if din = "00" then sout <= uvref_n; elsif din = "01" then sout <= (uvref_n + uvref_p)/2.0; elsif din = "11" then sout <= uvref_p; else -- Ne doit pas arriver (car code thermométrique) sout <= uvref_p; end if; end process; uout == sout'ramp(tt); end architecture bhv; 93/106
95 Colonne de registres -- Colonne de registres -- entity reg_slice is generic ( -- Numéro de l'étage considéré IST : integer :=9; -- Nombre de bits par étage NBPST: positive :=2; -- Valeur initiale des registres (lorsque l'enable_barre est à '1') Init_value : std_logic :='0'); port ( signal clk, nenable: in std_logic; -- Valeurs d'entrée de la colonne de registres signal rsin : in std_logic_vector(nbpst-1 downto 0); -- Valeurs de sortie de la colonne de registres signal rsout: out std_logic_vector(nbpst-1 downto 0)); end entity reg_slice; Colonne de registres (2) architecture bhv of reg_slice is type regint_arr is array (1 to IST-1) of std_logic_vector(rsin'range); begin process (nenable, clk) variable regint : regint_arr; -- Sert à retarder d'un coup de clk si Init_value = '1' pour resynchroniser le système à la sortie variable retard_enable : std_logic := '0'; begin if nenable = '1' then if Init_value = '1' then for i in 1 to IST-1 loop regint(i) (NBPST-1) := '1'; regint(i) (NBPST-2 downto 0) := (others => '0'); end loop; rsout(nbpst-1) <= '1'; rsout(nbpst-2 downto 0) <= (others => '0'); retard_enable := '1'; else for i in 1 to IST-1 loop regint(i) := (others => '0'); end loop; rsout <= (others => '0'); end if; elsif clk'event and clk = '1' then if retard_enable = '0' then rsout <= regint(ist-1); for j in IST-1 downto 2 loop regint(j) := regint(j-1); end loop; regint(1) := rsin; else retard_enable := '0'; end if; end if; end process; end architecture bhv; 94/106
96 Sample&hold non idéal --S&H avec imperfections modélisées sous la forme d'un filtre passe-bas du second ordre avant la sortie -- entity samplehold is generic ( -- Résistance d'entrée du S&H constant Rin : real := 10.0e9; -- Tension d'alimentation positive de la partie numérique = 1.8V constant VDD: real := 1.8; -- Tension d'alimentation négative de la partie numérique = 0.0V constant VSS: real := 0.0; -- S&H idéal si "true" constant IDEAL : boolean := true; -- Constante de temps du filtre passe-bas (si <0.0 : S&H idéal) constant TAU : real := -1.0; -- Facteur de qualité du filtre passe-bas constant QFACT: real := 0.7; -- Temps d'échantillonnage constant TT : real := 1.0e-10); port ( -- Horloge pour l'échantillonage signal clk : in std_logic; -- Signal d'enable barré signal nenable : in std_logic; -- Entrées-Sorties terminal tin, tout: electrical); end entity samplehold; Sample&hold non idéal (2) architecture lowpass of samplehold is quantity uin across iin through tin; quantity uout across iout through tout; quantity qsmpl: real; signal ssmpl: real := 0.0; begin iin == uin/rin; met dans process(clk,nenable) is begin -- Le convertisseur ne fonctionne pas si nenable = '1'. On alors la valeur de sortie au minimum possible = -750 mv notre cas if nenable = '1' then ssmpl <= ; elsif clk'event and clk = '1' then ssmpl <= uin; end if; end process; qsmpl == ssmpl'ramp(tt); if IDEAL or TAU < 0.0 use uout == qsmpl; else -- Filtre passe-bas du second ordre uout == qsmpl'ltf((0 => 1.0/abs(TAU*TAU)), (0 => 1.0/abs(TAU*TAU), 1 => 1.0/(QFACT*abs(TAU)), 2 => 1.0)); end use; end architecture lowpass; 95/106
97 Conversion code thermométrique / binaire -- Conversion code Thermométrique-code binaire -- entity th2bin is generic ( -- Conversion en mots de 2 bits (subadc flash 1.5 bit) constant NBITS : positive := 2); port ( -- Code thermométrique signal dth : in std_logic_vector(2**nbits-1 downto 0); -- Code binaire signal dbin : out std_logic_vector(nbits-1 downto 0)); end entity th2bin; architecture bhv of th2bin is begin process (dth) begin dbin <= (others => '0'); for i in 2**NBITS-1 downto 0 loop if dth(i) = '1' then dbin <= std_logic_vector(to_unsigned(i+1, dbin'length)); exit; end if; end loop; end process; end architecture bhv; Convertisseur flash A/D 1,5 bits -- Convertisseur flash A/D 1,5 bits -- entity subadc_1b5 is generic ( -- Pourcentage de (VREF_P - VREF_N) : Offset de threshold constant THR_OFFS: real := 0.0; -- Hytérèse (>= 0.0) constant HYST: real := 0.0); port ( -- Entrée analogique terminal tin : electrical; -- Référence positive & négative terminal vref_p : electrical; terminal vref_n : electrical; -- Seuils pour les comparateurs flash terminal tthr: electrical_vector(1 downto 0); -- Sortie digital signal dout: out std_logic_vector(1 downto 0)); end entity subadc_1b5; architecture str of subadc_1b5 is begin I_COMP_1: entity work.comparator(hyst) generic map ( THR_OFFS => THR_OFFS, HYST => HYST) port map ( tip => tin, tim => tthr(1), vref_p => vref_p, vref_n => vref_n, dout => dout(1)); I_COMP_0: entity work.comparator(hyst) generic map ( THR_OFFS => THR_OFFS, HYST => HYST) port map ( tip => tin, tim => tthr(0), vref_p => vref_p, vref_n => vref_n, dout => dout(0)); end architecture str; 96/106
98 Banc de registres use work.demodulator_parameters.all; use work.function_package.all; -- Banc de registres -- entity reg_bank is generic ( -- Nombre d'étages pipelinés NSTAGES: integer := Nbr_bits_ADC-1; -- Nombre de bits par étage NBITPST: integer := 2); port ( signal clk, nenable: in std_logic; -- Entrées (NBITPST*NSTAGES bits) signal rbin : in std_logic_vector(nbitpst*nstages-1 downto 0); -- Sorties (NBITPST*NSTAGES bits) signal rbout: out std_logic_vector(nbitpst*nstages-1 downto 0)); end entity reg_bank; architecture str of reg_bank is constant ist9 : integer := 9; begin -- Colonne de registres : 1er étage (9 registres) I_SLICE_9: entity work.reg_slice(bhv) generic map ( Init_value => '1', IST => ist9, NBPST => NBITPST) port map ( clk => clk, nenable => nenable, rsin => rbin(nbitpst*ist9-1 downto NBITPST*ist9-NBITPST), rsout => rbout(nbitpst*ist9-1 downto NBITPST*ist9- NBITPST)); Banc de registres (2) -- Colonnes de registres ième étage (10-i registres) GEN_I_SLICE: for i in NSTAGES-1 downto 2 generate I_SLICE_I: entity work.reg_slice(bhv) generic map ( Init_value => '0', IST => i, NBPST => NBITPST) port map ( clk => clk, nenable => nenable, rsin => rbin(nbitpst*i-1 downto NBITPST*i-NBITPST), rsout => rbout(nbitpst*i-1 downto NBITPST*i-NBITPST)); end generate GEN_I_SLICE; -- Colonne de registres du dernier étage = 1 seul registre I_SLICE_1: entity work.reg_slice_1(bhv) generic map ( NBPST => NBITPST) port map ( clk => clk, nenable => nenable, rsin => rbin(nbitpst-1 downto 0), rsout => rbout(nbitpst-1 downto 0)); end architecture str; 97/106
99 Etage du convertisseur pipeline -- Etage du convertisseur pipeliné -- entity pipestage_1b5 is generic ( -- Tension d'alimentation positive de la partie numérique = 1.8V constant VDD : real := 1.8; -- Tension d'alimentation négative de la partie numérique = 0.0V constant VSS : real := 0.0; -- sample and hold parameters: -- S&H idéal si "true" constant IDEAL : boolean := true; -- Constante de temps du filtre passe-bas (si <0.0 : S&H idéal) constant TAU : real := 1.0e-9; -- Facteur de qualité du filtre passe-bas constant QFACT: real := 0.7; -- Paramètres définis comme pourcentages de (VREF_P - VREF_N) -- Offset de threshold constant THR_OFFS: real := 0.0; -- Hytérèse (>= 0.0) constant HYST: real := 0.0); port ( -- Horloge signal clk: std_logic; -- Signal d'enable signal nenable : std_logic; -- Entrée / Sortie terminal tin, tout: electrical; -- Tension de threshold pour les comparateurs des A/D terminal tthr: electrical_vector(1 downto 0); -- Références de tension terminal vref_p, vref_n : electrical; -- Code de sortie en format binaire signal dout: out std_logic_vector(1 downto 0)); end entity pipestage_1b5; Etage du convertisseur pipeline (2) architecture str of pipestage_1b5 is -- Signal contenant la valeur '0' signal zero : std_logic := '0'; -- Sortie du convertisseur A/D (code thermométrique) signal dadco: std_logic_vector(1 downto 0); -- Sortie du convertisseur D/A terminal tdaco: electrical; -- Sortie de l'amplificateur différentiel intermédiaire terminal tdac: electrical; -- Sortie de l'amplificateur final (entrée du S&H terminal tampl: electrical; begin -- Convertisseur A/D 1,5 bit flash -- I_SUBADC: entity work.subadc_1b5(str) generic map ( THR_OFFS => THR_OFFS, HYST => HYST) port map ( tin => tin, vref_p => vref_p, vref_n => vref_n, tthr => tthr, dout(1) => dadco(1), dout(0) => dadco(0)); - Mot thermométrique à convertir en mot binaire de sortie -- I_2BIN: entity work.th2bin(bhv) generic map ( NBITS => 2) port map ( dth(3) => zero, dth(2) => zero, dth(1) => dadco(1), dth(0) => dadco(0), dbin => dout); 98/106
100 Etage du convertisseur pipeline (3) -- Calcul de la tension à envoyer sur l'étage suivant I_SUBDAC: entity work.subdac_1b5(bhv) port map ( din => dadco, vref_p => vref_p, vref_n => vref_n, tout => tdaco); I_GAIN_DAC: entity work.diff_amplifier(bhv) generic map ( GAIN => 0.5) port map ( tplus => tdaco, tminus => electrical_ref, tout => tdac); I_AMPLI: entity work.diff_amplifier(bhv) generic map ( GAIN => 2.0) port map ( tplus => tin, tminus => tdac, tout => tampl); I_SAMPLEH: entity work.samplehold(lowpass) generic map ( VDD => VDD, VSS => VSS, IDEAL => IDEAL, TAU => TAU, QFACT => QFACT) port map ( clk => clk, nenable => nenable, tin => tampl, tout => tout); end architecture str; Décodeur use work.demodulator_parameters.all; use work.function_package.all; -- Décodeur -- entity decoder is generic ( -- Nombre d'étages du convertisseur pipeliné constant NSTAGES: positive := Nbr_bits_ADC-1; -- Nombre de bits par étage [2 pour une conversion 1,5 bits] constant NBITPST: positive := 2); port ( -- Signal d'horloge signal clk: in std_logic; -- Signal d'enable_barre signal nenable : in std_logic; -- Entrées du décodeur (NBITPST*NSTAGES bits) signal din : in std_logic_vector(nbitpst*nstages-1 downto 0); -- Sorties du décodeur (Nbr_bits_ADC bits) signal dout : out std_logic_vector(nbr_bits_adc-1 downto 0)); end entity decoder; architecture bhv of decoder is signal dbout: std_logic_vector(nbitpst*nstages-1 downto 0); begin REG_BANK: entity work.reg_bank(str) generic map ( NSTAGES => NSTAGES, NBITPST => NBITPST) port map ( clk => clk, nenable => nenable, rbin => din, rbout => dbout); OVLP_ADDER: entity work.ovlpadd(bhv) generic map ( NSTAGES => NSTAGES, NBITPST => NBITPST) port map ( dbin => dbout, dout => dout); end architecture bhv; 99/106
101 Convertisseur complet use work.demodulator_parameters.all; use work.function_package.all; -- Convertisseur complet -- entity adcpipe_nb is generic ( -- Tension d'alimentation positive, partie numérique = 1.8V constant VDD : real := 1.8; -- Tension d'alimentation négative, partie numérique = 0.0V constant VSS : real := Nombre d'étages du convertisseur pipeliné constant NSTAGES: positive := Nbr_bits_ADC-1; -- Nombre de bits par étage [2 pour une conversion 1,5 bits] constant NBITPST: positive := 2; -- sample and hold parameters: -- Constante de temps du filtre passe-bas du S&H constant TAU : real := 1.0e-9; -- Facteur de qualité du filtre passe-bas du S&H constant QFACT: real := 0.7; -- Offset sur le threshold constant THR_OFFS: real := 0.0; -- Hytérèse constant HYST: real := 0.0; -- VALEURS MAXIMUMS DES SIGNAUX D'ENTREES DIFFERENTIELS -- Borne d'entrée supérieure en V du signal différentiel constant Ymax : real := 375.0e-3; -- Borne d'entrée inférieure en V du signal différentiel constant Ymin : real := e-3); port ( signal clk: in std_logic; -- Signal d'enable_barre signal nenable : in std_logic; -- Référence positive terminal dac_vref_plus : electrical; -- Référence de mode commun terminal dac_vcm : electrical; -- Référence négative terminal dac_vref_minus: electrical; -- Entrées différentielles de l'adc terminal tinp, tinn : electrical; -- Sortie de l'adc signal dout:out std_logic_vector(nbr_bits_adc-1 downto 0)); end entity adcpipe_nb; Convertisseur complet (2) architecture str of adcpipe_nb is constant THRESH_NOM: real_vector := (0 => 3.0/8.0, 1 => 5.0/8.0); -- Tensions de threshold des comparateurs terminal tthr: electrical_vector(1 downto 0); -- Entrée convertit en mode non différentiel terminal tnondiff : electrical; -- Entrée des différents étages pipelinés terminal tpstage: electrical_vector(0 to NSTAGES); -- Bits de sortie des comparateurs de chaque étage signal dpso: std_logic_vector(2*nstages-1 downto 0); -- Référence positive pour les A/D & D/A = dac_vref_plus-dac_vcm terminal vref_p : electrical; -- Référence négative pour les A/D & D/A = dac_vref_minus-dac_vcm terminal vref_n : electrical; begin -- L'entrée différentielle est traduite en non différentiel -- NON_DIFF: entity work.conv_modenondifferential(bhv) generic map ( VDD => VDD, VSS => VSS, Ymax => Ymax, Ymin => Ymin) port map ( INN => tinn, INP => tinp, tout => tnondiff); -- Echantilonnage du signal d'entrée non différentiel -- I_SAH: entity work.samplehold(lowpass) generic map ( VDD => VDD, VSS => VSS, TAU => TAU, QFACT => QFACT) port map ( clk => clk, nenable => nenable, tin => tnondiff, tout => tpstage(0)); 100/106
102 Convertisseur complet (3) -- Etages du pipeline -- GEN_STAGES: for i in 1 to NSTAGES generate I_PSTAGE: entity work.pipestage_1b5(str) generic map ( VDD => VDD, VSS => VSS, IDEAL => true, TAU => TAU, QFACT => QFACT, THR_OFFS=> THR_OFFS, HYST => HYST) port map ( clk => clk, nenable => nenable, tin => tpstage(i-1), tout => tpstage(i), tthr => tthr, vref_p => vref_p, vref_n => vref_n, dout(1) => dpso(2*(nstages-i)+1), dout(0) => dpso(2*(nstages-i))); end generate GEN_STAGES; -- Bloc de décodage -- I_DEC: entity work.decoder(bhv) generic map ( NSTAGES => NSTAGES, NBITPST => 2) port map ( clk => clk, nenable => nenable, din => dpso, dout => dout); Convertisseur complet (4) -- Génération des tensions de référence -- I_GEN: entity work.refgen(bhv) generic map ( thresh0 => THRESH_NOM(0), thresh1 => THRESH_NOM(1)) port map ( dac_vref_plus => dac_vref_plus, dac_vcm => dac_vcm, dac_vref_minus=> dac_vref_minus, vref_p => vref_p, vref_n => vref_n, tthr => tthr); end architecture str; 101/106
103 12.6. Code du système complet Comparaison sortie obtenue / sortie théorique (2) -- Conversion des entrées différentielles en non différentielle uin == uinp-uinn; -- Conversion de la sortie du système en analogique process(conv_out) variable sortie : real := 0.0; begin sortie := - ADC_max; for i in 0 to 9 loop if Conv_out(i) = '1' then sortie := sortie + (2.0**i)*(2.0*ADC_max)/2.0**10; end if; end loop; s_out <= sortie; end process; uout == s_out'ramp; -- Calcul de la sortie du système attendue si les entrées sont 2 signaux sinusoïdaux différentiels -- Gain(Sortie/Entrée) = [(150*(2**nbr_bitstocodechannels) / (freq_systeme_enmhz))]*amplitude_signal_entree_mode_nondifferentiel -- Latence = Latence(modulateur)+Latence(ADC)+Latence(demodulateur) = ( nbr_bitstocodechannels)/fréquence_channel + 1/fréquence_système = [( nbr_bitstocodechannels) * (2**nbr_bitstocodechannels) + 1]/fréquence_système if now < ((2.0**nbr_bitstocodechannels) * (10.0+real(nbr_bitstocodechannels)+1.0) + 1.0) / freq_systeme use uoutdesired == 0.0; else uoutdesired == 150*(2.0**nbr_bitstocodechannels)/(freq_systeme*1.0e-6) *(2.0*amplitude_inputsignaldiff) *sin(2.0*math_pi*freq_inputsignal*(now - ((2.0**nbr_bitstocodechannels) *(10.0+real(nbr_bitstocodechannels) +1.0) + 1.0) / freq_systeme)); end use; end architecture bce; Comparaison sortie obtenue / sortie théorique use work.demodulator_parameters.all; use work.function_package.all; -- Comparaison entre la sortie attendue et la sortie obtenue pour un signal sinusoidal en entrée -- entity comparison_input_output is generic( constant R : real := 10.0e9; -- Fréquence du système en Hz constant freq_systeme : real := 200.0e6; -- Amplitude de la sinusoide d'entrée différentielle en V constant amplitude_inputsignaldiff : real := 115.0e-3; -- Fréquence de la sinusoide d'entrée en Hz constant freq_inputsignal : real := 500.0e3; -- Plage maximum de l'adc en non différentiel constant ADC_max : real := 0.750); port( -- Entrées différentielles du système terminal INp, INn : electrical; -- Sortie binaire du système 102/106 signal Conv_out : in std_logic_vector(9 downto 0); -- Sortie du système attendue terminal OUTPUT_desired : electrical; -- Sortie du système en analogique terminal OUTPUT : electrical); end entity; architecture bce of comparison_input_output is -- Entrée du système en non différentiel terminal INPUT : electrical; quantity uinp across iinp through INp; quantity uinn across iinn through INn; quantity uin across iin through INPUT; quantity uoutdesired across ioutdesired through OUTPUT_desired; quantity uout across iout through OUTPUT; signal s_out : real := 0.0; begin iinp == uinp/r; iinn == uinn/r;
104 Convertisseur complet de Walsh-Hadamard, 4 canaux use work.demodulator_parameters.all; use work.function_package.all; -- Convertisseur Walsh-Hadamard 4 canaux -- entity whconverter_4 is generic ( -- Nombre d'étages du convertisseur pipeliné constant NSTAGES : positive := Nbr_bits_ADC-1; -- Nombre de bits par étage [2 pour une conversion 1,5 bits] constant NBITPST : positive := 2; -- Constante de temps du filtre passe-bas du S&H constant TAU : real := 1.0e-9; -- Facteur de qualité du filtre passe-bas du S&H constant QFACT: real := 0.7; -- Offset sur le threshold constant THR_OFFS: real := 0.0; -- Hytérèse constant HYST: real := 0.0; -- Borne supérieure en V du signal différentiel d'entrée des ADC constant Ymax : real := 375.0e-3; -- Borne inférieure en V du signal différentiel d'entrée des ADC constant Ymin : real := e-3; -- Tension d'alimentation positive de la partie numérique = 1.8V constant VDD : real := 1.8; -- Tension d'alimentation négative de la partie numérique = 0.0V constant VSS : real := 0.0); port ( -- Horloge d'entrée terminal clk : electrical; -- Signal d'enable terminal Enable : electrical; -- Tension de référence du mode commun utile au démodulateur terminal Modulator_cm_ref : electrical; -- Courant de référence utile au démodulateur terminal Modulator_i_ref : electrical; -- Entrée analogique positive du convertisseur de Walsh-Hadamard terminal Systeme_in_p : electrical; -- Entrée analogique négative du convertisseur de Walsh-Hadamard terminal Systeme_in_n : electrical; -- Tension de référence positive pour ADC terminal dac_vref_plus : electrical; Convertisseur complet de Walsh-Hadamard, 4 canaux (2) -- Tension de mode commun pour ADC terminal dac_vcm : electrical; -- Tension de référence négative pour ADC terminal dac_vref_minus : electrical; -- Sortie numérique du convertisseur de Walsh-Hadamard signal s_out: out std_logic_vector (Nbr_bits_ADC-1 downto 0)); end entity; architecture ass of whconverter_4 is signal sclk : std_logic; signal senable : std_logic; signal senable_b : std_logic; signal Had, Had_barre : std_logic_vector(2**nbr_bitstocodehadamard-1 downto 0); signal Int_A : std_logic; signal Int_B : std_logic; signal Rst_A : std_logic; signal Rst_B : std_logic; signal Smpl_A : std_logic; signal Smpl_B : std_logic; terminal Modulator_outp : electrical_vector(0 to Nbr_channels-1); terminal Modulator_outn : electrical_vector(0 to Nbr_channels-1); -- signal s_array_out_adc : std_logic_vector_array_in_nbits_adc; --# #E Error: Internal Error # Occurred at time 0fs # #E Error Loading Design -- On déclare donc un vecteur contenant toutes les valeurs de sortie [Nbr_channels*Nbr_bits_ADC] des ADC signal s_vector_out_adc : std_logic_vector(nbr_channels*nbr_bits_adc-1 downto 0) := (others => '0'); signal switch_clk : std_logic_vector (Nbr_bitstocodechannels-1 downto 0); -- Signal fictif utile pour l ADC fictif signal s_fictif : std_logic_vector(nbr_bits_adc-1 downto 0); begin 103/106
105 Convertisseur complet de Walsh-Hadamard, 4 canaux (3) -- Convertit l horloge analogique en binaire -- CLK2LOGIC: entity work.conv_real2logic(bhv) generic map ( VDD => VDD, VSS => VSS) port map ( clk => clk, sclk => sclk); -- Convertit l Enable analogique en binaire -- Enable2LOGIC : entity work.conv_real2logic(bhv) generic map ( VDD => VDD, VSS => VSS) port map ( clk => Enable, sclk => senable); -- Générateur d Hadamard -- HAD_GEN : entity work.hadamard_generator(bhv) port map ( rst_b => senable, clk => sclk, H_logic => Had, H_logic_barre => Had_barre); -- MODULATEUR Générateur des signaux de commande du modulateur -- PHASE_GEN : entity work.phases_generator(bhv) generic map ( VDD => VDD, VSS => VSS) port map ( HAD => Had, HADc => Had_barre, INT_A => Int_A, INT_B => Int_B, RST_A => Rst_A, RST_B => Rst_B, SMPL_A => Smpl_A, SMPL_B => Smpl_B); Convertisseur complet de Walsh-Hadamard, 4 canaux (4) -- Génération des canaux de modulation -- CHANNELS : for i in Nbr_channels downto 1 generate CHANNEL_I : entity work.channel(bhv) generic map ( VDD => VDD, VSS => VSS) port map ( INT_A => Int_A, INT_B => Int_B, RST_A => Rst_A, RST_B => Rst_B, SMPL_A => Smpl_A, SMPL_B => Smpl_B, HAD => Had(i-1), HADc => Had_barre(i-1), INP => Systeme_in_p, INN => Systeme_in_n, CM_REF => Modulator_cm_ref, CHANNEL_ENABLE => Enable, IREF_channel => Modulator_i_ref, OUTP => Modulator_outp(i-1), OUTN => Modulator_outn(i-1)); -- On doit générer 1 ADC par canal, mais cela ne peut pas être fait de manière bouclée comme pour les modulateurs car erreur (problème avec ADVance MS v4.4_1.1 qui a des problèmes avec l'indice des electrical_vector en entrée s'ils sont donnés de façon générique) -- -> # #E Error Loading Design -- Il faut donc sortir les ADC de la boucle de generate end generate CHANNELS; -- Construction du signal d Enable barre pour les ADC -- process(senable) begin senable_b <= not(senable); end process; 104/106
106 Convertisseur complet de Walsh-Hadamard, 4 canaux (5) -- Beug dans le programme de simulation : le 1er ADC que l'on crée inverse dans th2bin du 1er étage seulement tous ces bits (le bit 3 devient le 0, le 2 devient le 1, le 1 le 2 et le 0 le 3) -- On ajoute donc un ADC_fictif qui ne sert à rien, mais les ADc d'après n'auront pas cette faute (Beug avec les generate dans le modèle ADC pipeline lors de la simulation) ADC_FICTIF : entity work.adcpipe_nb(str) generic map ( VDD => VDD, VSS => VSS, NBITPST => NBITPST, TAU => TAU, QFACT => QFACT, THR_OFFS => THR_OFFS, HYST => HYST, Ymax => Ymax, Ymin => Ymin) port map ( clk => HAD(2**(Nbr_bitstocodeHadamard-2)), nenable => senable_b, dac_vref_plus => dac_vref_plus, dac_vcm => dac_vcm, dac_vref_minus => dac_vref_minus, tinp => Modulator_outp(0), tinn => Modulator_outn(0), dout => s_fictif); Convertisseur complet de Walsh-Hadamard, 4 canaux (6) -- ADC du canal 1 -- ADC_1 : entity work.adcpipe_nb(str) generic map ( VDD => VDD, VSS => VSS, NBITPST => NBITPST, TAU => TAU, QFACT => QFACT, THR_OFFS => THR_OFFS, HYST => HYST, Ymax => Ymax, Ymin => Ymin) port map ( clk => HAD(2**(Nbr_bitstocodeHadamard-2)), nenable => senable_b, dac_vref_plus => dac_vref_plus, dac_vcm => dac_vcm, dac_vref_minus => dac_vref_minus, tinp => Modulator_outp(0), tinn => Modulator_outn(0), dout => s_vector_out_adc(nbr_bits_adc-1 downto 0)); -- ADC du canal 2 -- ADC_2 : entity work.adcpipe_nb(str) generic map ( VDD => VDD, VSS => VSS, NBITPST => NBITPST, TAU => TAU, QFACT => QFACT, THR_OFFS => THR_OFFS, HYST => HYST, Ymax => Ymax, Ymin => Ymin) port map ( clk => HAD(2**(Nbr_bitstocodeHadamard-2)), nenable => senable_b, dac_vref_plus => dac_vref_plus, dac_vcm => dac_vcm, dac_vref_minus => dac_vref_minus, tinp => Modulator_outp(1), tinn => Modulator_outn(1), dout => s_vector_out_adc(2*nbr_bits_adc-1 downto Nbr_bits_ADC)); 105/106
107 Convertisseur complet de Walsh-Hadamard, 4 canaux (7) ADC_3 : entity work.adcpipe_nb(str) -- ADC du canal 3 -- generic map ( VDD => VDD, VSS => VSS, NBITPST => NBITPST, TAU => TAU, QFACT => QFACT, THR_OFFS => THR_OFFS, HYST => HYST, Ymax => Ymax, Ymin => Ymin) port map ( clk => HAD(2**(Nbr_bitstocodeHadamard-2)), nenable => senable_b, dac_vref_plus => dac_vref_plus, dac_vcm => dac_vcm, dac_vref_minus => dac_vref_minus, tinp => Modulator_outp(2), tinn => Modulator_outn(2), dout => s_vector_out_adc(3*nbr_bits_adc-1 downto 2*Nbr_bits_ADC)); ADC_4 : entity work.adcpipe_nb(str) -- ADC du canal 4 -- generic map ( VDD => VDD, VSS => VSS, NBITPST => NBITPST, TAU => TAU, QFACT => QFACT, THR_OFFS => THR_OFFS, HYST => HYST, Ymax => Ymax, Ymin => Ymin) port map ( clk => HAD(2**(Nbr_bitstocodeHadamard-2)), nenable => senable_b, dac_vref_plus => dac_vref_plus, dac_vcm => dac_vcm, dac_vref_minus => dac_vref_minus, tinp => Modulator_outp(3), tinn => Modulator_outn(3), dout => s_vector_out_adc(4*nbr_bits_adc-1 downto 3*Nbr_bits_ADC)); Convertisseur complet de Walsh-Hadamard, 4 canaux (8) -- Génération des signaux de contrôle des switches de sortie du démodulateur process(had) begin for i in Nbr_bitstocodechannels-1 downto 0 loop switch_clk(i) <= Had(2**i); end loop; end process; -- ADVance MS ne comprend pas le signal d'entrée de type s_array_in -- Un démodulateur identique à celui développé mais prenant un vecteur comme entrée et non un tableau de vecteurs a donc été défini DEMODUL : entity work.demodulator_ams(bhv) port map ( clk_system => sclk, rst_b => senable, clk_add => HAD(2**(Nbr_bitstocodeHadamard-2)), switch_clk => switch_clk, s_vector_in => s_vector_out_adc(nbr_channels*nbr_bits_adc-1 downto 0), s_out => s_out); end architecture ass; 106/106
INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE
INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE Le schéma synoptique ci-dessous décrit les différentes étapes du traitement numérique
Étude des Corrélations entre Paramètres Statiques et Dynamiques des Convertisseurs Analogique-Numérique en vue d optimiser leur Flot de Test
11 juillet 2003 Étude des Corrélations entre Paramètres Statiques et Dynamiques des Convertisseurs Analogique-Numérique en vue d optimiser leur Flot de Test Mariane Comte Plan 2 Introduction et objectif
V- Manipulations de nombres en binaire
1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,
Transmission de données. A) Principaux éléments intervenant dans la transmission
Page 1 / 7 A) Principaux éléments intervenant dans la transmission A.1 Equipement voisins Ordinateur ou terminal Ordinateur ou terminal Canal de transmission ETTD ETTD ETTD : Equipement Terminal de Traitement
Transmission d informations sur le réseau électrique
Transmission d informations sur le réseau électrique Introduction Remarques Toutes les questions en italique devront être préparées par écrit avant la séance du TP. Les préparations seront ramassées en
La conversion de données : Convertisseur Analogique Numérique (CAN) Convertisseur Numérique Analogique (CNA)
La conversion de données : Convertisseur Analogique Numérique (CAN) Convertisseur Numérique Analogique (CNA) I. L'intérêt de la conversion de données, problèmes et définitions associés. I.1. Définitions:
Chap17 - CORRECTİON DES EXERCİCES
Chap17 - CORRECTİON DES EXERCİCES n 3 p528 Le signal a est numérique : il n y a que deux valeurs possibles pour la tension. Le signal b n est pas numérique : il y a alternance entre des signaux divers
Chapitre 18 : Transmettre et stocker de l information
Chapitre 18 : Transmettre et stocker de l information Connaissances et compétences : - Identifier les éléments d une chaîne de transmission d informations. - Recueillir et exploiter des informations concernant
Numérisation du signal
Chapitre 12 Sciences Physiques - BTS Numérisation du signal 1 Analogique - Numérique. 1.1 Définitions. Signal analogique : un signal analogique s a (t)est un signal continu dont la valeur varie en fonction
Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot
Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,
Chaine de transmission
Chaine de transmission Chaine de transmission 1. analogiques à l origine 2. convertis en signaux binaires Échantillonnage + quantification + codage 3. brassage des signaux binaires Multiplexage 4. séparation
EMETTEUR ULB. Architectures & circuits. Ecole ULB GDRO ESISAR - Valence 23-27/10/2006. David MARCHALAND STMicroelectronics 26/10/2006
EMETTEUR ULB Architectures & circuits David MARCHALAND STMicroelectronics 26/10/2006 Ecole ULB GDRO ESISAR - Valence 23-27/10/2006 Introduction Emergence des applications de type LR-WPAN : Dispositif communicant
TP Modulation Démodulation BPSK
I- INTRODUCTION : TP Modulation Démodulation BPSK La modulation BPSK est une modulation de phase (Phase Shift Keying = saut discret de phase) par signal numérique binaire (Binary). La phase d une porteuse
Systèmes de transmission
Systèmes de transmission Conception d une transmission série FABRE Maxime 2012 Introduction La transmission de données désigne le transport de quelque sorte d'information que ce soit, d'un endroit à un
VIII- Circuits séquentiels. Mémoires
1 VIII- Circuits séquentiels. Mémoires Maintenant le temps va intervenir. Nous avions déjà indiqué que la traversée d une porte ne se faisait pas instantanément et qu il fallait en tenir compte, notamment
Chapitre 13 Numérisation de l information
DERNIÈRE IMPRESSION LE 2 septembre 2013 à 17:33 Chapitre 13 Numérisation de l information Table des matières 1 Transmission des informations 2 2 La numérisation 2 2.1 L échantillonage..............................
Représentation des Nombres
Chapitre 5 Représentation des Nombres 5. Representation des entiers 5.. Principe des représentations en base b Base L entier écrit 344 correspond a 3 mille + 4 cent + dix + 4. Plus généralement a n a n...
UE 503 L3 MIAGE. Initiation Réseau et Programmation Web La couche physique. A. Belaïd
UE 503 L3 MIAGE Initiation Réseau et Programmation Web La couche physique A. Belaïd [email protected] http://www.loria.fr/~abelaid/ Année Universitaire 2011/2012 2 Le Modèle OSI La couche physique ou le
J AUVRAY Systèmes Electroniques TRANSMISSION DES SIGNAUX NUMERIQUES : SIGNAUX EN BANDE DE BASE
RANSMISSION DES SIGNAUX NUMERIQUES : SIGNAUX EN BANDE DE BASE Un message numérique est une suite de nombres que l on considérera dans un premier temps comme indépendants.ils sont codés le plus souvent
Chapitre 2 : communications numériques.
Chapitre 2 : communications numériques. 1) généralités sur les communications numériques. A) production d'un signal numérique : transformation d'un signal analogique en une suite d'éléments binaires notés
ELP 304 : Électronique Numérique. Cours 1 Introduction
ELP 304 : Électronique Numérique Cours 1 Introduction Catherine Douillard Dépt Électronique Les systèmes numériques : généralités (I) En électronique numérique, le codage des informations utilise deux
Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.
Logique binaire I. L'algèbre de Boole L'algèbre de Boole est la partie des mathématiques, de la logique et de l'électronique qui s'intéresse aux opérations et aux fonctions sur les variables logiques.
Régler les paramètres de mesure en choisissant un intervalle de mesure 10µs et 200 mesures.
TP Conversion analogique numérique Les machines numériques qui nous entourent ne peuvent, du fait de leur structure, que gérer des objets s composés de 0 et de. Une des étapes fondamentale de l'interaction
Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté
Compétences travaillées : Mettre en œuvre un protocole expérimental Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique
Cours 9. Régimes du transistor MOS
Cours 9. Régimes du transistor MOS Par Dimitri galayko Unité d enseignement Élec-info pour master ACSI à l UPMC Octobre-décembre 005 Dans ce document le transistor MOS est traité comme un composant électronique.
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits
Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice
ISO/CEI 11172-3 NORME INTERNATIONALE
NORME INTERNATIONALE ISO/CEI 11172-3 Première édition 1993-08-01 Technologies de l information - Codage de l image animée et du son associé pour les supports de stockage numérique jusqu à environ Ii5 Mbit/s
Cours d électricité. Circuits électriques en courant constant. Mathieu Bardoux. 1 re année
Cours d électricité Circuits électriques en courant constant Mathieu Bardoux [email protected] IUT Saint-Omer / Dunkerque Département Génie Thermique et Énergie 1 re année Objectifs du chapitre
Université de La Rochelle. Réseaux TD n 6
Réseaux TD n 6 Rappels : Théorème de Nyquist (ligne non bruitée) : Dmax = 2H log 2 V Théorème de Shannon (ligne bruitée) : C = H log 2 (1+ S/B) Relation entre débit binaire et rapidité de modulation :
CAPTEURS - CHAINES DE MESURES
CAPTEURS - CHAINES DE MESURES Pierre BONNET Pierre Bonnet Master GSI - Capteurs Chaînes de Mesures 1 Plan du Cours Propriétés générales des capteurs Notion de mesure Notion de capteur: principes, classes,
LES CARACTERISTIQUES DES SUPPORTS DE TRANSMISSION
LES CARACTERISTIQUES DES SUPPORTS DE TRANSMISSION LES CARACTERISTIQUES DES SUPPORTS DE TRANSMISSION ) Caractéristiques techniques des supports. L infrastructure d un réseau, la qualité de service offerte,
QUESTION 1 {2 points}
ELE4301 Systèmes logiques II Page 1 de 8 QUESTION 1 {2 points} En se servant de paramètres électriques donnés dans le Tableau 1 ci-dessous, on désire déterminer la fréquence d opération du compteur présenté
I- Définitions des signaux.
101011011100 010110101010 101110101101 100101010101 Du compact-disc, au DVD, en passant par l appareil photo numérique, le scanner, et télévision numérique, le numérique a fait une entrée progressive mais
Filtres passe-bas. On utilise les filtres passe-bas pour réduire l amplitude des composantes de fréquences supérieures à la celle de la coupure.
Filtres passe-bas Ce court document expose les principes des filtres passe-bas, leurs caractéristiques en fréquence et leurs principales topologies. Les éléments de contenu sont : Définition du filtre
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE Sommaire 1. Présentation 2. Exemple d apprentissage 3. Lexique de termes anglais 4. Reconnaître les composants 5. Rendre Arduino autonome 6. Les signaux d entrée
P1PY7204 Acquisition de données Cours
ANNEE 2012-2013 Semestre d Automne 2012 Master de Sciences, Technologies, Santé Mention Physique- Spécialité Instrumentation P1PY7204 Acquisition de données Cours Denis Dumora [email protected]
LES DIFFÉRENTS FORMATS AUDIO NUMÉRIQUES
LES DIFFÉRENTS FORMATS AUDIO NUMÉRIQUES Compétences mises en jeu durant l'activité : Compétences générales : S'impliquer, être autonome. Compétence(s) spécifique(s) : Reconnaître des signaux de nature
Les portes logiques. Voici les symboles des trois fonctions de base. Portes AND. Portes OR. Porte NOT
Les portes logiques Nous avons jusqu ici utilisé des boutons poussoirs et une lampe pour illustrer le fonctionnement des opérateurs logiques. En électronique digitale, les opérations logiques sont effectuées
LES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Partie Agir : Défis du XXI ème siècle CHAP 20-ACT EXP Convertisseur Analogique Numérique (CAN)
1/5 Partie Agir : Défis du XXI ème siècle CHAP 20-ACT EXP Convertisseur Analogique Numérique (CAN) Objectifs : Reconnaître des signaux de nature analogique et des signaux de nature numérique Mettre en
Projet audio. Analyse des Signaux ELE2700
ÉCOLE POLYTECHNIQUE DE MONTRÉAL Département de Génie Électrique Projet audio Analyse des Signaux ELE2700 Saad Chidami - 2014 Table des matières Objectif du laboratoire... 4 Caractérisation du bruit...
GPA770 Microélectronique appliquée Exercices série A
GPA770 Microélectronique appliquée Exercices série A 1. Effectuez les calculs suivants sur des nombres binaires en complément à avec une représentation de 8 bits. Est-ce qu il y a débordement en complément
Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application
Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un
Les techniques de multiplexage
Les techniques de multiplexage 1 Le multiplexage et démultiplexage En effet, à partir du moment où plusieurs utilisateurs se partagent un seul support de transmission, il est nécessaire de définir le principe
LÕenregistrement. 10.1 Enregistrement analogique et enregistrement numžrique
10 LÕenregistrement numžrique 10.1 Enregistrement analogique et enregistrement numžrique Tout processus d enregistrement, comme nous l avons vu dans les chapitres précédents, débute par la conversion des
1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :
GIF-3002 SMI et Architecture du microprocesseur Ce cours discute de l impact du design du microprocesseur sur le système entier. Il présente d abord l architecture du cœur ARM Cortex M3. Ensuite, le cours
Electron S.R.L. - MERLINO - MILAN ITALIE Tel (++ 39 02) 90659200 Fax 90659180 Web www.electron.it, e-mail [email protected]
Electron S.R.L. Design Production & Trading of Educational Equipment B3510--II APPLIICATIIONS DE TRANSDUCTEURS A ULTRASONS MANUEL D IINSTRUCTIIONS POUR L ETUDIIANT Electron S.R.L. - MERLINO - MILAN ITALIE
Equipement. électronique
MASTER ISIC Les générateurs de fonctions 1 1. Avant-propos C est avec l oscilloscope, le multimètre et l alimentation stabilisée, l appareil le plus répandu en laboratoire. BUT: Fournir des signau électriques
Systèmes de communications numériques 2
Systèmes de Communications Numériques Philippe Ciuciu, Christophe Vignat Laboratoire des Signaux et Systèmes CNRS SUPÉLEC UPS SUPÉLEC, Plateau de Moulon, 91192 Gif-sur-Yvette [email protected] Université
Fonctions de plusieurs variables
Module : Analyse 03 Chapitre 00 : Fonctions de plusieurs variables Généralités et Rappels des notions topologiques dans : Qu est- ce que?: Mathématiquement, n étant un entier non nul, on définit comme
Informatique Générale
Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) [email protected] Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html
Conversion d un entier. Méthode par soustraction
Conversion entre bases Pour passer d un nombre en base b à un nombre en base 10, on utilise l écriture polynomiale décrite précédemment. Pour passer d un nombre en base 10 à un nombre en base b, on peut
Représentation d un entier en base b
Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir
Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.
Promotion X 004 COURS D ANALYSE DES STRUCTURES MÉCANIQUES PAR LA MÉTHODE DES ELEMENTS FINIS (MEC 568) contrôle non classant (7 mars 007, heures) Documents autorisés : polycopié ; documents et notes de
Expérience 3 Formats de signalisation binaire
Expérience 3 Formats de signalisation binaire Introduction Procédures Effectuez les commandes suivantes: >> xhost nat >> rlogin nat >> setenv DISPLAY machine:0 >> setenv MATLABPATH /gel/usr/telecom/comm_tbx
DimNet Gradateurs Numériques Evolués Compulite. CompuDim 2000
DimNet Gradateurs Numériques Evolués Compulite La gamme des gradateurs Compulite est conçue autour des technologies les plus récentes et les plus évoluées que ces 20 dernières années ont vu apparaître.
- Instrumentation numérique -
- Instrumentation numérique - I.Présentation du signal numérique. I.1. Définition des différents types de signaux. Signal analogique: Un signal analogique a son amplitude qui varie de façon continue au
Eléments constitutifs et synthèse des convertisseurs statiques. Convertisseur statique CVS. K à séquences convenables. Source d'entrée S1
1 Introduction Un convertisseur statique est un montage utilisant des interrupteurs à semiconducteurs permettant par une commande convenable de ces derniers de régler un transfert d énergie entre une source
SUIVI CINETIQUE PAR SPECTROPHOTOMETRIE (CORRECTION)
Terminale S CHIMIE TP n 2b (correction) 1 SUIVI CINETIQUE PAR SPECTROPHOTOMETRIE (CORRECTION) Objectifs : Déterminer l évolution de la vitesse de réaction par une méthode physique. Relier l absorbance
ÉVALUATION FORMATIVE. On considère le circuit électrique RC représenté ci-dessous où R et C sont des constantes strictement positives.
L G L G Prof. Éric J.M.DELHEZ ANALYSE MATHÉMATIQUE ÉALUATION FORMATIE Novembre 211 Ce test vous est proposé pour vous permettre de faire le point sur votre compréhension du cours d Analyse Mathématique.
CHAPITRE V. Théorie de l échantillonnage et de la quantification
CHAPITRE V Théorie de l échantillonnage et de la quantification Olivier FRANÇAIS, SOMMAIRE I INTRODUCTION... 3 II THÉORIE DE L ÉCHANTILLONNAGE... 3 II. ACQUISITION DES SIGNAUX... 3 II. MODÉLISATION DE
ECTS INFORMATIQUE ET RESEAUX POUR L INDUSTRIE ET LES SERVICES TECHNIQUES
ECTS INFORMATIQUE ET RESEAUX POUR L INDUSTRIE ET LES SERVICES TECHNIQUES CHAPITRES PAGES I DEFINITION 3 II CONTEXTE PROFESSIONNEL 3 HORAIRE HEBDOMADAIRE 1 er ET 2 ème ANNEE 4 FRANÇAIS 4 ANGLAIS 5 MATHEMATIQUES
TP 7 : oscillateur de torsion
TP 7 : oscillateur de torsion Objectif : étude des oscillations libres et forcées d un pendule de torsion 1 Principe général 1.1 Définition Un pendule de torsion est constitué par un fil large (métallique)
PlantVisorPRO. Supervision d installations. Manuel rapide. Integrated Control Solutions & Energy Savings
PlantVisorPRO Supervision d installations Manuel rapide Integrated Control Solutions & Energy Savings +040000082 ver. 2.0 14/09/2010 2 Indice PlantVisorPRO 1 1. IntroduCTION 5 7. PersonNALISER L INTERFACE
0 20mV; 0 40mV; 0 80mV; 0 160mV; 0 320mV; 0 640mV; 0 1,28V; 0 2,56V 0 5V; 0 10V
ITM carte d entrèes analogues INTERFACES DE PROCES La carte ITM a 8 isolées entrées analogiques, chaque canal a un 16 bit A/N convertisseurs, avec une haute stabilité et une très haute rapport de réjection
Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN
Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN Table des matières. Introduction....3 Mesures et incertitudes en sciences physiques
I. TRANSMISSION DE DONNEES
TD I. TRANSMISSION DE DONNEES 1. QU'EST-CE QU'UN CANAL DE TRANSMISSION? 1.1 Rappels Une ligne de transmission est une liaison entre les deux machines. On désigne généralement par le terme émetteur la machine
TS 35 Numériser. Activité introductive - Exercice et démarche expérimentale en fin d activité Notions et contenus du programme de Terminale S
FICHE Fiche à destination des enseignants TS 35 Numériser Type d'activité Activité introductive - Exercice et démarche expérimentale en fin d activité Notions et contenus du programme de Terminale S Compétences
Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2
éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........
Technique de codage des formes d'ondes
Technique de codage des formes d'ondes Contenu Introduction Conditions préalables Conditions requises Composants utilisés Conventions Modulation par impulsions et codage Filtrage Échantillon Numérisez
ASR1 TD7 : Un microprocesseur RISC 16 bits
{Â Ö Ñ º ØÖ Ý,È ØÖ ºÄÓ Ù,Æ ÓÐ ºÎ ÝÖ Ø¹ ÖÚ ÐÐÓÒ} Ò ¹ÐÝÓÒº Ö ØØÔ»»Ô Ö Óº Ò ¹ÐÝÓÒº Ö» Ö Ñ º ØÖ Ý»¼ Ö½» ASR1 TD7 : Un microprocesseur RISC 16 bits 13, 20 et 27 novembre 2006 Présentation générale On choisit
G.P. DNS02 Septembre 2012. Réfraction...1 I.Préliminaires...1 II.Première partie...1 III.Deuxième partie...3. Réfraction
DNS Sujet Réfraction...1 I.Préliminaires...1 II.Première partie...1 III.Deuxième partie...3 Réfraction I. Préliminaires 1. Rappeler la valeur et l'unité de la perméabilité magnétique du vide µ 0. Donner
Chapitre 22 : (Cours) Numérisation, transmission, et stockage de l information
Chapitre 22 : (Cours) Numérisation, transmission, et stockage de l information I. Nature du signal I.1. Définition Un signal est la représentation physique d une information (température, pression, absorbance,
UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.
UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases
Convertisseurs statiques d'énergie électrique
Convertisseurs statiques d'énergie électrique I. Pourquoi des convertisseurs d'énergie électrique? L'énergie électrique utilisée dans l'industrie et chez les particuliers provient principalement du réseau
LA COUCHE PHYSIQUE EST LA COUCHE par laquelle l information est effectivemnt transmise.
M Informatique Réseaux Cours bis Couche Physique Notes de Cours LA COUCHE PHYSIQUE EST LA COUCHE par laquelle l information est effectivemnt transmise. Les technologies utilisées sont celles du traitement
Fiche technique CPU 314SC/DPM (314-6CG13)
Fiche technique CPU 314SC/DPM (3146CG13) Données techniques N de commande 3146CG13 Type CPU 314SC/DPM Information générale Note Caractéristiques SPEEDBus Technologie SPEED7 24 x DI, 16 x DO, 8 x DIO, 4
Continuité et dérivabilité d une fonction
DERNIÈRE IMPRESSIN LE 7 novembre 014 à 10:3 Continuité et dérivabilité d une fonction Table des matières 1 Continuité d une fonction 1.1 Limite finie en un point.......................... 1. Continuité
Contribution à la conception par la simulation en électronique de puissance : application à l onduleur basse tension
Contribution à la conception par la simulation en électronique de puissance : application à l onduleur basse tension Cyril BUTTAY CEGELY VALEO 30 novembre 2004 Cyril BUTTAY Contribution à la conception
Réseau Global MIDI Note applicative
Réseau Global MIDI Note applicative 1 But du manuel Le but de cette note applicative est de démystifié l utilisation du MIDI transporté dans un Réseau Global MIDI. Ce réseau virtuel offre sans aucune restriction,
Conception des systèmes répartis
Conception des systèmes répartis Principes et concepts Gérard Padiou Département Informatique et Mathématiques appliquées ENSEEIHT Octobre 2012 Gérard Padiou Conception des systèmes répartis 1 / 37 plan
Information. BASES LITTERAIRES Etre capable de répondre à une question du type «la valeur trouvée respecte t-elle le cahier des charges?
Compétences générales Avoir des piles neuves, ou récentes dans sa machine à calculer. Etre capable de retrouver instantanément une info dans sa machine. Prendre une bouteille d eau. Prendre CNI + convocation.
Théorie et Codage de l Information (IF01) exercices 2013-2014. Paul Honeine Université de technologie de Troyes France
Théorie et Codage de l Information (IF01) exercices 2013-2014 Paul Honeine Université de technologie de Troyes France TD-1 Rappels de calculs de probabilités Exercice 1. On dispose d un jeu de 52 cartes
! analyse du fonctionnement
Coloreau chaude MT V P1 V MT! Le composant repéré TH1 sur le schéma structurel et une thermistance. Son rôle est de détecter une grandeur physique la température, et de la convertir en une grandeur électrique
SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique
SOCLE COMMUN - La Compétence 3 Les principaux éléments de mathématiques et la culture scientifique et technologique DOMAINE P3.C3.D1. Pratiquer une démarche scientifique et technologique, résoudre des
ANALYSE TRAMEs LIAISON SERIE
ANALYSE TRAMEs LIAISON SERIE 1 Objectifs de ce travail Nous allons étudier dynamiquement la liaison série en utilisant la simulation. La mise en œuvre des liaisons séries simulées et de TestCom est expliquée
EP 2 339 758 A1 (19) (11) EP 2 339 758 A1 (12) DEMANDE DE BREVET EUROPEEN. (43) Date de publication: 29.06.2011 Bulletin 2011/26
(19) (12) DEMANDE DE BREVET EUROPEEN (11) EP 2 339 758 A1 (43) Date de publication: 29.06.2011 Bulletin 2011/26 (21) Numéro de dépôt: 09179459.4 (51) Int Cl.: H04B 1/69 (2011.01) H03K 5/08 (2006.01) H03K
Extrait des Exploitations Pédagogiques
Pédagogiques Module : Compétitivité et créativité CI Première : Compétitivité et créativité CI institutionnel : Développement durable et compétitivité des produits Support : Robot - O : Caractériser les
Intérêt du découpage en sous-bandes pour l analyse spectrale
Intérêt du découpage en sous-bandes pour l analyse spectrale David BONACCI Institut National Polytechnique de Toulouse (INP) École Nationale Supérieure d Électrotechnique, d Électronique, d Informatique,
TD : Codage des images
TD : Codage des images Les navigateurs Web (Netscape, IE, Mozilla ) prennent en charge les contenus textuels (au format HTML) ainsi que les images fixes (GIF, JPG, PNG) ou animée (GIF animée). Comment
Les indices à surplus constant
Les indices à surplus constant Une tentative de généralisation des indices à utilité constante On cherche ici en s inspirant des indices à utilité constante à définir un indice de prix de référence adapté
Electron S.R.L. SERIE B46 - SYSTEMES DIDACTIQUES DE TELEPHONIE
Electron S.R.L. Design Production & Trading of Educational Equipment SERIE B46 - SYSTEMES DIDACTIQUES DE TELEPHONIE Specifications may change without notic Page 1 of 9 File BROCHURE B46xx B4610 UNITE DIDACTIQUE
document proposé sur le site «Sciences Physiques en BTS» : http://nicole.cortial.net BTS AVA 2015
BT V 2015 (envoyé par Frédéric COTTI - Professeur d Electrotechnique au Lycée Régional La Floride Marseille) Document 1 - Etiquette énergie Partie 1 : Voiture à faible consommation - Une étiquette pour
SYSTEME DE PALPAGE A TRANSMISSION RADIO ETUDE DU RECEPTEUR (MI16) DOSSIER DE PRESENTATION. Contenu du dossier :
SYSTEME DE PALPAGE A TRANSMISSION RADIO ETUDE DU RECEPTEUR (MI16) DOSSIER DE PRESENTATION Contenu du dossier : 1. PRESENTATION DU SYSTEME DE PALPAGE A TRANSMISSION RADIO....1 1.1. DESCRIPTION DU FABRICANT....1
Projet de synthèse de l'électronique analogique : réalisation d'une balance à jauges de contrainte
J3eA, Journal sur l enseignement des sciences et technologies de l information et des systèmes, Volume 4, HorsSérie 2, 20 (2005) DOI : http://dx.doi.org/10.1051/bibj3ea:2005720 EDP Sciences, 2005 Projet
MEMOIRES MAGNETIQUES A DISQUES RIGIDES
MEMOIRES MAGNETIQUES A DISQUES RIGIDES PARTIE ELECTRONIQUE Le schéma complet de FP5 est donnée en annexe. Les questions porterons sur la fonction FP5 dont le schéma fonctionnel de degré 2 est présenté
Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques
Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques CTIA04 Page 1 1. Les types de données sous S7 300 Il existe plusieurs types de données utilisées pour la programmation
TD1 Signaux, énergie et puissance, signaux aléatoires
TD1 Signaux, énergie et puissance, signaux aléatoires I ) Ecrire l'expression analytique des signaux représentés sur les figures suivantes à l'aide de signaux particuliers. Dans le cas du signal y(t) trouver
