主要内容

基于AD9361/AD9364的HW/SW协同设计QPSK收发

这个例子展示了如何在Zynq无线电平台上实现算法,这些算法是在ARM和FPGA结构上划分的。QPSK的发送和接收功能在硬件和软件上实现,并映射到无线电平台,如下图所示。

所需产品:下载188bet金宝搏

  • 金宝app

  • 通信工具箱

  • 高密度脂蛋白编码器

  • Xilinx Zyn金宝appq的HDL编码器支持包

  • 嵌入式编码器

  • 金宝app仿真软件编码器

  • Xilinx Zynq的嵌入式金宝app编码器支持包

  • Xilinx基于zynq的无线电通信工具箱支持金宝app包(此包)

介绍

在本例中,QPSK系统的发送和接收FPGA实现被组合到一个HDL IP核中,并在Zynq可编程逻辑(PL)上实现。数据的编解码通过代码生成在Zynq ARM处理器上运行。一些控制参数被添加到FPGA IP核中,以显示如何使用从Simulink访问的AXI4-Lite寄存器实时调整设计。金宝app

设置

如果您还没有这样做,请确保您遵循软硬件协同设计的安装在文档中。

硬件生成模型

硬件生成模型用于开发希望在FPGA结构上实现的功能。对hdl优化的QPSK发射器和接收器进行建模,然后在Zynq无线电平台的FPGA结构上实现。在这个例子中,我们在一块板上发送和接收,但是,这个例子可以修改为在频分双工(FDD)中工作,通过移动发送和接收中心频率,并在两块单独的板上使用相同的模型。

打开模型。

硬件/软件划分:通常,FPGA的可编程逻辑用于高速率的信号处理,而ARM用于较慢速率的控制功能。在这个例子中,QPSK发送和接收物理层前端是在可编程逻辑上实现的,因为这些包括高速率操作,如增益控制、滤波和频率补偿。数据编解码速度较慢,在ARM上实现,解码后发送给主机打印。

用于实现FPGA IP核和生成软件接口模型的IP核生成工作流有一些具体的要求:

  • 在HDL子系统的端口不支持复杂的输入和输出。金宝app因此,实信号和虚信号必须在子系统边界上建模。

  • 数据输入和输出到子系统的模型使用单独的数据和有效的信号。子系统的输入和输出时钟率必须相等,在Simulink中,数据和有效线路必须以相同的采样率驱动。金宝app有效信号也必须在用户逻辑的输入和输出处建模。

ax4 -lite控制端口txSrcSelect:一个控制输入txSrcSelect,以允许对传输的数据进行一些控制。的txSrcSelect端口用于在两个不同的数据源之间为发射机选择。如果txSrcSelectport为true时,发射器的数据源将是存储在FPGA fabric上的查询表,并且接收到的数据应该类似于在其他QPSK示例中看到的“Hello World 0XX”字符串。如果txSrcSelect端口为false时,接收数据的数据源将是ARM处理器,ARM处理器将实时生成样本并将样本发送到FPGA fabric上的发射器。这里的信息是“*Zynq HW/SW Co-design*”。消息文本取自工作区变量txtStr可以在编译时修改,以更改消息。注意,这个字符串的长度必须小于24个字符。

AXI4-lite控制端口rxStreamEnable:一个控制输入rxStreamEnable,以确保HDL算法仅在该输入为真时处理数据。的rxStreamEnablePort在模拟硬件生成模型时总是为真。当整个设计在FPGA fabric和Zynq Radio平台的ARM处理器上实现时,只有当发射器HDL算法开始传输有效数据时,该值才会被设置为true,以确保接收器正确锁定。

您可以运行该模型并确认其操作。通过双击开关内部Tx开关您可以选择从哪个源进行传输。请注意,转到块用于模拟天线连接,并将发送用户逻辑输出处的传输数据传递到接收用户逻辑的输入处。

IP核生成流程

一旦对硬件子系统的仿真行为感到满意,就可以开始生成HDL IP Core,将其与SDR参考设计集成,并生成在ARM上运行的软件。

在准备目标时,必须通过调用来设置Xilinx工具链hdlsetuptoolpath.例如:

