The on-chip DSA supports two behaviors as follows:
- User selection of attenuation value using direct programmable logic input.
- Automatic attenuation value forced or disabled (together with buffer) on Over-Voltage events.
A 5-bit real-time signal (dsa_code
) from the PL
sets the DSA value directly as per the following formula.
- DSA Value (dB) =
range
-dsa_code
*step size
The range of dsa_code
is from 0 to the maximum
allowed code which maps to a DSA value from the maximum attenuation value to 0 dB with
the step size and range defined in
Zynq
UltraScale+ RFSoC Data Sheet: DC and AC Switching
Characteristics (DS926); other dsa_code
values are
invalid. For example, assuming the range of DSA is 27 dB and the step size is 1 dB, if
you want to have a DSA value of 10 dB, the dsa_code
value will be 17 (27 - 10) and the dsa_code
is 0b10001
. When the DSA ports are not enabled the IP sets the
attenuation to 0 dB.
The dsa_code
is updated with a rising edge on
the trigger signal (dsa_update
). Both dsa_code
and dsa_update
are synchronous to the s_axi_aclk
signal, it is
recommended to change the dsa_code
and then apply the
update at least 1 s_axi_aclk
later. Once captured by
s_axi_aclk
, the trigger signal is asynchronous
which allows for the fastest operation, and it is distributed to all channels within a
tile to allow for simultaneous updates of the DSA codes. Updates only take effect when
the power-up state machine has reached the done state. The propagation delay from a
dsa_update
assertion to code change at digital
output is around 400 T1 for dual RF-ADC and 220 T1 for
quad RF-ADC, respectively.
The default attenuation is set by the dsa_code
input when real-time DSA signal interface is enabled. When the IP
starts up initially (or after s_axi_aresetn
is driven
Low), the attenuation will be dependent on this input (without needing to assert dsa_update
). When the real-time DSA signal interface is
not enabled the default attenuation is 0 dB.
There are also RFdc APIs available to set and get the DSA values in dB. The API
updates each channel independently and the response time is slower than the real time
port updates. There is no change to the attenuation when the
XRFDC_Reset
API or XRFDC_Restart
API is
called.