// SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package /**************************************************************************** usage to generate a patter test.pat from test.p gcc -DINFILE="\"test.p\"" -DOUTFILE="\"test.pat\"" -o test.exe generator.c ; ./test.exe ; rm test.exe *************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MAXLOOPS 6 #define MAXTIMERS 6 #define MAXWORDS 8191 uint64_t pat=0; uint64_t iopat=0; uint64_t clkpat=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() { start=iaddr; } void setstop() { stop=iaddr; } void setinput(int bit) { uint64_t mask=1; mask=mask<>bit; } 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); } } 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(); /******/ } }; int main() { int iloop=0; fd=fopen(OUTFILE,"w"); #include INFILE fprintf(fd,"patlimits 0x%04x 0x%04x\n",start, stop); if (iopat_enable == 1) { fprintf(fd,"patioctrl 0x%016llx\n",iopat); } for (iloop=0; iloop