Binary word accumulator block
- Number of bit :
Type 'vec' of size -1. The number of bits to stock in buffer.
- Number of frame :
Type 'vec' of size -1. The number of frame of length "number of bits" which compose the input value.
- Initial counter value :
Type 'vec' of size -1. The initial value of the discrete counter
- Initial discret value :
Type 'vec' of size -1. The initial value of the discrete buffer.
- always active: no
- direct-feedthrough: no
- zero-crossing: no
- mode: no
- number/sizes of inputs: 1 / 1
- number/sizes of outputs: 1 / 1
- number/sizes of activation inputs: 1 / 1
- number/sizes of activation outputs: 0 /
- continuous-time state: no
- discrete-time state: yes
- name of computational function: stockbit
STOCKBIT_f.sci
/* stockbit Scicos bit accumulator
* Type 2 simulation function ver 1.1 - scilab-2.6&2.7
* 12 novembre 2003 - IRCOM GROUP - Author : A.Layec
*/
/* REVISION HISTORY :
* $Log$
*/
#include "machine.h"
#include <stdio.h>
/* Cette fonction de simulation réalise un accumulateur de bit
* Chaque paquet de bit en entrée (de longueur ipar[0..nu-1])
* est stocké dans un mot de longueur ipar[0..nu-1]*ipar[nu..2*nu-1]
* où ipar[nu..2*nu-1] représente le nombre de paquets à stocker.
* Le ième mot est placé à la place i*ipar[0..nu-1] et le mot
* de sortie de longueur ipar[nu..2*nu-1] est codé en code complément à 2
*
* Entrée régulière : u[0..nu-1] vecteur des entiers codés sur Nbit
* Sortie régulière : y[0..nu-1] vecteur des entiers codés sur Nbit*Nbpaquet
* Entrée évènementielle : Instant d'acquisition du mot en entrée
* Sortie évènementielle : néant
* Paramètres entiers : ipar[0..nu-1] : longueur des paquets du vecteur d'entrée (Nbit)
* ipar[nu..2*nu-1] : Nombre de paquet à stocker
* Mémoires : z[0..nu-1] : compteur paquet
* z[nu..2*nu-1] : valeur du mot de sortie.
*/
/*prototype*/
void stockbit(flag,nevprt,t,xd,x,nx,z,nz,tvec,ntvec,rpar,nrpar,
ipar,nipar,inptr,insz,nin,outptr,outsz,nout)
integer *flag,*nevprt,*nx,*nz,*ntvec,*nrpar,ipar[],*nipar,insz[],*nin,outsz[],*nout;
double x[],xd[],z[],tvec[],rpar[];
double *inptr[],*outptr[],*t;
{
/*déclaration des variables*/
int i,j,k,nu;
double *y;
double *u;
/*Récupération des adresses des ports réguliers*/
y=(double *)outptr[0];
u=(double *)inptr[0];
/*récupération de la taille du port d'entrée*/
nu=insz[0];
if(*flag==1)
{
for(k=0;k<nu;k++)
{
/*Incrément compteur paquet*/
z[k]++;
/*Acquisition de l'entrée dans i*/
i = (int)u[k];
/*fprintf(stderr,"stockbit z[k]=%f, u=%f\n", z[k],u[k]);*/
/*Conversion en nombre entier non signé*/
i &= (2<<(ipar[k]-1)) - 1;
/*Décale à gauche le paquet de z[k]*ipar[k] bits*/
i=i<<(ipar[k]*(int)(z[k]-1));
/*Incrémente valeur paquet*/
z[nu+k] = z[nu+k]+i;
/*Réalise test sur compteur paquet*/
if (z[k]==ipar[nu+k])
{
/*Passe valeur de z[nu+k] dans j*/
j=(int)z[nu+k];
/*Réalise conversion code complément à 2*/
j-= 2<<((ipar[k]*ipar[nu+k])-2);
j&= (2<<((ipar[k]*ipar[nu+k])-1)) - 1;
j-= 2<<((ipar[k]*ipar[nu+k])-2);
/*Place la valeur du paquet dans registre y[]*/
y[k]=j;
fprintf(stderr,"stockbit y=%f\n", y[k]);
/*Met la valeur du compteur paquet à zéro*/
z[k]=0;
/*Réinitialise la valeur du paquet de sortie à zéro*/
z[nu+k]=0;
}
}
}
}
IRCOM Group
Alan Layec