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
, 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.
Driving the s_axi_aresetn
input low will restart the power-up state
machine and cause the attenuation to return to the value set by the
dsa_code
input, or to 0 dB if the DSA ports are not enabled.
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.