The feed-forward table controls rf power injected into the controller output data stream. It drives systems without feedback and drives systems with feedback when setting up feedback. It is also used to inject transient signals for open- or closed-loop response measurements. In logic, it consists of the ffSetpointTable module. It is switched on with the ff-enable switch and need not be enabled with or without feedback. The entire table is output when triggered. When not triggered, the only the first I/Q pair is output. Output of the table is multiplied by the ++−− sequence to effect upconversion from baseband to the IF2 frequency.
The table has the capacity for 1024 words, which is populated by an I1, Q1, I2, Q2, ... sequence of samples. In other words it holds 512 I/Q pairs. These samples are not output at the full clock rate. The ffSetpointTable.v module instead outputs an I1, Q1, −I1, −Q1, I2, Q2, −I2, −Q2, ... sequence, when at the full (zoom = 0) data rate, for a duration of 2048 sample clocks (51.2 μs at fs = 40 MHz). When not at the full zoom, however, each I/Q pair is repeatedly output in the ++−− sequence with sufficient multiplicity to slow the output of the table to the rate determined by the zoom (× 2−zoom, where zoom = 0, 1, ..., 31). The zoom is specified in a five-bit field of an end point.
For context, the clickable figure to the right shows the signal path through the controller between the FF-table's host interface and the DAC output. When feedback is employed, its signal fb_out is injected at the jump5 summing junction.
The table is written using a pipe-in Opal Kelly end point and triggered by various internal and external triggers, and using a trigger-in end point. Its output can be triggered in a single-shot mode through the trigger-in end point, or alternatively, automatic retriggering for a free-run model can be selected by setting a wire-in bit. Once that bit is set, a first trigger must be provided through the trigger-in end point to initiate cycling. The table stops cycling when the retriggering wire-in bit is cleared. In Matlab, the table is written by the _dac.m script fiie, or the lower-level function ffSPTable.
Writing to the controller's ff table through the Opal Kelly logic involves a couple of steps:
The table's instantaneous output (the signal dout40 in logic) is monitored by a pair of wire-out end points assigned to the I and Q components of the stream. That signal (and other I/Q-monitoring end points assigned to other data streams) is sampled in one of two modes tied to the operation of the feed-forward table. The first, when the table is not free running in the retriggering mode, the various I/Q data streams are sampled at every quadrant zero (for the I components) and quadrant one (for the Q components). But when the feed-forward table is output in the retriggering mode, samping of the I component occurs at a fixed number of table samples following the start of the output of the table, and one clock later for the Q component. That delay is set in the top-level Verilog file llrf_xem.v as the sampledelay parameter in the instantiation of the ffSetpointTable.v module. For reference, the dout40 signal is upstream of the ff-enable switch.