将ADI no-OS软件移植到SDR-B1平台

1. 概述

某客户在使用我司SDR-B1软件无线电平台时,需要使用Vivado的ILA抓取AD9361的ADC波形,由于我司默认提供的代码是Linux的,不方便使用,ADI的no-OS软件则很方便,本文给出了将ADI no-OS软件移植到SDR-B1软件无线电平台的完整过程。另外,我司提供的Vivado工程是由ADI官方HDL代码通过编译、修改得到的,采用代码方式插入ILA并不容易,所以本文首先阐述如何在Block Design中使用ILA。

2. 在Block Design中使用ILA

使用Vivado打开sdr_b1_v11工程文件,展开源码并在system.bd上面双击,打开Block Design,如下图

在右侧出现的Diagram窗口中点击“+”图标,在出现的窗口中输入ila,如下图

双击ILA(Integrated Logic Analyzer),将ILA放到框图中,并将其拖放至合适位置。双击ILA图标,将其参数做如下修改

将ILA与util_ad9361_adc_fifo按照以下对应方式连接

ILA util_ad9361_adc_fifo
clk dout_clk
probe0 dout_data_0
probe1 dout_data_1
probe2 dout_data_2
probe3 dout_data_3

连接完成的框图如下所示

然后在system.bd上面点击右键->Generate Output Products,如下图

在出现的对话框中点击“Generate”,最后生成bitstream文件即可。

3. 创建SDK工程

bitstream文件生成之后,点击File->Export->Export Hardware,在出现的界面上勾选“Include Bitstream”,然后点击OK,如下图。

点击File->Launch SDK,在出现的界面中使用默认配置,点击OK,如下图。

Xilinx SDK启动完成后,界面如下所示。

点击File->New->Application Project,在出现的界面中按如下配置

点击Next,在接下来的界面中选择Empty Application,然后点击Finish,如下图。

将ADI官方的no-OS软件解压,本文使用的no-OS版本是no-OS-2019_R1,将以下文件复制到sdr_b1_v11\sdr_b1.sdk\ad9361\src中,也就是刚刚创建的Empty Application的源代码目录

  • no-OS-2019_R1\ad9361\sw中的.c与.h文件
  • no-OS-2019_R1\ad9361\sw\platform_xilinx中的全部文件
  • no-OS-2019_R1\ad9361\sw\console_commands中的全部文件

修改config.h,开启如下2行

#define CONSOLE_COMMANDS
#define XILINX_PLATFORM

此时回到Xilinx SDK界面,在左侧窗口中点击右键->refresh,可以看到刚刚添加进来的代码(点击refresh之后,Xilinx SDK会自动编译,但是编译遇到了问题,所以有红色的x),如下图

查看Xilinx SDK下方的Console窗口,可以看到编译出错的地方,是command.c中的包含文件ad9361_api.h路径出错,将其修改为

#include "ad9361_api.h"

保存后再次自动编译,不再出现错误,如下图

由于SDR-B1默认使用UART1作为调试串口,因此需要调整BSP配置,点击Xilinx->Board Support Package Settings,在出现的界面中点击“ad9361_bsp”,然后点击OK,如下图。

在出现的BSP配置界面中,点击左侧的Overview->standalone,将stdin与stdout修改为ps_uart_1,如下图

点击“OK”后代码会再次自动编译,编译完成后,Run->Run Configurations,在Xilinx C/C++ application (System Debugger)上面点击右键->New,如下图

按如下方式进行配置

然后点击“Apply”。

4. 运行SDR-B1并抓取ADC波形

将SDR-B1调整为JTAG启动模式,并将JTAG调试线,调试串口线、电源线及信号源与SDR-B1相连接,然后点击Run,稍等片刻,就可以看到窗口中的打印信息,如下图所示。

使用rx_lo_freq=1400命令将AD9361接收机本振频率设置为1400MHz,将信号源的频率设置为1400.1MHz,并在Vivado的Hardware Manager界面中使用ila抓取波形,结果如下图所示,与预期相符。