Phase/Frequency tristate Detector block
- Lenght of anti-backlash pulse (0:No pulse/Length of pulse [s]) :
Type 'vec' of size -1. The time of the delay for Return At Zero for the flip-flop. Set 0 to disable event output port and third event input port.
- Output current [A] :
Type 'vec' of size -1. The maximum output current of the charge pump.
- Mean of Leakage current [A] (0:No constant leakage) :
Type 'vec' of size -1. The mean of the noisy current or the constant leakage current.
- Variance of leakage current [A] (0:No variance) :
Type 'vec' of size -1. The variance of the noisy current.
- always active: no
- direct-feedthrough: no
- zero-crossing: no
- mode: no
- number/sizes of inputs: 0 /
- number/sizes of outputs: 1 / 1
- number/sizes of activation inputs: 2 / 1 1
- number/sizes of activation outputs: 0 /
- continuous-time state: no
- discrete-time state: yes
- name of computational function: pfd
PFD_f.sci
/* 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);
}
}
IRCOM Group
Alan Layec
- 1
-
D. R. McMahill and C. G. Sodini, ``Automatic calibration of modulated frequency
synthesizers,'' IEEE Trans. Circuits Syst. II, vol. 49, no. 5, pp.
301-311, May 2002.