AD—- HDL Project (template)
Overview
Supported boards
Supported devices
Supported carriers
Evaluation board |
Carrier |
FMC slot |
---|---|---|
FMCA |
||
FMC0 |
||
FMC+ |
||
FMC+ |
||
FMC HPC0 |
||
FMC HPC |
Evaluation board |
Carrier |
FMC slot |
---|---|---|
FMC0 |
||
FMC+ |
||
FMC HPC0 |
||
FMC HPC |
Block design
Block diagram
If the project has multiple ways of configuration, then make subsections to this section and show the default configuration and some other popular modes.
The data path and clock domains are depicted in the below diagram:
Configuration modes
The following are the parameters of this project that can be configured:
JESD_MODE: used link layer encoder mode
64B66B - 64b66b link layer defined in JESD204C, uses AMD IP as Physical Layer
8B10B - 8b10b link layer defined in JESD204B, uses ADI IP as Physical Layer
RX_LANE_RATE: lane rate of the Rx link (MxFE to FPGA)
TX_LANE_RATE: lane rate of the Tx link (FPGA to MxFE)
REF_CLK_RATE: the rate of the reference clock
[RX/TX]_JESD_M: number of converters per link
[RX/TX]_JESD_L: number of lanes per link
[RX/TX]_JESD_S: number of samples per frame
[RX/TX]_JESD_NP: number of bits per sample
[RX/TX]_NUM_LINKS: number of links
[RX/TX]_TPL_WIDTH
TDD_SUPPORT: set to 1, adds the TDD; enables external synchronization through TDD. Must be set to 1 when SHARED_DEVCLK=1
SHARED_DEVCLK
TDD_CHANNEL_CNT
TDD_SYNC_WIDTH
TDD_SYNC_INT
TDD_SYNC_EXT
TDD_SYNC_EXT_CDC: if enabled, the CDC circuitry for the external sync signal is added
[RX/TX]_KS_PER_CHANNEL: Number of samples stored in internal buffers in kilosamples per converter (M)
[ADC/DAC]_DO_MEM_TYPE
Check out this guide on more details regarding these parameters: AXI TDD
Clock scheme
External clock source AD-SYNCHRONA14-EBZ
SYSREF clocks are LVDS
ADCCLK and REFCLK are LVPECL
Only the channels presented in the clocking selection are relevant. For the rest, you can either disable them or just put a divided frequency of the source clock.
Limitations
The design has one JESD receive chain with 4 lanes at rate of 13Gbps. The JESD receive chain consists of a physical layer represented by an XCVR module, a link layer represented by an RX JESD LINK module and transport layer represented by a RX JESD TPL module. The link operates in Subclass 1.
The link is set for full bandwidth mode and operate with the following parameters:
Deframer paramaters: L=4, M=2, F=1, S=1, NP=16
The transport layer component presents on its output 128 bits at once on every clock cycle, representing 4 samples per converter. The two receive chains are merged together and transferred to the DDR with a single DMA.
CPU/Memory interconnects addresses
The addresses are dependent on the architecture of the FPGA, having an offset added to the base address from HDL (see more at CPU/Memory interconnects addresses).
Depending on the values of parameters $INTF_CFG, $ADI_PHY_SEL and $TDD_SUPPORT, some IPs are instantiated and some are not.
Check-out the table below to find out the conditions.
Instance |
Depends on parameter |
Zynq/Microblaze |
ZynqMP |
Versal |
---|---|---|---|---|
axi_mxfe_rx_xcvr |
$INTF_CFG!=”TX” & $ADI_PHY_SEL==1 |
0x44A6_0000 |
0x84A6_0000 |
0xA4A6_00000 |
rx_mxfe_tpl_core |
$INTF_CFG!=”TX” |
0x44A1_0000 |
0x84A1_0000 |
0xA4A1_00000 |
axi_mxfe_rx_jesd |
$INTF_CFG!=”TX” |
0x44A9_0000 |
0x84A9_0000 |
0xA4A9_00000 |
axi_mxfe_rx_dma |
$INTF_CFG!=”TX” |
0x7C42_0000 |
0x9C42_0000 |
0xBC42_00000 |
mxfe_rx_data_offload |
$INTF_CFG!=”TX” |
0x7C45_0000 |
0x9C45_0000 |
0xBC45_00000 |
axi_mxfe_tx_xcvr |
$INTF_CFG!=”RX” & $ADI_PHY_SEL==1 |
0x44B6_0000 |
0x84B6_0000 |
0xA4B6_00000 |
tx_mxfe_tpl_core |
$INTF_CFG!=”RX” |
0x44B1_0000 |
0x84B1_0000 |
0xA4B1_00000 |
axi_mxfe_tx_jesd |
$INTF_CFG!=”RX” |
0x44B9_0000 |
0x84B9_0000 |
0xA4B9_00000 |
axi_mxfe_tx_dma |
$INTF_CFG!=”RX” |
0x7C43_0000 |
0x9C43_0000 |
0xBC43_00000 |
mxfe_tx_data_offload |
$INTF_CFG!=”RX” |
0x7C44_0000 |
0x9C44_0000 |
0xBC44_00000 |
axi_tdd_0 |
$TDD_SUPPORT==1 |
0x7C46_0000 |
0x9C46_0000 |
0xBC46_00000 |
I2C connections
I2C type |
I2C manager instance |
Alias |
Address |
I2C subordinate |
---|---|---|---|---|
SPI connections
SPI type |
SPI manager instance |
SPI subordinate |
CS |
---|---|---|---|
PS |
SPI 0 |
ADXYZT |
0 |
PS |
SPI 1 |
AD0000 |
0 |
PL |
axi_spi_bus_1 |
AD23456 |
0 |
GPIOs
GPIO signal |
Direction |
HDL GPIO EMIO |
Software GPIO |
Software GPIO |
---|---|---|---|---|
(from FPGA view) |
Zynq-7000 |
Zynq MP |
||
signal_name[31:0] |
IN/OUT/INOUT |
127:96 |
181:150 |
205:174 |
signal_name[31:0] |
IN/OUT/INOUT |
95:64 |
149:118 |
173:142 |
signal_name[31:0] |
IN/OUT/INOUT |
63:32 |
117:86 |
141:110 |
Interrupts
Below are the Programmable Logic interrupts used in this project.
You have many ways of writing this table: as a list-table or really to draw it. Take a look in the .rst of this page to see how they’re written and which suits best your case.
Instance name |
HDL |
Linux Zynq |
Actual Zynq |
Linux ZynqMP |
Actual ZynqMP |
---|---|---|---|---|---|
— |
15 |
59 |
91 |
111 |
143 |
— |
14 |
58 |
90 |
110 |
142 |
— |
13 |
57 |
89 |
109 |
141 |
— |
12 |
56 |
88 |
108 |
140 |
— |
11 |
55 |
87 |
107 |
139 |
— |
10 |
54 |
86 |
106 |
138 |
— |
9 |
53 |
85 |
105 |
137 |
— |
8 |
52 |
84 |
104 |
136 |
— |
7 |
36 |
68 |
96 |
128 |
— |
6 |
35 |
67 |
95 |
127 |
— |
5 |
34 |
66 |
94 |
126 |
— |
4 |
33 |
65 |
93 |
125 |
— |
3 |
32 |
64 |
92 |
124 |
— |
2 |
31 |
63 |
91 |
123 |
— |
1 |
30 |
62 |
90 |
122 |
— |
0 |
29 |
61 |
89 |
121 |
Instance name |
HDL |
Linux Zynq |
Actual Zynq |
Linux ZynqMP |
Actual ZynqMP |
S10SoC |
Linux Cyclone V |
Actual Cyclone V |
---|---|---|---|---|---|---|---|---|
— |
15 |
59 |
91 |
111 |
143 |
32 |
55 |
87 |
— |
14 |
58 |
90 |
110 |
142 |
31 |
54 |
86 |
— |
13 |
57 |
89 |
109 |
141 |
30 |
53 |
85 |
— |
12 |
56 |
88 |
108 |
140 |
29 |
52 |
84 |
— |
11 |
55 |
87 |
107 |
139 |
28 |
51 |
83 |
— |
10 |
54 |
86 |
106 |
138 |
27 |
50 |
82 |
— |
9 |
53 |
85 |
105 |
137 |
26 |
49 |
81 |
— |
8 |
52 |
84 |
104 |
136 |
25 |
48 |
80 |
— |
7 |
36 |
68 |
96 |
128 |
24 |
47 |
79 |
— |
6 |
35 |
67 |
95 |
127 |
23 |
46 |
78 |
— |
5 |
34 |
66 |
94 |
126 |
22 |
45 |
77 |
— |
4 |
33 |
65 |
93 |
125 |
21 |
44 |
76 |
— |
3 |
32 |
64 |
92 |
124 |
20 |
43 |
75 |
— |
2 |
31 |
63 |
91 |
123 |
19 |
42 |
74 |
— |
1 |
30 |
62 |
90 |
122 |
18 |
41 |
73 |
— |
0 |
29 |
61 |
89 |
121 |
17 |
40 |
72 |
Building the HDL project
The design is built upon ADI’s generic HDL reference design framework. ADI distributes the bit/elf files of these projects as part of the ADI Kuiper Linux. If you want to build the sources, ADI makes them available on the HDL repository. To get the source you must clone the HDL repository.
Then go to the hdl/projects/$eval_board/$carrier location and run the make command.
Linux/Cygwin/WSL
Example of running the make
command without parameters (using the default
configuration):
~$
cd hdl/projects/ad9081_fmca_ebz/zcu102
~/hdl/projects/ad9081_fmca_ebz/zcu102$
make
Example of running the make
command with parameters:
~$
cd hdl/projects/ad9081_fmca_ebz/a10soc
~/hdl/projects/ad9081_fmca_ebz/a10soc$
make RX_LANE_RATE=2.5 TX_LANE_RATE=2.5 RX_JESD_L=8 RX_JESD_M=4 RX_JESD_S=1 RX_JESD_NP=16 TX_JESD_L=8 TX_JESD_M=4 TX_JESD_S=1 TX_JESD_NP=16
The following dropdowns contain tables with the parameters that can be used to configure this project, depending on the carrier used. Where a cell contains a — (dash) it means that the parameter doesn’t exist for that project (ad9081_fmca_ebz/$carrier or ad9082_fmca_ebz/$carrier).
Parameter |
|
|||
---|---|---|---|---|
VCK190 |
VCU118 |
ZC706 |
ZCU102 |
|
JESD_MODE |
64B66B |
8B10B |
8B10B* |
8B10B* |
RX_LANE_RATE |
24.75 |
15 |
10 |
15 |
TX_LANE_RATE |
24.75 |
15 |
10 |
15 |
REF_CLK_RATE |
375 |
— |
— |
— |
RX_JESD_M |
4 |
4 |
8 |
4 |
RX_JESD_L |
8 |
8 |
4 |
8 |
RX_JESD_S |
4 |
1 |
1 |
1 |
RX_JESD_NP |
12 |
16 |
16 |
16 |
RX_NUM_LINKS |
1 |
1 |
1 |
1 |
RX_TPL_WIDTH |
— |
— |
— |
{} |
TX_JESD_M |
4 |
4 |
8 |
4 |
TX_JESD_L |
8 |
8 |
4 |
8 |
TX_JESD_S |
8 |
1 |
1 |
1 |
TX_JESD_NP |
12 |
16 |
16 |
16 |
TX_NUM_LINKS |
1 |
1 |
1 |
1 |
TX_TPL_WIDTH |
— |
— |
— |
{} |
RX_KS_PER_CHANNEL |
64 |
64 |
— |
— |
TX_KS_PER_CHANNEL |
64 |
64 |
— |
— |
Legend
*
— for this carrier only the 8B10B mode is supported
The result of the build, if parameters were used, will be in a folder named by the configuration used:
if the following command was run
make RX_LANE_RATE=2.5 TX_LANE_RATE=2.5 RX_JESD_L=8 RX_JESD_M=4 RX_JESD_S=1 RX_JESD_NP=16 TX_JESD_L=8 TX_JESD_M=4 TX_JESD_S=1 TX_JESD_NP=16
then the folder name will be:
RXRATE2_5_TXRATE2_5_RXL8_RXM4_RXS1_RXNP16_TXL8_TXM4_TXS1_TXNP16
because of truncation of some keywords so the name will not exceed the limits
of the Operating System (JESD
, LANE
, etc. are removed) of 260
characters.
A more comprehensive build guide can be found in the Build an HDL project user guide.
Software considerations
ADC - crossbar config *** EXAMPLE ***
Due to physical constraints, Rx lanes are reordered as described in the following table.
e.g physical lane 2 from ADC connects to logical lane 7 from the FPGA. Therefore the crossbar from the device must be set accordingly.
ADC phy Lane |
FPGA Rx lane / Logical Lane |
---|---|
0 |
2 |
1 |
0 |
2 |
7 |
3 |
6 |
4 |
5 |
5 |
4 |
6 |
3 |
7 |
1 |
DAC - crossbar config *** EXAMPLE ***
Due to physical constraints, Tx lanes are reordered as described in the following table:
e.g physical lane 2 from DAC connects to logical lane 7 from the FPGA. Therefore the crossbar from the device must be set accordingly.
DAC phy Lane |
FPGA Tx lane / Logical Lane |
---|---|
0 |
0 |
1 |
2 |
2 |
7 |
3 |
6 |
4 |
1 |
5 |
5 |
6 |
4 |
7 |
3 |
Resources
More information
Support
Analog Devices, Inc. will provide limited online support for anyone using the reference design with ADI components via the EngineerZone FPGA reference designs forum.
For questions regarding the ADI Linux device drivers, device trees, etc. from our Linux GitHub repository, the team will offer support on the EngineerZone Linux software drivers forum.
For questions concerning the ADI No-OS drivers, from our No-OS GitHub repository, the team will offer support on the EngineerZone microcontroller No-OS drivers forum.
It should be noted, that the older the tools’ versions and release branches are, the lower the chances to receive support from ADI engineers.