近期忙完手头的活,难得有时间继续研究一下自己感兴趣的事情。一直想着把上半年项目采购的一套软件无线电的平台搭建起来(ZCU102+ADRV909),近期做了几个实验,就把自己做的一点进展与大家分享。希望能给感兴趣的朋友带来一点帮助,也请有经验的大神们指点指点。废话不多说,直接进入正题。。。。。。
万里长征第一步,先把系统搭建起来吧!我是参考我之前搭建 的AD9361+zedboard的no os 项目搭建起来,链接:windows 下AD9361的 no-os master 工程搭建_Bronceyang的博客-CSDN博客 其实ADI公司提供的这些no os 开源项目的搭建套路是一样的。举一反三就行了。
一、搭建工程需要的文件
需要下载的东西:
HDL:https ://github.com/analogdevicesinc/hdl/releases
No OS:https://github.com/analogdevicesinc/no-OS
注意:下载的hdl版本要和自己的vivado版本配套,我这次用的是vivado2019.2.
下载网速比较慢的话。可以从我的资源里面下载。
Windows编译环境需要安装Cygwin ,注意安装过程中要一定选make 库。
参考博客:https://blog.csdn.net/u010356768/article/details/90756742
二、HDL部分搭建
我使用的vivado版本为2019.2,大家根据自己的实际情况选择自己的版本。
三条命令:
1. export PATH=$PATH:/cygdrive/e/install_tool/xilinx/Vivado/2019.2/bin
2. cd /cygdrive/e/ADRV9009_pro/hdl-master/projects/adrv9009/zcu102
3. make
1.配置环境,新增环境变量,并检查
2.切换到文件目录,make一下就ok了,需要等待一段时间,十多分钟。
make成功之后,ls查看可以看到多了很多文件。
切换带Windows文件目录下可以看到如下,用vivado2019.2 打开adrv9009_zcu102.xpr
打开block design 可以看到搭建了起来的框图,在软件界面右上可以看到bit文件也已经生成了。
对部分放大可以看到如下
三、软件部分的搭建
在Vivado编译环境下,导出.xas文件,并在vitis 中根据.xas为平台搭建应用程序工程。
回到no-os-master文件,进入一下目录,打开READE文件,文件让我们根据自己的硬件平台是xilinx还是altera选择复制需要用到的文件。
# Additional required source files:
#ifdef ALTERA_PLATFORM
cp ../../../include/axi_io.h devices/adi_hal/
cp ../../../include/error.h devices/adi_hal/
cp ../../../include/spi.h devices/adi_hal/
cp ../../../include/gpio.h devices/adi_hal/
cp ../../../include/delay.h devices/adi_hal/
cp ../../../drivers/spi/spi.c devices/adi_hal/
cp ../../../drivers/platform/altera/axi_io.c devices/adi_hal/
cp ../../../drivers/platform/altera/altera_spi.c devices/adi_hal/
cp ../../../drivers/platform/altera/spi_extra.h devices/adi_hal/
cp ../../../drivers/platform/altera/gpio.c devices/adi_hal/
cp ../../../drivers/platform/altera/gpio_extra.h devices/adi_hal/
cp ../../../drivers/platform/altera/delay.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_adc_core/axi_adc_core.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_adc_core/axi_adc_core.h devices/adi_hal/
cp ../../../drivers/axi_core/axi_dac_core/axi_dac_core.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_dac_core/axi_dac_core.h devices/adi_hal/
cp ../../../drivers/axi_core/axi_dmac/axi_dmac.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_dmac/axi_dmac.h devices/adi_hal/
cp ../../../drivers/axi_core/clk_altera_a10_fpll/clk_altera_a10_fpll.c devices/adi_hal/
cp ../../../drivers/axi_core/clk_altera_a10_fpll/clk_altera_a10_fpll.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/altera_a10_atx_pll.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/altera_a10_atx_pll.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/altera_a10_cdr_pll.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/altera_a10_cdr_pll.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/altera_adxcvr.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/altera_adxcvr.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_rx.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_rx.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_tx.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_tx.h devices/adi_hal/
cp ../../../drivers/frequency/ad9528/ad9528.h devices/adi_hal/
cp ../../../drivers/frequency/ad9528/ad9528.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_agc.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_cals.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_error.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_gpio.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_hal.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_jesd204.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_radioctrl.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_rx.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_tx.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_user.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_agc.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_agc_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm_macros.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_cals.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_cals_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_error.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_error_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_gpio.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_gpio_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_hal.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_jesd204.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_jesd204_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_radioctrl.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_radioctrl_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_reg_addr_macros.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_rx.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_rx_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_tx.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_tx_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_user.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_version.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/firmware/talise_arm_binary.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/firmware/talise_stream_binary.h devices/adi_hal/
cp ../../../util/util.c devices/adi_hal/
cp ../../../include/util.h devices/adi_hal/
#else
cp ../../../include/axi_io.h devices/adi_hal/
cp ../../../include/error.h devices/adi_hal/
cp ../../../include/spi.h devices/adi_hal/
cp ../../../include/gpio.h devices/adi_hal/
cp ../../../include/delay.h devices/adi_hal/
cp ../../../drivers/spi/spi.c devices/adi_hal/
cp ../../../drivers/platform/xilinx/axi_io.c devices/adi_hal/
cp ../../../drivers/platform/xilinx/xilinx_spi.c devices/adi_hal/
cp ../../../drivers/platform/xilinx/spi_extra.h devices/adi_hal/
cp ../../../drivers/platform/xilinx/gpio.c devices/adi_hal/
cp ../../../drivers/platform/xilinx/gpio_extra.h devices/adi_hal/
cp ../../../drivers/platform/xilinx/delay.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_adc_core/axi_adc_core.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_adc_core/axi_adc_core.h devices/adi_hal/
cp ../../../drivers/axi_core/axi_dac_core/axi_dac_core.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_dac_core/axi_dac_core.h devices/adi_hal/
cp ../../../drivers/axi_core/axi_dmac/axi_dmac.c devices/adi_hal/
cp ../../../drivers/axi_core/axi_dmac/axi_dmac.h devices/adi_hal/
cp ../../../drivers/axi_core/clk_axi_clkgen/clk_axi_clkgen.c devices/adi_hal/
cp ../../../drivers/axi_core/clk_axi_clkgen/clk_axi_clkgen.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_adxcvr.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_adxcvr.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_rx.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_rx.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_tx.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/axi_jesd204_tx.h devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/xilinx_transceiver.c devices/adi_hal/
cp ../../../drivers/axi_core/jesd204/xilinx_transceiver.h devices/adi_hal/
cp ../../../drivers/frequency/ad9528/ad9528.h devices/adi_hal/
cp ../../../drivers/frequency/ad9528/ad9528.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_agc.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_cals.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_error.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_gpio.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_hal.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_jesd204.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_radioctrl.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_rx.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_tx.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_user.c devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_agc.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_agc_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm_macros.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_arm_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_cals.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_cals_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_error.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_error_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_gpio.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_gpio_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_hal.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_jesd204.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_jesd204_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_radioctrl.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_radioctrl_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_reg_addr_macros.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_rx.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_rx_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_tx.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_tx_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_types.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_user.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/api/talise_version.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/firmware/talise_arm_binary.h devices/adi_hal/
cp ../../../drivers/rf-transceiver/talise/firmware/talise_stream_binary.h devices/adi_hal/
cp ../../../util/util.c devices/adi_hal/
cp ../../../include/util.h devices/adi_hal/
#endif
READE是一个脚本文件,大家可以直接source 一下就把所有需要用到的文件都复制过去了。可以ls查看一下:
最后把adi_hal目录下的文件都复制到之前在vitis里面建立的应用程序的/src目录,进行编译一下检查错误就可以了,main()函数在headless.c文件中。
编译、上板子,运行结果如下:
串口打印信息:
Hello
rx_clkgen: MMCM-PLL locked (245760000 Hz)
tx_clkgen: MMCM-PLL locked (122880000 Hz)
rx_os_clkgen: MMCM-PLL locked (122880000 Hz)
rx_adxcvr: OK (9830400 kHz)
tx_adxcvr: OK (4915200 kHz)
rx_os_adxcvr: OK (4915200 kHz)
talise: Device Revision 192, Firmware 6.0.2, API 3.6.0.527765581332480005
talise: Calibrations completed successfully
rx_jesd status:
Link is enabled
Measured Link Clock: 245.786 MHz
Reported Link Clock: 245.760 MHz
Lane rate: 9830.400 MHz
Lane rate / 40: 245.760 MHz
LMFC rate: 7.680 MHz
Link status: DATA
SYSREF captured: Yes
SYSREF alignment error: No
tx_jesd status:
Link is enabled
Measured Link Clock: 122.893 MHz
Reported Link Clock: 122.880 MHz
Lane rate: 4915.200 MHz
Lane rate / 40: 122.880 MHz
LMFC rate: 7.680 MHz
SYNC~: deasserted
Link status: DATA
SYSREF captured: Yes
SYSREF alignment error: No
rx_os_jesd status:
Link is enabled
Measured Link Clock: 122.893 MHz
Reported Link Clock: 122.880 MHz
Lane rate: 4915.200 MHz
Lane rate / 40: 122.880 MHz
LMFC rate: 7.680 MHz
Link status: DATA
SYSREF captured: Yes
SYSREF alignment error: No
tx_dac: Successfully initialized (245785522 Hz)
rx_adc: Successfully initialized (245785522 Hz)
频谱仪上观察到的频谱如下: