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.2. Spex defines 14 pattern. The name and a short description of the patterns are given below.
p2* - Address next row.
p3* - Address next column
p4* - Reset a row/pair
p5* - idle state.
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); }