Add here a paragraph of the function description.
/* pfd Scicos Phase Frequency Detector block including * D Flip/Flop Tristate Phase/Frequency comparator and charge Pump * Type 4 simulation function ver 1.0 - scilab-3.0 * 13 janvier 2004 - IRCOM GROUP - Author : A.Layec */ /* REVISION HISTORY : * $Log$ */ #include "scicos_block.h" #include <stdio.h> /* entrées régulières : néant * sorties : y[0..ny-1] : vecteur de sortie du courant de la pompe de charge * entrées évènementielles : nev = 1 : entrée d'horloge de mise à jour du cpf * nev = 2 : entrée d'horloge du diviseur de retour * sortie évènementielles : * paramètres entiers : outsz[0] : taille du vecteur (ny) * ipar[0..ny] : type de bruit de la pompe de charge (typ_leak) * 0: pas de fuite * 1: fuite constante * 2: fuite bruit normal * paramètres réels : rpar[0..ny-1] : courant max de la pompe de charge * rpar[ny..2ny-1] : courant de fuite moyen de la pompe de charge * rpar[2*ny..3*ny-1] : deviation du courant de fuite * Etats discrets : z[0],z[ny] : etats mémoires des bascules * Etats discrets dynamiques : up et down valeur de sortie du CPF */ /*prototype*/ void pfd(scicos_block *block,int flag) { /*déclaration*/ int ny; int nev; double *y; double *z__; double *up,*down; int typ_leak; double *Io,*Ileak_d,*Ileak_m; /*récupération des adresses*/ y=(double *)block->outptr[0]; nev=block->nevprt; /*Récupération des paramètres*/ ny=block->outsz[0]; typ_leak=block->ipar[0]; Io=&block->rpar[0]; Ileak_m=&block->rpar[ny]; Ileak_d=&block->rpar[2*ny]; if(flag==1) { /*Allocation de 2 vecteurs de taille ny*/ if ((*block->work=scicos_malloc(sizeof(double)*(2*ny)))== NULL) { set_block_error(-16); return; } /*Récupération de l'adresse de départ du vecteur alloué*/ z__=*block->work; /*Déclaration de pointeurs auxiliaires*/ up=&(z__[0]);down=&(z__[ny]); /*vecteur up et down*/ /*Appel cpf_c*/ cpf_c(&ny,&nev,&block->z[0],&block->z[ny],&up[0],&down[0]); /*Appel chargepump_c*/ chargepump_c(&ny,&up[0],&down[0],&Io[0],&typ_leak,&Ileak_m[0],&Ileak_d[0],&y[0]); /*Libère mémoire allouée*/ scicos_free(*block->work); } }