Table of Contents Previous Chapter
The purpose of the Timed Exposure PRAM Builder is to generate and load CCD-controller Program RAM instructions which clock the CCDs for the Timed Exposure Science Mode.
The following lists the uses of the Timed Exposure PRAM Builder:
The following illustrates the relationships used by the Timed Exposure PRAM Builder class, PramTe.
FIGURE 152. Timed Exposure PRAM Builder class relationships
PramTe - This class is responsible for generating and loading a series of sequencer Program RAM words needed to clock a CCD for Timed Exposure mode. It provides a function which sets the desired clocking parameters (configure), and provides a function which generates and loads the clocking sequence into a particular DEA CCD-controller (build).
DeaManager - This class is provided by the Protocols class category, and is responsible for managing access to the DEA interface. It provides a function which the builder uses to load words into a CCD-controller's Program RAM (writePram).
SramLibrary - This class is responsible for providing the PRAM builder with the Sequencer RAM (SRAM) locations of various primitives. It provides functions which select certain clocking options to use, such as the high-gain timing for the output register clocking, or the direction to clock the output registers (selectGain, selectOrDirection). It provides functions which supply the address of an SRAM block which does nothing (getIdle), which clock and sample 1 pixel from the output register to the output node (getOrToOn), clock and sum two pixels from the output register to the output node (getOrToOnX2). It also provides functions which return the starting SRAM block and number of contiguous blocks used to clock one row from the image array to the framestore (getImageToFrame), and which clock one row from the framestore into the output registers (getFrameToOr).
Figure 153 illustrates a graphical representation of a single CCD. The figure on the left of the illustration presents a simplified picture of the main CCD components, and the figure on the right illustrates the pixel dimensions of each of the components.
FIGURE 153. Graphical CCD Representation
Each CCD consists of an Image Array, a Framestore, two output registers and four output nodes. Due to an overhang of the cover of the Framestore, only 1024 of the 1026 Image Array rows are used for data acquisition.
The following illustrates the sequence of operations used to clock CCDs in Timed Exposure Mode:
SRAM consists of a collection of blocks, where each block performs a clocking operation. Some operations can be performed in a single SRAM block, whereas others, due to power constraints, require a series of SRAM blocks. Table 26 lists the SRAM operations used for Timed Exposure Clocking.
TABLE 26. Timed Exposure SRAM Operations
------------------------------------------------------------------------------------------------ Operation Number of Description SRAM Blocks------------------------------------------------------------------------------------------------ Integrate 1 Do not perform any clocking operations.(a) Image to Frame 4 (TBD) Clock one row from the image array to the framestore, and from the framestore to the output registers. TBD: Should we also clock the output registers? Frame to OR for 4 (TBD) Clock one row from the framestore to the output registers, Discard without clocking the image array. TBD: Should we also clock the output registers? If not, use Frame to OR instead. Frame to OR 4 (TBD) Clock one row from the framestore to the output registers, without clocking the image array. OR to ON for dis 1 Clock one pixel from the output registers to their output card (no summing) nodes and discard the result.(b) OR to ON discard 1 Clock two pixels from the output registers to their output (x2 summing) nodes and discard the result. OR to ON sample, 1 Clock one pixel from the output registers to their output low gain nodes and sample the result. OR to ON sample, 1 Clock one pixel from the output registers to their output high gain nodes and sample the result. Use signal timing to increase gain. OR to ON sample, 1 Clock two pixels from the output registers to their output x2, low gain nodes, and sum and sample the pixels at the output nodes. OR to ON sample, 1 Clock two pixels from the output registers to their output x2, high gain nodes, and sum and sample the pixels at the output nodes. Reverse OR to ON 1 Clock one pixel from the output registers to their opposite for discard (no sum output nodes and discard the result. ming) Reverse OR to ON 1 Clock two pixels from the output registers to their opposite discard (x2 sum output nodes and discard the result. ming) Reverse OR to ON 1 Clock one pixel from the output registers to their opposite sample, low gain output nodes and sample the result. Reverse OR to ON 1 Clock one pixel from the output registers to their opposite sample, high gain output nodes and sample the result. Use signal timing to increase gain. Reverse OR to ON 1 Clock two pixels from the output registers to their opposite sample, x2, low gain output nodes, and sum and sample the pixels at the output nodes. Reverse OR to ON 1 Clock two pixels from the output registers to their opposite sample, x2, high output nodes, and sum and sample the pixels at the output gain nodes. ------------------------------------------------------------------------------------------------
This section describes the format of the PRAM words. PRAM consists of collections of word pairs known as `couplets.' Each couplet contains the address of one SRAM block to invoke, a repeat counter indicating the number of times to repeat the block, and a pixel code, which instructs the Front End Processors (FEPs) how to process pixels being clocked while the SRAM block is being invoked. Each invocation of a couplet takes 1 pixel clock period (~10us).
While PRAM is running, pixel clocks are always being delivered to the FEPs, regardless of whether pixel data is being clocked out of the CCDs or not. The pixel code portion of the couplets indicate how the FEPs interpret the data. Valid pixel data is flagged using a "Valid Pixel" code, and overclock pixels are flagged using an "Overclock" code. All other codes cause the clocked pixel data to be ignored. These include the "Vsync" code, which indicates that a new image has been started, the "Hsync" code, which indicates that a new image row is about arrive, and the "Ignore" code, which indicates that the clocked pixel should be completely ignored by the FEPs.
Each collection of couplets is preceded by a pair of `header' words. The header consists of the number of couplets which follow the block, the number of times to repeat the collection of couplets, and an action to perform once the collection of couplets. These actions include: halt the sequencer, continue to the header immediately following the couplet collection, jump to the first PRAM location (restart), and jump to the indicated PRAM page.
The following illustrates the clocking algorithm using pseudo-code, where the bolded text indicates operations which utilize the header repeat counter, italicized text indicates operations which can be accomplished using a single SRAM block and utilize the couplet repeat counter, and the underlined text indicates looping operations which are "unrolled" by the builder:
PRAM Page 0:
Flush the image array into the framestore
Jump to PRAM Page 1
PRAM Page 1:
/* ---- Expose primary exposure time ---- */
IF primary exposure time is less than transfer time
Flush image array into framestore
ENDIF
Integrate CCD for (primary exposure time - transfer time)
/* ---- Transfer image to DPA ---- */
Move 1026 rows from the image array to the framestore
Locate first row of subarray to first row of framestore
Discard output register
REPEAT for each subarray row
IF 2x2 sum
Move two rows from framestore to output registers
ELSE
Move one row from framestore to output registers
ENDIF
Discard 4 dummy output register pixels
REPEAT for all pixels in output register
IF 2x2 sum
Clock, sum and sample 2 pixels from output registers
ELSE
Clock and sample 1 pixel from output registers
ENDIF
ENDREPEAT
Discard TBD output register pixels prior to producing overclocks
REPEAT for each overclock pixel
IF 2x2 sum
Clock, sum and sample 2 overclocks from output register
ELSE
Clock and sample 1 overclock pixel from output register
ENDIF
ENDREPEAT
ENDREPEAT
/* ---- Secondary exposures ---- */
REPEAT duty cycle times
/* --- Expose Secondary exposure time --- */
IF secondary exposure time is less than transfer time
Flush image array into framestore
ENDIF
Integrate CCD for (secondary exposure time - transfer time)
Transfer subarray image to DPA as described above
ENDREPEAT
Jump to PRAM Page 1
Due to constraints in the ability of the power-supply to deliver enough current to clock large numbers of pixels in all CCDs, each major set of contiguous row transfers from the image array to the framestore, or from the framestore to the output registers must be performed at different times on each CCD. In order to avoid noise from large row transfers on one CCD affecting the Analog-to-Digital conversion on another, all CCDs transfer their respective images to the DEA video system at the same time.
Figure 154 illustrates a one-and-a-half exposure time-line when clocking six CCDs.
FIGURE 154. Single CCD Clocking Sequence
Figure 155 illustrates various clocking scenarios for CCDs in parallel.
FIGURE 155. Multiple CCD Clocking
In order to schedule each portion of the clocking operation, the PRAM builder must compute the time required to perform the image array to framestore transfer for a CCD, the time to position the first row of a subarray to the bottom of the framestore, and the time to transfer the subarray image to the DEA video system, and subsequently, on to the DPA's FEPs.
The time to transfer one row from the image array to the framestore is determined by the number of SRAM major cycles needed to perform the operation. The time to transfer the entire image array, is computed by multiplying the answer by 1026 rows. The minimum exposure time supported by the instrument is this result, times the number of CCDs minus 1.
The time to position the subarray to the end of the framestore is the number of SRAM major cycles needed to clock 1 row in the framestore times the location of the first row of the subarray.
The time taken to transfer the subarray image from the framestore to the DPA is a function of the number of rows in the subarray, the output node configuration, and the on-chip summing selection. In order to reduce the possibility of error when and if changes are made in how images are transferred from the framestore, the builder uses a two-pass approach when building images.
In the first pass, the builder counts the number of cycles used to transfer the image, but does not emit any codes to the DEA. During the second pass, the builder uses the computed transfer time to schedule short and long exposures, and to determine how much time must be inserted to achieve the desired integration times.
Hierarchy:
Superclasses:
none
Public Uses:
SramLibrary
Implementation Uses:
DeaManager
Public Interface:
Operations:
build() configure()
Protected Interface:
Operations:
blockEnd() blockStart() emitBlockHeader() emitBranchBlock() emitCouplet() emitDiscardOr() emitExposure() emitFlushImage() emitFrameToOr() emitImageToFrame() emitIntegrate() emitOutputPixel() emitOverclockPixel() emitSumOr() emitSumOverclock() emitTransferFrame() generateSequence() setPramBlock()
Private Interface:
Has-A Relationships:
Has-A Relationships:
PramTe
void
PramTe
Boolean
Arguments:
unsigned repeat
Documentation:
This function starts a block, storing repeat as the block's repeat count, blockRepeat, and zeroing the block's couplet count, blockCount.
PramTe
Boolean
Arguments:
DeaBoardId boardid
unsigned phaseslot
Documentation:
This function builds a PRAM sequence and loads the sequence into the DEA CCD-controller specified by boardid. phaseSlot specifies parallel transfer slot is used by the board. phaseSlot can range from 0 to the number of configured CCDs (see configure()).
PramTe
Boolean
Arguments:
unsigned boardcnt
unsigned expPrimary
unsigned expSecondary
unsigned expDuty
unsigned rowstart
unsigned rowend
Boolean sum2x2
QuadMode quadrants
unsigned ocPairs
Boolean highGain
const SramLibrary& sramlib
Documentation:
This function configures the Timed Exposure PRAM builder. boardcnt is the total number of CCDs being clocked, expPrimary is the primary exposure time, expSecondary is the secondary exposure time, and expDuty is the number of expSecondary exposures per expPrimary exposures. rowstart is the index of the first CCD row of the subarray, and rowend is the index of the last row. sum2x2 indicates whether or not to perform 2x2 on-chip summation. quadrants indicates the output node configuration and clocking direction (Full, Diagnostic, AC, or BD). ocPairs indicates the number of pairs of overclock pixels to generate. sramlib is a reference to the SRAM library to use for the run
PramTe
Boolean
Arguments:
unsigned operation
unsigned page
Documentation:
This function emits the PRAM couplet block header, storing blockRepeat for the repeat count, and blockCount as the couplet count. operation is the action the sequencer should take after the block has been run, and page indicates the page address to jump to (if action is to page jump). NOTE: This function was not combined with blockEnd() because the operation and page information are not necessarily known when blockEnd() is called.
PramTe
Boolean
Arguments:
unsigned id
Documentation:
This function emits a PRAM instruction which jumps to a new PRAM block, indicated by id.
PramTe
Boolean
Arguments:
unsigned sramaddr
unsigned pixcode
unsigned repeat
Documentation:
This function emits a couplet, where sramaddr is the index of the SRAM block to cycle, pixcode is the pixel code to emit during the cycle, and repeat is the number of times to repeat the cycle.
PramTe
Boolean
Arguments:
unsigned npix
unsigned pixcode
Documentation:
Emit PRAM couplets which clock npix columns from the output register into the output node, each time, discharging the output node, effectively discarding the pixels. pixcode indicates the pixel code to use when discarding the pixels.
PramTe
Boolean
Arguments:
unsigned expclocks
Documentation:
Emit PRAM instructions to integrate the CCD for a period of time, and then transfer the exposed image to the DPA. The total integration of the image is specified by expclocks.
PramTe
Boolean
Arguments:
unsigned nrows
Documentation:
Emit PRAM instructions to transfer nrows rows from the image array to framestore and from the framestore to the output register for discard. This function calls emitImageToFrame() to emit the instructions for the transfer.
PramTe
Boolean
Arguments:
unsigned nrows
Documentation:
Emit PRAM couplets which transfer nrows from the framestore into the output register. The charge from the rows will be summed together and with whatever charge exists in the output register.
PramTe
Boolean
Arguments:
unsigned nrows
Documentation:
Emits PRAM directives to transfer nrows from the image array to the framestore and from the framestore to the output register.The charge from the framestore rows will be summed together and with whatever charge exists in the output register.
PramTe
Boolean
Arguments:
unsigned expcounts
Documentation:
This function emits an SRAM block which lets the CCD sit still (expose) for expcounts pixel clock cycles.
PramTe
Boolean
Arguments:
unsigned npix
Documentation:
Emit PRAM couplets which transfer npix pixels from the output register to the output node and sample each pixel at the output node. This function calls sramLibrary>getOrToOn() to obtain the index of the SRAM block to use to output and sample a single pixel, and then calls emitCouplet(), passing npix as the repeat count, and using the `valid pixel' pixel code to indicate to the DPA that the pixel is part of the image data.
PramTe
Boolean
Arguments:
unsigned npix
Documentation:
Emit PRAM instructions to clock and sample npix overclock pixels from the output register. This function calls sramLibrary>getOrToOn() to obtain the index of the SRAM block to use to output and sample a single pixel, and then calls emitCouplet(), passing npix as the repeat count, and using the `overclock' pixel code to indicate to the DPA that the pixel is part of the image's overclock data.
PramTe
Boolean
Arguments:
unsigned npix
Documentation:
Emit PRAM instructions to clock and sum two pixels from the output register into the output node, and then sample and transmit the result to the DPA. npix indicates the number of pairs of pixels to clock. This function calls sramLibrary>getOrToOnX2() to obtain the index of the SRAM block to use to sum and sample two pixels at a time, and then calls emitCouplet(), passing npix as the repeat count, and using the `valid pixel' pixel code to indicate to the DPA that the pixel is part of the image data.
PramTe
Boolean
Arguments:
unsigned npix
Documentation:
Emit PRAM instructions to clock and sum pairs of overclock pixels from the output register. npix indicates the number of pairs of overclock pixels to clock. This function calls sramLibrary>getOrToOnX2() to obtain the index of the SRAM block to use to sum and sample two pixels, and then calls emitCouplet(), passing npix as the repeat count, and using the `overclock' pixel code to indicate to the DPA that the pixel is part of the image's overclock data.
PramTe
Boolean
Arguments:
unsigned nrows
Documentation:
Emit PRAM instructions to transfer nrows of an image from the framestore to the DEA/DPA via the output registers and output node.
PramTe
Boolean
PramTe
void
Arguments:
unsigned id
Documentation:
This function sets the current pramAddress according to the PRAM block selected by id, which can range from 0 to 15.