Pattern Summary

1. What are patterns:

In order to readout the device, we must output a variety of waveforms to clock the fast & slow muxes, reset the arrays/row, and indicate when to samples pixel values. Much of the wave forms are highly repetitive. After studing the array information, we have combined a sets of waveform into functional unit called patterns.

These patterns are stored as text files. There are 2 formats: nsfcam, and Spex format. In the spex format a preserve mask is introduced into the file. See the format definition and examples below:
 

Type: NSFCAM/CSHELL SpeX
Format: filename - Description 
Number_of_words_in_pattern (decmial)
word_1 (hex)
word_2
...
word_n
filename - Description 
Preserve Mask (hex)
Number_of_words_in_pattern (decmial)
word_1 (hex)
word_2
...
word_n
Sample: p3_c_f.pat Convert.First (arc.s) 270
4
b6c0
bec0
bac4
bac5
p3f.pat - Convert 16 First
0e000e40   ; Preserve mask (hex)
35              ; number of patterns (dec)
80008000
80208020
00000010
40004010

The naming convension for the pattern files are described below.

1. The file names start with p1,p2..p5. This prefix indicates the general function the pattern performs.

 p1   - frame start.
 p2*  - Address next row.
 p3*  - Address next column
 p4*  - Reset a row/pair
 p5*  - idle state.
2. Spex defines 14 pattern. The name and a short description of the patterns are given below.
p1.pat - Frame start (clears row mux).

p2at.pat - Address Next Row 'A' with Toggle.
p2an - Address Next Row 'A' No Toggle.
p2bn - Address Next Row 'B' No Toggle.
p2ct - Address Next Row 'C' with Toggle.
p2cn - Address Next Row 'C' No Toggle.
p2dn - Address Next Row 'D' No Toggle.

p3q - Address column - (time delay after row select).
p3s - Address column Skip
p3f - Address column First Convert.
p3m - Address column Middle Converts.
p3l - Address column Last Converts.

Guidedog 512x512: P3 clocks/samples Two column (8 pixel/column): 512 = 32 * 2*8
Bigdog 1024x1024: P3 clocks/sample Two column (pixels/column) + duel channes: 1024 = 32 * (2*8*2)

p4 - Reset the Row-Pair.

p5 - Dead Time (integrating) pattern.
 
 
 

3. Using patterns to clock the array.

   A simple ARC (array_reset_clocking, or non-destructive readout).

      // full array
      nrow = 512
      ncol = 512
      P1                         // frame start, or initialize Row Mux
      // row muxes, are named A,B,C,D. Two row-pairs.
      for( y=0; y < nrows; y+=4 )  // upto 128 loops:  512 row / 4 row_per_loop
      {
         P2at                  // Skip to next AB row-pair, addresss A
         clock_next_row(ncol, row_reset=False);
         P2bn                  // address B
         clock_next_row(ncol, row_reset=False);
         P2ct                  // skip to next CD row-pair, address C
         clock_next_row(ncol, row_reset=False);
         P2dn                  // address D
         clock_next_row(ncol, row_reset=False);
      }

      clock_next_row(ncol, row_reset);
      {
         if( ncol > 0 )
            P2q                // delay after 'row select'

         P3s * ncol_to_skip;    // clock but don't sample (subarrays).

         P3f * 1;                  // sample 1st

         P3m * ncol_to_sample-2;   // sample middle pixels

         P3l * 1;                  // last pixel

         if( row_reset )
            P4
      }

   A simple CDS (cooralated double sample, resetting by row pairs) 

      // full array
      nrow = 512
      ncol = 512
      P1                         // frame start, or initialize Row Mux
      // row muxes, are named A,B,C,D. Two row-pairs.
      for( y=0; y < nrows; y+=4 )  // upto 128 loops:  512 row / 4 row_per_loop
      {
         // AB pair's sample
         P2at                  // Skip to next AB row-pair, addresss A
         clock_next_row(ncol, row_reset=False);
         P2bn                  // address B
         clock_next_row(ncol, row_reset=TRUE);
         // AB pair's pedestal
         P2an                  // addresss A (no toggle)
         clock_next_row(ncol, row_reset=False);
         P2bn                  // address B
         clock_next_row(ncol, row_reset=False);

         // CD pair's sample 
         P2ct                  // skip to next CD row-pair, address C
         clock_next_row(ncol, row_reset=False);
         P2dn                  // address D
         clock_next_row(ncol, row_reset=False);

         // CD pair's sample 
         P2cn                  // address C (no toggle)
         clock_next_row(ncol, row_reset=False);
         P2dn                  // address D
         clock_next_row(ncol, row_reset=False);
      }