From a921368dea0e846b4a18521afba20b3d9217d2c1 Mon Sep 17 00:00:00 2001 From: lopez_c Date: Thu, 17 Nov 2022 10:57:42 +0100 Subject: [PATCH] Updated generator.c: patioctrl, loops and timeouts are only generated if they exist in the pattern source --- patternGenerator/generator.c | 149 +++++++++++++++++++++++------------ 1 file changed, 99 insertions(+), 50 deletions(-) diff --git a/patternGenerator/generator.c b/patternGenerator/generator.c index 85ad670c1..85f8b6310 100644 --- a/patternGenerator/generator.c +++ b/patternGenerator/generator.c @@ -34,112 +34,147 @@ uint64_t pat=0; uint64_t iopat=0; uint64_t clkpat=0; -int iaddr=0; -int waitaddr[MAXTIMERS]={MAXWORDS,MAXWORDS,MAXWORDS, MAXWORDS, MAXWORDS, MAXWORDS}; -int startloopaddr[MAXLOOPS]={MAXWORDS,MAXWORDS,MAXWORDS, MAXWORDS, MAXWORDS, MAXWORDS}; -int stoploopaddr[MAXLOOPS]={MAXWORDS,MAXWORDS,MAXWORDS, MAXWORDS, MAXWORDS, MAXWORDS}; -int start=0, stop=0; -uint64_t waittime[MAXTIMERS]={0,0,0}; -int nloop[MAXLOOPS]={0,0,0}; +unsigned iaddr=0; +unsigned waitaddr[MAXTIMERS]={MAXWORDS,MAXWORDS,MAXWORDS, MAXWORDS, MAXWORDS, MAXWORDS}; +unsigned startloopaddr[MAXLOOPS]={MAXWORDS,MAXWORDS,MAXWORDS, MAXWORDS, MAXWORDS, MAXWORDS}; +unsigned stoploopaddr[MAXLOOPS]={MAXWORDS,MAXWORDS,MAXWORDS, MAXWORDS, MAXWORDS, MAXWORDS}; +unsigned start=0, stop=0; +uint64_t waittime[MAXTIMERS]={0,0,0,0,0,0}; +unsigned nloop[MAXLOOPS]={0,0,0,0,0,0}; char infile[10000], outfile[10000]; FILE *fd, *fd1; uint64_t PAT[MAXWORDS]; +int iopat_enable = 0; int i,ii,iii,j,jj,jjj,pixx,pixy,memx,memy,muxout,memclk,colclk,rowclk,muxclk,memcol,memrow,loopcounter; -void setstart() { +void setstart() +{ start=iaddr; } -void setstop() { +void setstop() +{ stop=iaddr; } -void setinput(int bit) { +void setinput(int bit) +{ uint64_t mask=1; mask=mask<>bit; } -void setstartloop(int iloop) { +void setstartloop(int iloop) +{ if (iloop>=0 && iloop=0 && iloop=0 && iloop=0 && iloop=0 && iloop=MAXWORDS) printf("ERROR: too many word in the pattern (%d instead of %d)!",iaddr, MAXWORDS); + if (iaddr>=MAXWORDS) + { + printf("ERROR: too many word in the pattern (%d instead of %d)!",iaddr, MAXWORDS); + } } -int parseCommand(int clk, int cmdbit, int cmd, int length) { +int parseCommand(int clk, int cmdbit, int cmd, int length) +{ int ibit; clearbit(clk); - for (ibit=0; ibit>ibit)) - setbit(cmdbit); - else - clearbit(cmdbit); - pw(); - /******/ - setbit(clk); - pw(); - /******/ - } + for (ibit=0; ibit>ibit)) + { + setbit(cmdbit); + } + else + { + clearbit(cmdbit); + } + pw(); + /******/ + setbit(clk); + pw(); + /******/ + } }; @@ -149,19 +184,33 @@ int main() { fd=fopen(OUTFILE,"w"); #include INFILE - fprintf(fd,"patioctrl 0x%016llx\n",iopat); fprintf(fd,"patlimits 0x%04x 0x%04x\n",start, stop); - for (iloop=0; iloop