/[PAMELA software]/PamelaDigitizer/DigitizeAC.cxx
ViewVC logotype

Diff of /PamelaDigitizer/DigitizeAC.cxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by pamelats, Wed Oct 15 14:03:15 2008 UTC revision 1.5 by mocchiut, Fri Nov 20 10:20:20 2009 UTC
# Line 24  void Digitizer::DigitizeAC() { Line 24  void Digitizer::DigitizeAC() {
24      fDataAC[i+4] = 0xFFFF;      fDataAC[i+4] = 0xFFFF;
25      fDataAC[i+68] = 0xFFFF;      fDataAC[i+68] = 0xFFFF;
26    }    }
   // the last word is a CRC  
   // Dummy for the time being, but it might need to be calculated in the end  
   fDataAC[63] = 0xABCD;  
   fDataAC[127] = 0xABCD;  
27    
28    // shift registers (moved to the end of the routine)    // shift registers (moved to the end of the routine)
29    
# Line 45  void Digitizer::DigitizeAC() { Line 41  void Digitizer::DigitizeAC() {
41    }    }
42    // increments for every trigger might be needed at some point.    // increments for every trigger might be needed at some point.
43    // dummy for now    // dummy for now
44    fDataAC[50]  = 0x0000;    fDataAC[50]  = 0x0000;  
45    fDataAC[114] = 0x0000;    fDataAC[114] = 0x0000;
46    
47    // dummy FPGA clock (increment by 1 at each event)    // dummy FPGA clock (increment by 1 at each event)
# Line 179  void Digitizer::DigitizeAC() { Line 175  void Digitizer::DigitizeAC() {
175    //    printf("%0x  ",fDataAC[i]);      //    printf("%0x  ",fDataAC[i]);  
176    //    if ((i+1)%8 ==0) cout << endl;    //    if ((i+1)%8 ==0) cout << endl;
177    //   }    //   }
178    
179      // the last word is a CRC
180      fDataAC[63] = EvaluateCrcAC (fDataAC, 0);
181      fDataAC[127]= EvaluateCrcAC (fDataAC, 1);
182    };
183    
184    
185    
186    
187    
188    UShort_t Digitizer::EvaluateCrcAC( UShort_t *pAC , Bool_t flag )
189    {
190      // Flag=0for AC1 ; flag=1 for AC2
191      UShort_t check=0;
192      
193      UInt_t l=0;
194      for (UInt_t i=0; i<63; i++)
195        {
196          l = 64*flag + i ;
197          //printf("ACAC  i=%d   l=%d   chech=%d \n",i,l,check);
198          check = crcAC(check, pAC[l]);
199        }
200      return check;
201      
202    };
203    
204    
205    UShort_t Digitizer::crcAC( UShort_t old , UShort_t neww )
206    {
207      union crc_data {
208        short word;
209        struct bit_field {
210          unsigned b0:1;
211          unsigned b1:1;
212          unsigned b2:1;
213          unsigned b3:1;
214          unsigned b4:1;
215          unsigned b5:1;
216          unsigned b6:1;
217          unsigned b7:1;
218          unsigned b8:1;
219          unsigned b9:1;
220          unsigned b10:1;
221          unsigned b11:1;
222          unsigned b12:1;
223          unsigned b13:1;
224          unsigned b14:1;
225          unsigned b15:1;
226        } bit;
227      } c,d,r;
228    
229      c.word = old;
230      d.word = neww;
231      r.word = 0;
232    
233      r.bit.b0 = c.bit.b0 ^ c.bit.b4 ^ c.bit.b8 ^ c.bit.b11 ^ c.bit.b12 ^
234                 d.bit.b0 ^ d.bit.b4 ^ d.bit.b8 ^ d.bit.b11 ^ d.bit.b12;
235    
236      r.bit.b1 = c.bit.b1 ^ c.bit.b5 ^ c.bit.b9 ^ c.bit.b12 ^ c.bit.b13 ^
237                 d.bit.b1 ^ d.bit.b5 ^ d.bit.b9 ^ d.bit.b12 ^ d.bit.b13;
238    
239      r.bit.b2 = c.bit.b2 ^ c.bit.b6 ^ c.bit.b10 ^ c.bit.b13 ^ c.bit.b14 ^
240                 d.bit.b2 ^ d.bit.b6 ^ d.bit.b10 ^ d.bit.b13 ^ d.bit.b14;
241    
242      r.bit.b3 = c.bit.b3 ^ c.bit.b7 ^ c.bit.b11 ^ c.bit.b14 ^ c.bit.b15 ^
243                 d.bit.b3 ^ d.bit.b7 ^ d.bit.b11 ^ d.bit.b14 ^ d.bit.b15;
244    
245      r.bit.b4 = c.bit.b4 ^ c.bit.b8 ^ c.bit.b12 ^ c.bit.b15 ^
246                 d.bit.b4 ^ d.bit.b8 ^ d.bit.b12 ^ d.bit.b15;
247    
248      r.bit.b5 = c.bit.b0 ^ c.bit.b4 ^ c.bit.b5 ^ c.bit.b8 ^ c.bit.b9 ^
249                 c.bit.b11 ^ c.bit.b12 ^ c.bit.b13 ^
250                 d.bit.b0 ^ d.bit.b4 ^ d.bit.b5 ^ d.bit.b8 ^ d.bit.b9 ^
251                 d.bit.b11 ^ d.bit.b12 ^ d.bit.b13;
252    
253      r.bit.b6 = c.bit.b1 ^ c.bit.b5 ^ c.bit.b6 ^ c.bit.b9 ^ c.bit.b10 ^
254                 c.bit.b12 ^ c.bit.b13 ^ c.bit.b14 ^
255                 d.bit.b1 ^ d.bit.b5 ^ d.bit.b6 ^ d.bit.b9 ^ d.bit.b10 ^
256                 d.bit.b12 ^ d.bit.b13 ^ d.bit.b14;
257    
258      r.bit.b7 = c.bit.b2 ^ c.bit.b6 ^ c.bit.b7 ^ c.bit.b10 ^ c.bit.b11 ^
259                 c.bit.b13 ^ c.bit.b14 ^ c.bit.b15 ^
260                 d.bit.b2 ^ d.bit.b6 ^ d.bit.b7 ^ d.bit.b10 ^ d.bit.b11 ^
261                 d.bit.b13 ^ d.bit.b14 ^ d.bit.b15;
262    
263      r.bit.b8 = c.bit.b3 ^ c.bit.b7 ^ c.bit.b8 ^ c.bit.b11 ^ c.bit.b12 ^
264                 c.bit.b14 ^ c.bit.b15 ^
265                 d.bit.b3 ^ d.bit.b7 ^ d.bit.b8 ^ d.bit.b11 ^ d.bit.b12 ^
266                 d.bit.b14 ^ d.bit.b15;
267    
268      r.bit.b9 = c.bit.b4 ^ c.bit.b8 ^ c.bit.b9 ^ c.bit.b12 ^ c.bit.b13 ^
269                 c.bit.b15 ^
270                 d.bit.b4 ^ d.bit.b8 ^ d.bit.b9 ^ d.bit.b12 ^ d.bit.b13 ^
271                 d.bit.b15;
272    
273      r.bit.b10 = c.bit.b5 ^ c.bit.b9 ^ c.bit.b10 ^ c.bit.b13 ^ c.bit.b14 ^
274                  d.bit.b5 ^ d.bit.b9 ^ d.bit.b10 ^ d.bit.b13 ^ d.bit.b14;
275    
276      r.bit.b11 = c.bit.b6 ^ c.bit.b10 ^ c.bit.b11 ^ c.bit.b14 ^ c.bit.b15 ^
277                  d.bit.b6 ^ d.bit.b10 ^ d.bit.b11 ^ d.bit.b14 ^ d.bit.b15;
278    
279      r.bit.b12 = c.bit.b0 ^ c.bit.b4 ^ c.bit.b7 ^ c.bit.b8 ^ c.bit.b15 ^
280                  d.bit.b0 ^ d.bit.b4 ^ d.bit.b7 ^ d.bit.b8 ^ d.bit.b15;
281    
282      r.bit.b13 = c.bit.b1 ^ c.bit.b5 ^ c.bit.b8 ^ c.bit.b9 ^
283                  d.bit.b1 ^ d.bit.b5 ^ d.bit.b8 ^ d.bit.b9;
284    
285      r.bit.b14 = c.bit.b2 ^ c.bit.b6 ^ c.bit.b9 ^ c.bit.b10 ^
286                  d.bit.b2 ^ d.bit.b6 ^ d.bit.b9 ^ d.bit.b10;
287    
288      r.bit.b15 = c.bit.b3 ^ c.bit.b7 ^ c.bit.b10 ^ c.bit.b11 ^
289                  d.bit.b3 ^ d.bit.b7 ^ d.bit.b10 ^ d.bit.b11;
290    
291      return r.word;
292    
293  };  };

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.5

  ViewVC Help
Powered by ViewVC 1.1.23