//BINACCU_c Scicos Binary accumulator function block //Classical interface function ver1.0 - scilab-3.0 //14 mars 2006 - INRIA - Author : A.Layec function [x,y,typ]=BINACCU_c(job,arg1,arg2) x=[];y=[];typ=[] select job case 'plot' then standard_draw(arg1) case 'getinputs' then [x,y,typ]=standard_inputs(arg1) case 'getoutputs' then [x,y,typ]=standard_outputs(arg1) case 'getorigin' then [x,y]=standard_origin(arg1) case 'set' then x=arg1; graphics=arg1.graphics;model=arg1.model; exprs=graphics.exprs; while %t do txt=['Set Binary Accumulator Block']; [ok,nbit,nw,ci,nci,ci_sup,cc2_in,cc2_out,herit,exprs]=getvalue(txt,... ['Number of bit';'Number of word';'Set output initial condition'; 'Number of additional initial condition';... 'Set additional initial condition';... '2''s complement in input (0:No/1:Yes)';... '2''s complement in output (0:No/1:Yes)';... 'Inherit (no:0, yes:1)'],... list('vec',-1,'vec',-1,'vec',-1,'vec',-1,... 'vec',-1,'vec',-1,'vec',-1,'vec',1),exprs); if ~ok then break,end; if (size(nbit)==size(nw)&size(nbit)==size(nci)&... size(nbit)==size(ci)&size(nbit)==size(cc2_in)&... size(nbit)==size(cc2_out)) then if (sum(nci)==size(ci_sup,'*')) then Nu=size(nbit,'*'); if ok then graphics.exprs=exprs nbit=int(nbit);nw=int(nw);nci=int(nci);ci=int(ci) cc2_in=int(cc2_in);cc2_out=int(cc2_out) nci=nci(:) ipar=[cc2_in(:);cc2_out(:);nw(:);nbit(:);[0;cumsum(nci(1:$-1))];ci_sup(:)] model.ipar=ipar(:) model.dstate=[zeros(Nu,1);ci(:);nci(:)] model.in=Nu;model.out=Nu if herit==1 then model.evtin=[] [model,graphics,ok]=check_io(model,graphics,Nu,Nu,[],[]); else model.evtin=1 [model,graphics,ok]=check_io(model,graphics,Nu,Nu,1,[]); end x.graphics=graphics; x.model=model; break; end else message('Number of initial conditions parameter doesn''t'+... ' match with dimensions of initial condition parameter'); end else message('Inconsistent parameters dimensions'); end end case 'define' then Nu=1 nbit=3 nw=4 ci=0 nci=0 ci_sup=0 cnw=0 cc2_in=1 cc2_out=1 herit=0 model=scicos_model() model.sim=list('binaccu',4) model.in=Nu model.out=Nu model.evtin=1 model.evtout=[] model.dstate=[zeros(Nu,1);zeros(Nu,1);nci(:)] model.rpar=[] nci=nci(:) model.ipar=[cc2_in(:);cc2_out(:);nw(:);nbit(:);[0;cumsum(nci(1:$-1))];ci_sup(:)] model.blocktype='d' model.firing=[] model.dep_ut=[%f %f] gr_i=['txt=['' Binary'';''Accumulator''];'; 'xstringb(orig(1),orig(2),txt,sz(1),sz(2),''fill'');'] exprs=[string(nbit);string(nw);string(ci);string(nci);... sci2exp(ci_sup);string(cc2_in);string(cc2_out);string(herit)] x=standard_define([2.5 2],model,exprs,gr_i) end endfunction