AFE5550
Board pin block that brings all 32 analog front-end channels of the DT5550 into the diagram as 32 independent 16-bit sample buses. The block itself emits nothing - it delegates to the DT5550 board plug-in, which instantiates the shared ADC subsystem, applies the fixed channel remap and forces the board’s analog inversion mask.
Introduction
Principle of Operation
AFE5550 is the bulk front-door of a DT5550 design: one block, 32 output pins, each carrying the digitised samples of one analog input channel, registered on the board’s readout clock.
It is the “take everything” alternative to placing 32 individual Analog Input board pins. Both routes end up in the same place - the two share a single instance of the board’s ADC subsystem - but this block gives you the whole array in one symbol and you simply leave unwired the channels you do not care about.
4x ADC devices ──► adcs_top ──► inversion stage ──► CH0..CH31 (16 bit @ READOUT_CLK)
│
MapAFECh remap ────┤
▼
ADC_A0 .. ADC_A31 pins
Pin Description
ADC_A0 to ADC_A9 in MapAFECh).
Bit 9 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A1 to ADC_A5 in MapAFECh).
Bit 5 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A2 to ADC_A7 in MapAFECh).
Bit 7 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A3 to ADC_A1 in MapAFECh).
Bit 1 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A4 to ADC_A3 in MapAFECh).
Bit 3 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A5 to ADC_A2 in MapAFECh).
Bit 2 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A6 to ADC_A0 in MapAFECh).
Bit 0 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A7 to ADC_A6 in MapAFECh).
Bit 6 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A8 to ADC_A4 in MapAFECh).
Bit 4 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A9 to ADC_A11 in MapAFECh).
Bit 11 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A10 to ADC_A10 in MapAFECh).
Bit 10 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A11 to ADC_A8 in MapAFECh).
Bit 8 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A12 to ADC_A15 in MapAFECh).
Bit 15 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A13 to ADC_A14 in MapAFECh).
Bit 14 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A14 to ADC_A13 in MapAFECh).
Bit 13 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A15 to ADC_A12 in MapAFECh).
Bit 12 of the fixed inversion mask is clear, so this channel is
delivered as digitised.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A16 to ADC_A19 in MapAFECh).
Bit 19 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A17 to ADC_A18 in MapAFECh).
Bit 18 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A18 to ADC_A17 in MapAFECh).
Bit 17 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A19 to ADC_A16 in MapAFECh).
Bit 16 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A20 to ADC_A23 in MapAFECh).
Bit 23 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A21 to ADC_A22 in MapAFECh).
Bit 22 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A22 to ADC_A21 in MapAFECh).
Bit 21 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A23 to ADC_A20 in MapAFECh).
Bit 20 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A24 to ADC_A26 in MapAFECh).
Bit 26 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A25 to ADC_A27 in MapAFECh).
Bit 27 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A26 to ADC_A24 in MapAFECh).
Bit 24 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A27 to ADC_A25 in MapAFECh).
Bit 25 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A28 to ADC_A30 in MapAFECh).
Bit 30 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A29 to ADC_A31 in MapAFECh).
Bit 31 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A30 to ADC_A28 in MapAFECh).
Bit 28 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
ADC_A31 to ADC_A29 in MapAFECh).
Bit 29 of the fixed inversion mask is set, so this channel is
delivered inverted: x"3FFF" - sample.
Safe to leave unconnected - the board plug-in only emits a signal and
an assignment for pads that are actually wired.
Properties
adcs_top; none of them is exposed here.
⚙️ Detailed Operation
The block emits nothing itself
Component_AFE55550.CompileHDL contains no code - it returns True with an
empty body. What makes the block work is one line in its constructor:
ComponentInfo.DelegateCompile = "board_plugin"
The compiler (diagramc_compile.vb) sees delegate_compile = "board_plugin"
in the node tag, and hands the block - designator, pad array and all - to the
board plug-in’s CompileIO instead. On the DT5550 that is the
If type = "AFE5550" branch of bDT5550.vb, keyed on the component’s
sub-type.
The practical consequence: all the real behaviour of this block lives in
the board plug-in, and a board that has no AFE5550 branch in CompileIO
silently generates nothing for it.
What the board plug-in does
-
Instantiates the ADC subsystem, once. It first tests whether the architecture text already contains the marker comment
--NI ADCs istantiation; if not, it callsIstantiateAdc, which adds the ADC top-level ports, theadcs_topinstance, the ADC clock constraints and theADC_READY/ADC_STATUSsignals. Because the marker is a plain string sentinel, an Analog Input block and this block share one singleadcs_top- whichever is compiled first creates it. -
Declares one signal per connected output pad (and skips the rest).
-
Remaps the channel. For each connected pad it calls
MapAFECh, which translates the block pin name into the physical AFE channel that actually carries it, and emits<pad signal> <= <physical channel>;. See the pin list below for the full table - it is not the identity permutation. -
Forces the inversion mask:
ANALOG_INPUT_INVERSION <= x"FFFF0220";overriding the template default of
x"00000000".
The inversion mask
Inside adcs_top each channel passes a final stage clocked by
READOUT_CLK:
if inversion(n) = '0' then
CHn <= iCHn;
else
CHn <= x"3FFF" - iCHn;
end if;
The mask the board forces, x"FFFF0220", has bits 5, 9 and 16 to 31 set.
Those are physical channel indices, so after the MapAFECh remap the
block pins delivered inverted are ADC_A0, ADC_A1 and
ADC_A16 … ADC_A31; pins ADC_A2 … ADC_A15 come through as digitised.
The per-pin notes below spell this out.
Sample format
The pins are 16 bits wide, but the inversion arithmetic subtracts from
x"3FFF", which places the ADC code in the low 14 bits (0 … 16383) of
the word. The exact meaning of the upper bits is not stated in these
sources; treat the sample as a 14-bit unsigned code unless your own
measurements say otherwise.
Timing
- The output stage of
adcs_topis registered onREADOUT_CLK, which the board maps toCLK_80(0)- the 80 MHz readout clock. All 32 channels are updated on the same edge. - There is no data-valid pin: the buses are free-running, one new sample
per readout clock. Blocks that need a
DVshould generate it themselves (a constant'1', or a gate on ADC Ready). - The block adds no latency of its own - it is a set of assignments.
Companion block
The ADC_READY / ADC_STATUS signals created by the same IstantiateAdc
call are what the ADC Ready block reads. Since this block is one of the
two things that create them, an AFE5550 in the design is enough to make an
ADC Ready block legal. Use it to hold your processing chain off until the
four ADCs have finished their configuration sequence - before that, the
sample buses carry whatever the untrained SERDES produces.
Board availability
Offered only on the DT5550 (board plug-in GUID
413F904B-7FD0-43EF-B127-74278C23F1A5).
SupportedBoard also lists DT5550SE, but no board plug-in in the
repository declares itself as that model, and the toolbox visibility filter
in Form1_plugins.vb implements a BOARD_MODELS.DT5550 branch only. Unlike
its three siblings in this plug-in, this block does not list DT5560.
Resources & Timing
-
Latency: No latency added by the block. Samples are registered once in the
adcs_topoutput/inversion stage, onREADOUT_CLK(the board maps it toCLK_80(0)). -
Throughput: 32 channels, one 16-bit sample each per readout clock, free running (no data-valid pin).
- Costs nothing by itself: the block compiles to signal declarations and concurrent assignments only, and only for the pads you actually wire.
- Shares one
adcs_topinstance with the Analog Input board pins; the board plug-in guards against a second instantiation with the--NI ADCs istantiationmarker string. - Creates the
ADC_READY/ADC_STATUSsignals that the ADC Ready block reads.