Mise au point de systèmes mixtes et évaluation de puissance : Un exemple d’application Anne-Marie TRULLEMANSANCKAERT FTFC’03 UCL-DICE, Place du Levant 3, B-1348 Louvain-la-Neuve, Belgium, [email protected], http://www.ucl.ac.be~anmarie points de l’exposé introduction présentation de l’application modélisation et simulation des éléments fondamentaux – simulations globales – système de couplage, génération et émission, récupération et décodage transfert de données, variations du couplage, modélisation de puissance conclusions introduction outils de simulation de systèmes complexes : – simulation digitale : VHDL et Verilog – simulation analogique : Spice, Eldo ... – hiérarchie et modularité, du comportemental aux portes logiques dispositifs physiques, précision ... simulation mixte : VHDL-AMS ? un système comme exemple : – la prothèse visuelle OPTIVIP IST-2000-25145 Prof. Charles Trullemans http://www.dice.ucl.ac.be/optivip/ la prothèse visuelle MIVIP-OPTIVIP Aim of the project : optimization of an implantable visual prosthesis based on the stimulation of the optic nerve and its demonstration within a pre-clinical study transformateur à couplage variable processeur interne processeur externe les composants de la transmission schéma-bloc du système peau données à envoyer codage Manchester récupération d’alimentation et démodulateur VCO extérieur driver classe DE intérieur transformateur à couplage variable données reçues transmission de puissance (alim) et de données I1 N1 N2 extérieur V1+ lien inductif I2 R2 L2 R1 L1 V2+ intérieur K entity transfoCT is generic (L1 : real := 1.0e-6; R1 : real := 0.0; L2 : real := 1.0e-6; R2 : real := 0.0; K : real := 0.15); port (terminal P1, P0, S1, S0 : electrical); end transfoCT; VHDL-AMS transformateur à couplage variable (faible) : 0.2 à 0.12 architecture bhv of transfoCT is quantity M : real := K * sqrt(L1*L2); quantity V1 across I1 through P1 to P0; quantity V2 across I2 through S1 to S0; begin -- bhv M == K * sqrt(L1*L2); V1 == L1 * I1'dot + M * I2'dot + R1 * I1; V2 == M * I1'dot + L2 * I2'dot + R2 * I2; end bhv; données : codage Manchester et modulation FSK • 2 fréquences autour de 12 MHz • 2 cycles pour chaque fréquence • transformateur doublement accordé 10.8 MHz et 13.2 MHz • génération par un VCO • modification de l’accord primaire pour chaque fréquence • pas de modification au secondaire les données 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 Synchro 0 1 S 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Setup S 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 Data S Gap S 40 41 42 43 44 45 46 47 0 0 0 0 0 0 1 48 49 50 51 52 53 54 55 56 57 58 59 60 R Header val_meas : sélection de la mesure de tension de sortie des sources ou de tension d'alimentation Parité Gap (10 bits) Synchro8 : mode de stimulation (directe ou synchrone) ack_act : activation d'accusé de réception en retour maes_act : activation mesure de tension de sortie des sources et de tension d'alimentation rec_amp_setup : amplitude pulse de récupération timeout_act : activation du système de timeout timeout : valeur du timeout Commandes pour 4 sources de courant R Sélection des mesures à renvoyer par backchannel S Master/Slave multichip : fonctionnement multichip reserved : réservé au mode test Sélection sources de courant paires ou impaires • différents types de trames : • synchro • setup • données • ... • codage en vecteurs de 64 bits • transmission continue 61 62 63 processeur externe et codage Manchester entity ClockData is port(signal F0, FDel, Vin_a,Vin_b,Vpar_a,Vpar_b : out bit); end ClockData; lecture des données : pas de possibilités actuellement de lecture en fichier ... VHDL comportemental MyControl : lecture données et VCO FO FDel Vin_a Vin_b Vpar_a Vpar_b constant Data_to_send : bit_vector := B"010001111011111110111 ... 11000000"; -- stocké en vecteur de bits if FDClock'event and FDClock = '1' then Data_read <= Data_to_send(IData); if IData < Data_to_send'high then IData := IData + 1; else ... fréquences et formes d’onde du VCO constant F1 : real := 10.8e6; -- fmin constant TF1 : time := real2time(0.5/F1); -- largeur pulse L constant F2 : real := 13.2e6; -- fmax constant TF2 : time := real2time(0.5/F2); -- largeur pulse S constant TFD : time := real2time(1.0/F1 + 1.0/F2); -- pulse lecture data horloge de lecture des données formes d’onde selon données Gen_FD: process (FDClock) if Active='1' then FDClock <= transport not FDClock after TFD; end if; end process Gen_FD; ... VHDL comportemental fréquences f1 et f2 VCO: Process (FDClock) begin ... if Data_to_send(IData)='0' then DM <= transport '1', '0' after a4; F0Clock <= transport ‘1’, ‘0’ after ... else DM <= transport '0', '1' after b4; F0Clock <= transport '1', '0' after ...; end if; ... end process VCO; génération des signaux de contrôle synchronisés commande du driver DE F0clock commande du commutateur de capacités Delclock DM Vpar_b VHDL Vpar_a Vin_a Vin_b DelClock <= transport F0clock after DeadTime; Vin_a <= F0clock and DelClock; Vin_b <= F0clock or DelClock; F0clock Latch: process (F0clock, DM) begin if F0clock='0' then Vpar_b <= not DM; else Vpar_a <= DM; end if; end process Latch; les signaux générés lecture des données commande du driver commutation capa circuit d’émission : driver classe DE Vee driver DE PMOS vin_b vout Lt vl CT2 vin_a NMOS Cpar commutation de la bobine du primaire par signaux vin_a et vin_b du VCO entity TR_driver is port(terminal Nee, NOUT: electrical; signal Vin_a,Vin_b : in bit); end TR_driver; architecture test of TR_driver is ... begin if Vin_b = '0' use -- PMOS VPMOS == RSon * IPMOS; else IPMOS == 0.0; end use; break on Vin_b; ... if VPMOS'Above(-0.7) use IPpar == 0.0; else IPpar == (VPMOS + 0.7) / RDon; end use; ... end test; VHDL-AMS vout VL simulation du driver : tensions sur l’inductance pics de courant et puissance dans le driver commutateur de capacité NT2 Nout Cs transfoCT N1 CT1 S2 commuter la capacité CT1 quand la tension à ses bornes est nulle CT2 masse externe NCT1 Ncc CT_driver : Vpar_a Vpar_b commutation capa + - proche de la réalité implémentée VHDL-AMS entity CT_driver is port(terminal NCT, Ncc: electrical; signal Vpar_a,Vpar_b : in bit); end CT_driver; ... if Vpar_b = '0' use -- PMOS "on" ID2 == -IDS * (exp(-VCT/VT) - 1.0); if Vpar_a = '1' use -- NMOS "on" ... end use; else -- PMOS "off" ... end use; break on Vpar_b, Vpar_a; quantity Vout across ICpar through Nout to electrical_ground; -- Cpar quantity ... ... ICT2 == CT2 * Vl'dot; ICT1 == CT1 * VCT1'dot; ICpar == Cpar * Vout'dot; ICs == Cs * Vcs'dot; commutation de la capacité d’accord la capacité s’enclenche quand dm = 1 système interne récupération d’alimentation sur capacité de balast, et écrêtage du signal écrêtage et récupération d’alimentation NT2 Vrf Cs Vl transfoCT S2 Vint VHDL-AMS ID1 == IDS * (exp(Vd1/VT) - 1.0); ID2 == -IDS * (exp(-Vrf/VT) - 1.0); Idec1 == Cdec * VS0'dot + VS0 * Gdec; Idec2 == Cdec * Vdec2'dot + Vdec2 * Gdec; if domain=quiescent_domain use Vcc_int == Vint_start; else Icc_int == Cint * Vcc_int'dot; end use; Vdecode == Vcc_int/2.0; if Vcc_int'Above (Vzener) use Izener == (Vcc_int-Vzener)/Rzener; else Izener == 0.0; end use; signal transmis Vl simulation Vl Vrf vin mesure Vrf charge de la capacité de balast démodulation du code Manchester réalisation par intégration de courant durant les 2 premiers cycles les 2 cycles suivants mesure expérimentale données à 3Mbits provenant du processeur délai de décodage données démodulées dans l’implant VHDL comportemental simulation par comparaison de délais decodeData: process (dec_dataM) variable Tini, Tdel1, Tdel2 : time := 0ns; variable phase : integer := Init_phase; begin if dec_dataM'event and dec_dataM='1' then if phase=0 then Tini := now; else if Tini > 0ns then if phase=2 then Tdel1 := now - Tini; end if; ... Tdel1 Tdel2 if phase=4 then Tdel2 := now - (Tini + Tdel1); Tini := now; ... if Tdel2>Tdel1 then dec_data <= '1'; else dec_data <= '0'; end if; ... simulation du décodage délai de décodage le système complet + Nee Vin_b Cs TR_driver : driver DE FO MyControl : lecture données et VCO NT2 Nout Vin_a transfoCT N1 CT1 S2 CT2 FDel Vin_a masse externe Vin_b NCT1 Vpar_a Ncc Vpar_b CT_driver : Vpar_a Vpar_b commutation capa + - écrétage et récupération d’alimentation Vdc Vrf masse interne decodeM : process dec_dataM decodeData : process (dec_dataM) simulation globale du transfert de données variations du couplage K = 0.15 couplage normal K = 0.25 K = 0.05 couplage sous minimal couplage excessif erreur de transmission modélisation de puissance Vee influence du délai dans la commande du driver DE PMOS vin_b vout Lt vl CT2 Délai deadtime (ns) Consommation moyenne (W) 2 0.72 f0clock 10 0.67 delclock 15 0.599 20 0.517 vin_a NMOS Cpar deadtime Vin_a Vin_b NMOS « on » PMOS « on » optimal ? test de transmission deadtime = 20 ns détail des signaux gate i CL 01 puissance digitale procedure add_dig_pwr (N: real; -- coefficient de charge signal dig_pwr, mean_dig_pwr: inout real) is constant CL: real := 0.1e-12; -- capa unitaire de charge de porte logique constant Vdd: real := 5.0; -- alim digitale et swing de tension variable v_dig_pwr : real := 0.0; begin v_dig_pwr := dig_pwr + N * CL * Vdd * Vdd; dig_pwr <= v_dig_pwr; mean_dig_pwr <= v_dig_pwr / now; end procedure add_dig_pwr; Power = i Vdd2 f VHDL comportemental ½ if F0clock'event and F0clock='1' then add_dig_pwr (4.0, dig_pwr, mean_dig_pwr); end if; Ci Acti sommation sur quelques signaux de commande à suivre ... conclusions approche rudimentaire et partielle mais ... intérêt d’outils mixtes de haut niveau en cours de mise au point – – – modélisation comportementale stimuli complexes environnement interactif modélisation de puissance – – analogique : facilités du langage digital : événementiel ... à suivre !