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) =
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
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
value will be 17 (27 - 10) and the
0b10001. When the DSA ports are not enabled the IP sets the
attenuation to 0 dB.
dsa_code is updated with a rising edge on
the trigger signal (
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
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