> > hdlsetuptoolpath (“ToolName”“Xilinx Vivado”“路径”“C: \ Xilinx \ Vivado \ 2019.1 \ bin \ vivado.bat ');

右键单击,启动目标工作流HDL_QPSK子系统和选择HDL代码/ HDL工作流顾问

  • 在步骤1.1中,选择IP核心代ZCU102和FMCOMMS2/3/4, ZC706和FMCOMMS2/3/4, ZedBoard和FMCOMMS2/3/4, ZC706和FMCOMMS5。

  • 在步骤1.2中,选择接收和发送路径参考设计。您可以将参考设计参数保留为默认值。

  • 在步骤1.3中,可以使用接口表将用户逻辑信号映射到参考设计中可用的接口信号。在本例中,我们只使用一个通道,因此通道1连接应该连接到如下所示的相关端口。

  • 在步骤1.4中,根据系统的基带采样率,确保将DUT合成频率设置为一个合理的数字。在发货示例中,采样率刚刚高于520ksps,因此1MHz的合成频率就足够了。

  • 步骤2通过进行一些设计检查来为HDL代码生成准备模型。

  • 步骤3为IP核执行实际的HDL代码生成。

  • 步骤4将新生成的IP核集成到更大的Zynq SDR参考设计中,生成比特流并帮助您加载到板上。

依次执行每一步以体验完整的工作流,或者,如果您已经熟悉准备和HDL代码生成阶段,右键单击左侧目录中的步骤4.1并选择运行到选定的任务.您不应该修改步骤2或步骤3中的任何默认设置。

软件生成模型和块库

  • 在步骤4.2中,工作流生成Zynq软件生成接口模型和块库。单击运行这个任务按钮的默认设置。

软件界面库

这个库包含了从HDL_QPSK子系统生成的AXI Interface块。注意,这只公开了AXI4-lite控制端口,而没有公开数据端口。数据端口位于接收/发送模块上,代表FPGA用户逻辑与ARM之间的数据接口。如果您在下游模型中使用库块,那么您对HDL子系统所做的任何更新都将自动传播到这个库,然后在您运行工作流时传播到您的软件生成模型。在本例中,硬件生成模型不包含任何SDR发送或接收块,因此无法填充这些块上的参数。在使用库块时,必须确保为应用程序正确配置参数。

软件界面模型

软件接口模型可以作为针对Zynq的全面软件开发的起点:外部模式模拟、环内处理器和全面部署。注意,每次运行步骤4.2时,生成的模型都会被覆盖,所以建议将这个模型保存在一个唯一的名称下,并在其中开发软件算法。已经提供了一个软件界面模型,它显示了您如何决定构建这个模型,请参阅部分在Zynq董事会运行软件和硬件

位流生成和加载

工作流的其余部分用于为FPGA fabric生成位流并将其下载到电路板。

  • 在步骤4.3中,工作流顾问为FPGA fabric生成一个比特流。您可以选择在外部shell中执行此步骤,通过勾选所选内容在外部运行构建流程.此选择允许您在构建FPGA图像时继续使用MATLAB。在完成一些基本的项目检查之后,该步骤将在几分钟内完成,并且该步骤将被标记为一个绿色的复选标记。但是,必须等到外部shell显示了成功的位流构建之后,才能继续下一步。

  • 步骤4.4下载比特流到设备。在继续此步骤之前,调用zynq函数的语法如下,以确保用无线电硬件的正确物理IP地址设置MATLAB。

>> devzynq = zynq(“linux”“192.168.3.2”“根”“根”“/ tmp”);

缺省情况下,无线电硬件的物理IP地址为192.168.3.2。如果在硬件设置过程中更改了无线电硬件IP地址,则必须提供该地址。

或者,如果你想在外部加载比特流工作流的顾问,创建SDR无线电对象并调用downloadImage函数作用于对象。

如果在1.1步骤中选择ADI RF SOM, ZC706和FMCOMMS2/3/4, ZedBoard和FMCOMMS2/3/4,或ZCU102和FMCOMMS2/3/4射频设备,创建一个AD936x射频对象。

> radio = sdrdev(“AD936x”);

如果在步骤1.1中选择了ZC706和FMCOMMS5无线设备,创建一个FMCOMMS5无线对象。

> radio = sdrdev(“FMCOMMS5”);

使用与所选无线电设备接口的无线电对象下载位流。

> > downloadImage(广播,“FPGAImage”...“hdl_prj \ vivado_ip_prj \ vivado_prj.runs \ impl_1 \ system_top.bit '%生成的位流的路径

构建QPSK软件接口模型

已经提供了一个软件界面模型,它展示了如何修改生成的模型来为QPSK示例设置它。该接口模型允许您在其中运行模型监视和优化模式或完全部署。

打开模型。

注意,在软件接口模型中,AD936x发射机模块处理帧来采样串行化。

建立在ARM处理器上运行的软件模型

应用程序模型已经按照硬件软件合作设计工作流,部分配置软件接口模型

  • 该型号已配置为使用Xilinx Zynq-7000基板目标运行,用于以下硬件:ADI RF SOM ZedBoard和FMCOMMS2/3/4 ZC706和FMCOMMS2/3/4/5

  • 如果您正在使用ZCU102和FMCOMMS2/3/4,双击Selected Hardware Board Target块更改配置,以使用Xilinx Zynq UltraScale+ MPSoC ZCU102 IIO Radio Board Target。

  • 模型连续地发送和接收数据,因此它被配置为从Transmit中断运行。这确保了ARM和FPGA同步运行,并意味着软件将由帧速率的时间表滴答驱动。

为了确保ARM处理器的高效使用,通过使用For Iterator子系统和MATLAB函数块一次连接50帧,将发送帧的大小增加到10000帧。随后的Rate Transition块强制来自For Iterator子系统的数据速率与传输数据速率匹配。

  • 发射机底流没有连接到停止块,因为当运行时源开关被拨动时可能会发生底流监视和优化模式。这是由于增加了所需的处理监视和优化模式寄存器写道。请参阅下面关于使用UDP块来控制硬件运行模型的部分。

  • rxStreamEnableAXI4-lite控制端口延迟2帧周期。这确保发射机在接收机之前运行,以获得最健壮的性能。

  • 由于QPSK接收机通过两次操作包含一个下采样,使用用户逻辑输出的有效信号,将有效采样率降低到时钟率的一半。因此,在该模型中,ARM处理器的帧率被设置为采样率乘以帧大小的一半。由于同样的原因,接收机的帧大小是发射机的一半。

  • 接收超时时间设置为200\μ美元S,相对于帧周期很小。

在Zynq董事会运行软件和硬件

监视和优化模式允许您从Simulink模型控制配置。金宝app一旦设计开始运行,通过切换Tx switch,在从ARM或FPGA fabric来源数据之间进行切换。

一旦ARM解码了QPSK消息,它使用在软件接口模型中发现的UDP发送块通过以太网链路将结果发送回主机。UDP发送块已经配置使用主机的默认IP地址'192.168.3.1'。如果在硬件设置过程中更改了IP地址,则必须提供该地址。提供了一个简单的UDP接收模型,可用于接收解码后的数据,并在诊断查看器中显示结果。

打开模型。

您还可以完全部署该设计以在板上运行,与Simulink断开连接。金宝app在Simuli金宝appnk工具栏中,单击构建、部署和启动.在此模式下,您将无法调优参数。

使用UDP块控制用户逻辑

监视和优化模式需要在硬件上运行的软件中包含一些开销,以处理主机和板之间的通信。从软件接口模型中可以看出,在ARM和FPGA之间切换发射机源会导致传输底流。提供了一个替代的接口模型,表明UDP块可以作为一个替代的交换机制,需要更少的开销。

打开模型。

在这个模型中,交换机已经被UDP接收块取代,它将能够接收UDP包并输出源选择值。对模型作了进一步的修改。

  • 发射机底流现在已连接到一个停止块,当检测到底流时,将导致模型退出。当硬件启动时,一个阶跃源用于对前10帧周期的溢出信号进行门控。当发射机执行缓冲,然后接收机在两帧之后开始时,可能会经历一些下流。接收器初始化将导致处理器上的一次性负载,这可能会导致下流。

  • UDP Receive块的默认输出值为0,因此在UDP Receive块和多路复用器之间放置了一个逆变器,以确保发射器与FPGA发送源一起启动。在Simuli金宝appnk工具栏中,单击构建、部署和启动.一旦模型部署到硬件上,可以使用UDP发送源来驱动发送源选择。

一个简单的UDP发射机模型已经提供了,它可以用来驱动在以太网链路上的硬件上的传输源选择。UDP发送块发现在发射机模型已经配置使用默认IP地址的无线电'192.168.3.2'。如果在硬件设置过程中更改了IP地址,则必须提供该地址。UDP接收块包括在这个模型中。它可以用来接收解码的数据,并在诊断查看器中显示结果。

打开模型。

这个模型已经配置为运行单个步骤,并发送包含源选择值的单一UDP包。将源选择设置为您想要的源,并单击play发送UDP控制包。