| 
 | 1 | +.. _adrv9001:  | 
 | 2 | + | 
 | 3 | +ADRV9001  | 
 | 4 | +================================================================================  | 
 | 5 | + | 
 | 6 | +Overview  | 
 | 7 | +-------------------------------------------------------------------------------  | 
 | 8 | + | 
 | 9 | +The purpose of this testbench is to validate the serial interface functionality  | 
 | 10 | +of the :git-hdl:`projects/adrv9001` reference design.  | 
 | 11 | + | 
 | 12 | +The entire HDL documentation can be found here  | 
 | 13 | +:external+hdl:ref:`ADRV9001 HDL project <adrv9001>`.  | 
 | 14 | + | 
 | 15 | +Block design  | 
 | 16 | +-------------------------------------------------------------------------------  | 
 | 17 | + | 
 | 18 | +The testbench block design includes part of the ADRV9001 HDL reference design,  | 
 | 19 | +along with VIPs used for clocking, reset, PS and DDR simulations.  | 
 | 20 | + | 
 | 21 | +Block diagram  | 
 | 22 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 23 | + | 
 | 24 | +The data path and clock domains are depicted in the below diagram:  | 
 | 25 | + | 
 | 26 | +.. image:: ./adrv9001_tb.svg  | 
 | 27 | +   :width: 800  | 
 | 28 | +   :align: center  | 
 | 29 | +   :alt: adrv9001/Testbench block diagram  | 
 | 30 | + | 
 | 31 | +Configuration parameters and modes  | 
 | 32 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 33 | + | 
 | 34 | +The following parameters of this project can be configured:  | 
 | 35 | + | 
 | 36 | +-  CMOS_LVDS_N: Defines the physical interface type:  | 
 | 37 | +   Options: 0 - LVDS, 1 - CMOS  | 
 | 38 | +-  SDR_DDR_N: Select interface type:  | 
 | 39 | +   Options: 0 - DDR, 1 - SDR  | 
 | 40 | +-  SINGLE_LANE: Defines the single lane mode:  | 
 | 41 | +   Options: 0 - Multiple Lanes (2/4), 1 - Single Lane  | 
 | 42 | +-  USE_RX_CLK_FOR_T: Select the clock to drive the TX SSI interface:  | 
 | 43 | +   Options: 0 - TX1 dedicated clock, 1 - RX SSI clock  | 
 | 44 | +-  SYMB_OP: Select symbol data format mode:  | 
 | 45 | +   Options: 0 - Disable, 1 - Enable  | 
 | 46 | +-  SYMB_8_16B: Select number of bits for symbol format mode:  | 
 | 47 | +   Options: 0 - 16 bits, 1 - 8 bits  | 
 | 48 | +-  DDS_DISABLE: By setting this parameter you can remove the dual tone DDS logic  | 
 | 49 | +   from the TX channels. This will reduce resource utilization significantly,  | 
 | 50 | +   but will lose the ability to generate a test tone:  | 
 | 51 | +   Options: 0 - Enable DDS, 1 - Disable DDS                     | 
 | 52 | +     | 
 | 53 | +Configuration files  | 
 | 54 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  | 
 | 55 | + | 
 | 56 | +The following configuration files are available:  | 
 | 57 | + | 
 | 58 | ++--------------------------------+-----------------------------------------------------------------------------------------------+  | 
 | 59 | +| Configuration mode             | Parameters                                                                                    |  | 
 | 60 | +|                                +-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 61 | +|                                | CMOS_LVDS_N | SDR_DDR_N | SINGLE_LANE | USE_RX_CLK_FOR_T | SYMB_OP | SYMB_8_16B | DDS_DISABLE |  | 
 | 62 | ++================================+=============+===========+=============+==================+=========+============+=============+  | 
 | 63 | +| cfg1_CMOS_SDR_1Lanes           | 1           | 1         | 1           | 0                | 0       | 0          | 0           |  | 
 | 64 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 65 | +| cfg2_CMOS_DDR_1Lanes           | 1           | 0         | 1           | 0                | 0       | 0          | 0           |  | 
 | 66 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 67 | +| cfg4_CMOS_SDR_4Lanes           | 1           | 1         | 0           | 0                | 0       | 0          | 0           |  | 
 | 68 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 69 | +| cfg5_CMOS_DDR_4Lanes           | 1           | 0         | 0           | 0                | 0       | 0          | 0           |  | 
 | 70 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 71 | +| cfg6_LVDS_DDR_1Lanes           | 0           | 0         | 1           | 0                | 0       | 0          | 0           |  | 
 | 72 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 73 | +| cfg7_LVDS_DDR_2Lanes           | 0           | 0         | 0           | 0                | 0       | 0          | 0           |  | 
 | 74 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 75 | +| cfg7_LVDS_DDR_2Lanes_noDDS     | 0           | 0         | 0           | 0                | 0       | 0          | 1           |  | 
 | 76 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 77 | +| cfg8_CMOS_SDR_1Lanes_SYMB_8b   | 1           | 1         | 1           | 0                | 1       | 1          | 0           |  | 
 | 78 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 79 | +| cfg9_CMOS_DDR_1Lanes_SYMB_8b   | 1           | 0         | 1           | 0                | 1       | 1          | 0           |  | 
 | 80 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 81 | +| cfg10_CMOS_SDR_1LANES_SYMB_16b | 1           | 1         | 1           | 0                | 1       | 0          | 0           |  | 
 | 82 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 83 | +| cfg11_CMOS_DDR_1Lanes_SYMB_16b | 1           | 0         | 1           | 0                | 1       | 0          | 0           |  | 
 | 84 | ++--------------------------------+-------------+-----------+-------------+------------------+---------+------------+-------------+  | 
 | 85 | + | 
 | 86 | +Tests  | 
 | 87 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  | 
 | 88 | + | 
 | 89 | +The following test program file is available:  | 
 | 90 | + | 
 | 91 | +============ ========================================  | 
 | 92 | +Test program Usage  | 
 | 93 | +============ ========================================  | 
 | 94 | +test_program Tests the adrv9001 project capabilities.  | 
 | 95 | +============ ========================================  | 
 | 96 | + | 
 | 97 | +Available configurations & tests combinations  | 
 | 98 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  | 
 | 99 | + | 
 | 100 | +The test program is compatible with the above mentioned configurations.  | 
 | 101 | + | 
 | 102 | +CPU/Memory interconnect addresses  | 
 | 103 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 104 | + | 
 | 105 | +Below are the CPU/Memory interconnect addresses used in this project:  | 
 | 106 | + | 
 | 107 | +=========================  ===========  | 
 | 108 | +Instance                   Address  | 
 | 109 | +=========================  ===========  | 
 | 110 | +axi_intc                   0x4120_0000  | 
 | 111 | +axi_adrv9001               0x44A0_0000  | 
 | 112 | +axi_adrv9001_rx1_dma       0x44A3_0000  | 
 | 113 | +axi_adrv9001_rx2_dma       0x44A4_0000  | 
 | 114 | +axi_adrv9001_tx1_dma       0x44A5_0000  | 
 | 115 | +axi_adrv9001_tx2_dma       0x44A6_0000  | 
 | 116 | +ddr_axi_vip                0x8000_0000  | 
 | 117 | +=========================  ===========  | 
 | 118 | + | 
 | 119 | +Interrupts  | 
 | 120 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 121 | + | 
 | 122 | +Below are the Programmable Logic interrupts used in this project:  | 
 | 123 | + | 
 | 124 | +====================  ===  | 
 | 125 | +Instance name         HDL  | 
 | 126 | +====================  ===  | 
 | 127 | +axi_adrv9001_rx1_dma  12  | 
 | 128 | +axi_adrv9001_rx2_dma  11  | 
 | 129 | +axi_adrv9001_tx1_dma  6  | 
 | 130 | +axi_adrv9001_tx2_dma  5  | 
 | 131 | +====================  ===  | 
 | 132 | + | 
 | 133 | +Test stimulus  | 
 | 134 | +-------------------------------------------------------------------------------  | 
 | 135 | + | 
 | 136 | +The test program is structured into several tests as follows:  | 
 | 137 | + | 
 | 138 | +Environment bringup  | 
 | 139 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 140 | + | 
 | 141 | +The steps of the environment bringup are:  | 
 | 142 | + | 
 | 143 | +* Create the environment  | 
 | 144 | +* Start the environment  | 
 | 145 | +* Start the clocks  | 
 | 146 | +* Assert the resets  | 
 | 147 | + | 
 | 148 | +Sanity test  | 
 | 149 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 150 | + | 
 | 151 | +This test is used to check the RX and TX DMAs sanity.  | 
 | 152 | + | 
 | 153 | +R2T2 test  | 
 | 154 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 155 | + | 
 | 156 | +This test is used for the R2T2 configuration and comprises the following steps:  | 
 | 157 | + | 
 | 158 | +PN test  | 
 | 159 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  | 
 | 160 | + | 
 | 161 | +The PN test verifies the PN data.  | 
 | 162 | + | 
 | 163 | +.. note::  | 
 | 164 | + | 
 | 165 | +PN Test Skipped in 8 bits symbol mode.  | 
 | 166 | + | 
 | 167 | +The steps of this test are for:  | 
 | 168 | +    * NIBBLE_RAMP  | 
 | 169 | +    * FULL_RAMP  | 
 | 170 | +    * PN7  | 
 | 171 | +    * PN15  | 
 | 172 | + | 
 | 173 | +DDS test  | 
 | 174 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  | 
 | 175 | + | 
 | 176 | +The DDS test verifies the DDS path, if DDS is enabled.  | 
 | 177 | + | 
 | 178 | +The steps of this test are:  | 
 | 179 | + | 
 | 180 | +* Link setup  | 
 | 181 | +* Select DDS as source  | 
 | 182 | +* Enable normal data path for RX1  | 
 | 183 | +* Configure tone amplitude and frequency  | 
 | 184 | +* Enable RX channels, enable sign extension  | 
 | 185 | +* Sync DAC channels  | 
 | 186 | +* Link down  | 
 | 187 | + | 
 | 188 | +DMA test  | 
 | 189 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  | 
 | 190 | + | 
 | 191 | +The DMA test verifies the DMA path, if DMA is enabled.  | 
 | 192 | + | 
 | 193 | +The steps of this test are:  | 
 | 194 | + | 
 | 195 | +* Init test data  | 
 | 196 | +* Clear destination region  | 
 | 197 | +* Configure TX DMA  | 
 | 198 | +* Select DMA as source  | 
 | 199 | +* Enable normal data path for RX1  | 
 | 200 | +* Enable RX channel, enable sign extension  | 
 | 201 | +* Sync DAC channels  | 
 | 202 | +* Link setup  | 
 | 203 | +* Configure RX DMA  | 
 | 204 | +* Transfer start  | 
 | 205 | +* Clear interrupt  | 
 | 206 | +* Check captured data from DDR against incremental pattern based on first sample  | 
 | 207 | + | 
 | 208 | +Independent R1T1 test  | 
 | 209 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 210 | + | 
 | 211 | +This test is used for the R1T1 configuration and comprises the following steps:  | 
 | 212 | + | 
 | 213 | +* Enable normal data path for RX2  | 
 | 214 | + | 
 | 215 | +DMA test procedure for RX2/TX2 independent pairs  | 
 | 216 | +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^  | 
 | 217 | + | 
 | 218 | +The steps of this test are:  | 
 | 219 | + | 
 | 220 | +* Init test data  | 
 | 221 | +* Clear destination region  | 
 | 222 | +* Configure TX DMA  | 
 | 223 | +* Select DMA as source  | 
 | 224 | +* Enable RX channel, enable sign extension  | 
 | 225 | +* Sync DAC channels  | 
 | 226 | +* Link setup  | 
 | 227 | +* Configure RX DMA  | 
 | 228 | +* Transfer start  | 
 | 229 | +* Clear interrupt  | 
 | 230 | +* Check captured data from DDR against incremental pattern based on first sample  | 
 | 231 | + | 
 | 232 | +Test internal loopback DAC2->ADC2  | 
 | 233 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 234 | + | 
 | 235 | +* Enable internal loopback  | 
 | 236 | +* DMA test procedure for RX2/TX2 independent pairs  | 
 | 237 | + | 
 | 238 | +Stop the environment  | 
 | 239 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 240 | + | 
 | 241 | +* Stop the clocks  | 
 | 242 | + | 
 | 243 | +Building the testbench  | 
 | 244 | +-------------------------------------------------------------------------------  | 
 | 245 | + | 
 | 246 | +The testbench is built upon ADI's generic HDL reference design framework.  | 
 | 247 | +ADI does not distribute compiled files of these projects so they must be built  | 
 | 248 | +from the sources available :git-hdl:`here </>` and :git-testbenches:`here </>`,  | 
 | 249 | +with the specified hierarchy described :ref:`build_tb set_up_tb_repo`.  | 
 | 250 | +To get the source you must  | 
 | 251 | +`clone <https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository>`__  | 
 | 252 | +the HDL repository, and then build the project as follows:.  | 
 | 253 | + | 
 | 254 | +**Linux/Cygwin/WSL**  | 
 | 255 | + | 
 | 256 | +*Example 1*  | 
 | 257 | + | 
 | 258 | +Build all the possible combinations of tests and configurations, using only the  | 
 | 259 | +command line.  | 
 | 260 | + | 
 | 261 | +.. shell::  | 
 | 262 | +   :showuser:  | 
 | 263 | + | 
 | 264 | +   $cd testbenches/project/adrv9001  | 
 | 265 | +   $make  | 
 | 266 | + | 
 | 267 | +*Example 2*  | 
 | 268 | + | 
 | 269 | +Build all the possible combinations of tests and configurations, using the  | 
 | 270 | +Vivado GUI. This command will launch Vivado, will run the simulation and display  | 
 | 271 | +the waveforms.  | 
 | 272 | + | 
 | 273 | +.. shell::  | 
 | 274 | +   :showuser:  | 
 | 275 | + | 
 | 276 | +   $cd testbenches/project/adrv9001  | 
 | 277 | +   $make MODE=gui  | 
 | 278 | + | 
 | 279 | +*Example 3*  | 
 | 280 | + | 
 | 281 | +Build a particular combination of test and configuration, using the Vivado GUI.  | 
 | 282 | +This command will launch Vivado, will run the simulation and display the  | 
 | 283 | +waveforms.  | 
 | 284 | + | 
 | 285 | +.. shell::  | 
 | 286 | +   :showuser:  | 
 | 287 | + | 
 | 288 | +   $cd testbenches/project/adrv9001  | 
 | 289 | +   $make MODE=gui CFG=cfg1_CMOS_SDR_1Lanes TST=test_program  | 
 | 290 | + | 
 | 291 | +The built projects can be found in the ``runs`` folder, where each configuration  | 
 | 292 | +specific build has it's own folder named after the configuration file's name.  | 
 | 293 | +Example: if the following command was run for a single configuration in the  | 
 | 294 | +clean folder (no runs folder available):  | 
 | 295 | + | 
 | 296 | +``make CFG=cfg1_CMOS_SDR_1Lanes``  | 
 | 297 | + | 
 | 298 | +Then the subfolder under ``runs`` name will be:  | 
 | 299 | + | 
 | 300 | +``cfg1_CMOS_SDR_1Lanes``  | 
 | 301 | + | 
 | 302 | +Resources  | 
 | 303 | +-------------------------------------------------------------------------------  | 
 | 304 | + | 
 | 305 | +HDL related dependencies forming the DUT  | 
 | 306 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 307 | + | 
 | 308 | +.. list-table::  | 
 | 309 | +   :widths: 30 45 25  | 
 | 310 | +   :header-rows: 1  | 
 | 311 | + | 
 | 312 | +   * - IP name  | 
 | 313 | +     - Source code link  | 
 | 314 | +     - Documentation link  | 
 | 315 | +   * - AXI_ADRV9001  | 
 | 316 | +     - :git-hdl:`library/axi_adrv9001`  | 
 | 317 | +     - :external+hdl:ref:`axi_adrv9001`  | 
 | 318 | +   * - AXI_DMAC  | 
 | 319 | +     - :git-hdl:`library/axi_dmac`  | 
 | 320 | +     - :external+hdl:ref:`axi_dmac`  | 
 | 321 | +   * - UTIL_CPACK2  | 
 | 322 | +     - :git-hdl:`library/util_pack/util_cpack2`  | 
 | 323 | +     - :external+hdl:ref:`util_cpack2`  | 
 | 324 | +   * - UTIL_UPACK2  | 
 | 325 | +     - :git-hdl:`library/util_pack/util_upack2`  | 
 | 326 | +     - :external+hdl:ref:`util_upack2`  | 
 | 327 | + | 
 | 328 | +Testbenches related dependencies  | 
 | 329 | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  | 
 | 330 | + | 
 | 331 | +.. include:: ../../common/dependency_common.rst  | 
 | 332 | + | 
 | 333 | +Testbench specific dependencies:  | 
 | 334 | + | 
 | 335 | +.. list-table::  | 
 | 336 | +   :widths: 30 45 25  | 
 | 337 | +   :header-rows: 1  | 
 | 338 | + | 
 | 339 | +   * - SV dependency name  | 
 | 340 | +     - Source code link  | 
 | 341 | +     - Documentation link  | 
 | 342 | +   * - ADC_API  | 
 | 343 | +     - :git-testbenches:`library/drivers/adc_api_pkg.sv`  | 
 | 344 | +     - ---  | 
 | 345 | +   * - COMMON_API  | 
 | 346 | +     - :git-testbenches:`library/drivers/common_api_pkg.sv`  | 
 | 347 | +     - ---  | 
 | 348 | +   * - DAC_API  | 
 | 349 | +     - :git-testbenches:`library/drivers/dac_api_pkg.sv`  | 
 | 350 | +     - ---  | 
 | 351 | +   * - DMAC_API  | 
 | 352 | +     - :git-testbenches:`library/drivers/dmac/dmac_api.sv`  | 
 | 353 | +     - ---  | 
 | 354 | + | 
 | 355 | +.. include:: ../../../common/more_information.rst  | 
 | 356 | + | 
 | 357 | +.. include:: ../../../common/support.rst  | 
0 commit comments