0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AD9361芯片进行数据接口逻辑代码的编写

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-07-01 09:59 次阅读

FPGA实现AD9361数据接口逻辑

1 引言

  

本文通过以高速AD9361芯片为例进行数据接口逻辑代码的编写,利用SelectIO IP快速高效完成芯片驱动的生成。

2 AD9361

2.1 芯片简介

  AD9361是一款面向3G和4G基站应用的高性能、高集成度的射频(RF)Agile Transceiver捷变收发器。该器件的可编程性和宽带能力使其成为多种收发器应用的理想选择。该器件集RF前端与灵活的混合信号基带部分为一体,集成频率合成器,为处理器提供可配置数字接口,从而简化设计导入。AD9361接收器LO工作频率范围为70 MHz至6.0 GHz,发射器LO工作频率范围为47 MHz至6.0 GHz,涵盖大部分特许执照和免执照频段,支持的通道带宽范围为200 kHz以下至56 MHz,整体结构图如图 1 AD9361整体结构图所示。

8538d894-f8d4-11ec-ba43-dac502259ad0.png图 1 AD9361整体结构图

•集成12位DACADC的RF2×2收发器
• TX频段:47MHz至6.0GHz
• RX频段:70MHz至6.0GHz
•支持TDD和FDD操作
•可调谐通道带宽:<200 kHz至56 MHz
• 双通道接收器:6路差分或12路单端输入
• 出色的接收器灵敏度,噪声系数为2 dB (800 MHz LO)
• RX增益控制
  o 实时监控和控制信号用于手动增益
  o 独立的自动增益控制
• 双发射器:4路差分输出
• 高线性度宽带发射器
  o TX EVM:≤−40 dB
  o TX噪声:≤−157 dBm/Hz本底噪声
  o TX监控器:动态范围≥66 dB,精度=1 dB
• 集成式小数N分频频率合成器
• 2.4 Hz最大本振(LO)步长
• 多器件同步
• CMOS/LVDS数字接口

2.2 参数配置

  用户可以根据自己的需求将数据接口通过SPI配置成LVDS或CMOS接口,也可以还可以选择FDD或TDD工作方式,以及数据速率可以选择SDR或DDR。只需要通过配置软件设置即可,如图 2 AD9361数据接口配置参数所示,详细的配置教程见AD936x Evaluation Software 详细配置。

856799c2-f8d4-11ec-ba43-dac502259ad0.png图 2 AD9361数据接口配置参数

  在进行数据验证时,也可以使用测试模式,对收发数据进行验证以保证系统的正确性。另外,还可以对输入时钟进行延时调节或者通过SelectIO的delay、delayctrl功能对时钟信号进行微调,以满足时序要求。芯片数据时钟与数据之间的时序可靠性也可以通过芯片内部的延时寄存器0x006、0x007进行条件,以此达到要求,具体的SPI配置寄存器时序如图 3 AD9361 寄存器配置接口SPI时序所示。此方面不是本文重点,不做展开,更多内容参考官方data sheet。

85b42b70-f8d4-11ec-ba43-dac502259ad0.png图 3 AD9361 寄存器配置接口SPI时序

  本小节使用的数据接口参数:LVDS、FDD、DDR,对应的时序逻辑也是根据该参数进行设计。

2.3 引脚

RX数据时序接口如下:

85d1b58c-f8d4-11ec-ba43-dac502259ad0.png860712b8-f8d4-11ec-ba43-dac502259ad0.png863ccc6e-f8d4-11ec-ba43-dac502259ad0.png86711b2c-f8d4-11ec-ba43-dac502259ad0.png

TX数据时序接口如下:

86a379e6-f8d4-11ec-ba43-dac502259ad0.png86cc8d18-f8d4-11ec-ba43-dac502259ad0.png870eaf68-f8d4-11ec-ba43-dac502259ad0.png873fefd8-f8d4-11ec-ba43-dac502259ad0.png

2.4 接口时序

  以下使用的数据接口参数:LVDS、FDD、DDR,根据不同的通道数可以得到不同的数据时序,用户在解析数据时只要按照对应的结构进行拼接即可。

878a9344-f8d4-11ec-ba43-dac502259ad0.png图 4 AD9361接收数据路径 87b87d04-f8d4-11ec-ba43-dac502259ad0.png图 5 AD9361发射接口路径

3 参考代码

3.1 SelectIO配置

  根据以上对AD9361的了解,就可以轻松的配置SelectIO IP的GUI界面了。芯片既包括发射模块TX又包括接收模块RX,所以IO类型选择chip to chip。

87e13d5c-f8d4-11ec-ba43-dac502259ad0.png图 6 SelectIO配置界面1

  根据上述参数配置部分,自然就选择DDR。数据接口包括时钟CLK、Frame对齐信号与差分数据端Data[05:0],要同时对Frame与Data信号进行时序解析,所以端口宽度设置为7.

8821c7dc-f8d4-11ec-ba43-dac502259ad0.png图 7 SelectIO配置界面2

  由于芯片内部寄存器0x006、0x007可以确保时钟与数据满足时序要求,所以不需要延时模块,以节约FPGA逻辑资源。

89403afe-f8d4-11ec-ba43-dac502259ad0.png896cb93a-f8d4-11ec-ba43-dac502259ad0.png

3.2 数据解析

//-------------------------------------------------------------------
//用于将接收时钟与数据进行单端与差分的变换
//-------------------------------------------------------------------
selectio_ipu_selectio_ip(
//Fromthesystemintothedevice
.DATA_IN_FROM_PINS_P(ad_rx_data_in_p),
//从AD接收端接收到的单端数据与标志
.DATA_IN_FROM_PINS_N(ad_rx_data_in_n),
//从AD接收端接收到的单端数据与标志
.DATA_IN_TO_DEVICE(ad_rx_data),
//将AD接收端接收到的数据与标志转换为单端数据
//Fromthedeviceouttothesystem
.DATA_OUT_FROM_DEVICE(ad_tx_data),
//将要发送的DA数据与标志转换为单端数据
.DATA_OUT_TO_PINS_P(ad_tx_data_out_p),
//发送端的单端DA数据与标志
.DATA_OUT_TO_PINS_N(ad_tx_data_out_n),
//发送端的单端DA数据与标志
.CLK_TO_PINS_P(ad_fb_clk_p),
//将AD接收端的输入时钟用于发射时钟
.CLK_TO_PINS_N(ad_fb_clk_n),
//将AD接收端的输入时钟用于发射时钟
.CLK_IN_P(ad_data_clk_p),
//AD接收端的单端输入时钟
.CLK_IN_N(ad_data_clk_n),
//AD接收端的单端输入时钟
.CLK_OUT(ad9361_data_clk),
//将AD接收端的差分输入时钟转变为单端时钟
.CLK_RESET(reset),
//用于AD输入时钟的复位,高有效
.IO_RESET(reset)
//用于单端、差分变换的复位,高有效
);

//-------------------------------------------------------------------
//发送数据的生成
//-------------------------------------------------------------------
assignad_tx0_msb_q=ad_tx0_data[23:18];
assignad_tx0_lsb_q=ad_tx0_data[17:12];
assignad_tx0_msb_i=ad_tx0_data[11:06];
assignad_tx0_lsb_i=ad_tx0_data[05:00];
assignad_tx1_msb_q=ad_tx1_data[23:18];
assignad_tx1_lsb_q=ad_tx1_data[17:12];
assignad_tx1_msb_i=ad_tx1_data[11:06];
assignad_tx1_lsb_i=ad_tx1_data[05:00];

reg[13:0]ad_tx_data;

//-------------------------------------------------------------------
//选择要发送的I与Q数据
//-------------------------------------------------------------------
always@(posedgead9361_data_clkorposedgereset)begin
if(reset)
ad_tx_data<=0;
  else if((ad_tx_frame_reg==0)&&(ad_tx_frame==1))
   ad_tx_data<={ad_tx_frame,ad_tx0_msb_q,ad_tx_frame,ad_tx0_msb_i};
  else if((ad_tx_frame_reg==1)&&(ad_tx_frame==1))
   ad_tx_data<={ad_tx_frame,ad_tx0_lsb_q,ad_tx_frame,ad_tx0_lsb_i};
  else if((ad_tx_frame_reg==1)&&(ad_tx_frame==0))
   ad_tx_data<={ad_tx_frame,ad_tx1_msb_q,ad_tx_frame,ad_tx1_msb_i};
  else if((ad_tx_frame_reg==0)&&(ad_tx_frame==0))
   ad_tx_data<={ad_tx_frame,ad_tx1_lsb_q,ad_tx_frame,ad_tx1_lsb_i};  
 end 

//-------------------------------------------------------------------
//选择接收的I与Q数据
//-------------------------------------------------------------------
 always @(posedge ad9361_data_clk or posedge reset) begin
  if(reset) begin
   ad_rx0_msb_i<=0;
   ad_rx0_msb_q<=0;
   ad_rx0_lsb_i<=0;
   ad_rx0_lsb_q<=0;
   ad_rx1_msb_i<=0;
   ad_rx1_msb_q<=0;
   ad_rx1_lsb_i<=0;
   ad_rx1_lsb_q<=0;   
  end
  else if((ad_rx_frame_reg==0)&&(ad_rx_frame==1)) begin
   ad_rx0_msb_i<=ad_rx_data[05:0];
   ad_rx0_msb_q<=ad_rx_data[12:7];
  end
  else if((ad_rx_frame_reg==1)&&(ad_rx_frame==1)) begin
   ad_rx0_lsb_i<=ad_rx_data[05:0];
   ad_rx0_lsb_q<=ad_rx_data[12:7];
  end
  else if((ad_rx_frame_reg==1)&&(ad_rx_frame==0)) begin
   ad_rx1_msb_i<=ad_rx_data[05:0];
   ad_rx1_msb_q<=ad_rx_data[12:7];
  end
  else if((ad_rx_frame_reg==0)&&(ad_rx_frame==0)) begin
   ad_rx1_lsb_i<=ad_rx_data[05:0];
   ad_rx1_lsb_q<=ad_rx_data[12:7];
  end 
 end
 
 wire [23:0]  ad_rx0_fifo_data;
 wire [23:0]  ad_rx1_fifo_data;
 assign ad_rx0_fifo_data={ad_rx0_msb_q,ad_rx0_lsb_q,ad_rx0_msb_i,ad_rx0_lsb_i};
 assign ad_rx1_fifo_data={ad_rx1_msb_q,ad_rx1_lsb_q,ad_rx1_msb_i,ad_rx1_lsb_i};

原文标题:FPGA实现AD9361数据接口逻辑

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    602986
  • 芯片
    +关注

    关注

    455

    文章

    50714

    浏览量

    423138
  • 数据接口
    +关注

    关注

    1

    文章

    79

    浏览量

    17836
  • 代码
    +关注

    关注

    30

    文章

    4779

    浏览量

    68521
  • AD9361
    +关注

    关注

    8

    文章

    35

    浏览量

    37123
收藏 人收藏

    评论

    相关推荐

    关于AD9361的抗阻塞能力的实测

    在窄带应用中,零中频软件无线电芯片已经非常流行,其代表是ADI公司的AD9361
    的头像 发表于 05-26 10:17 2409次阅读

    AD9361接收IQ轨迹图质量

    ,矩形窗(Rectangle)成型发射 2. 朋友测试——(某公司使用AD9361自己做的板子测试) 其他说明:测试之前,我已经完成芯片的数字接口测试,即在基带芯片发射随机
    发表于 08-20 07:43

    ad9361 lvds接口调试

    AD9361 lvds模式接口。之前用ad9361时至调试了cmos接口,现在调试一下lvds模式。接口模式 : 2r2t每个通道
    发表于 08-30 11:49

    AD9361无发射信号

    TX1通道接到频谱仪上没有任何的信号输出 AD9361我配置的是单通道、LVDS输出,DATA_CLK,FB_CLK也都有输出,数字接口部分我参照AD9361的IP核编写的TX_FRA
    发表于 09-25 14:19

    AD9361数字CMOS接口时序问题

    AD9361在1R1T传输时,当RX_FRAME和TX_FRAME信号为高电平时(即电平模式),AD9361数据收发并口传输时序图? 数据手册中并口的timming使用的是pulse
    发表于 12-19 09:25

    请问如何将多片AD9361芯片进行相位同步

    如何将多片AD9361芯片进行相位同步,技术文档有说通过sync管脚进行MCS同步,但是仅仅只针对数据时钟完成同步。个人理解
    发表于 12-25 11:42

    请问如何在VC++下使用IIO类库API函数通过PC的网口对AD9361进行配置编程

    AD9361,并且通过网口接收雷达回波数据,也就是一个发送功能一个接收功能,现在有下面几个问题:1)是否IIO类库提供了API函数集,支持一些芯片的直接访问,比如可以直接对AD9361
    发表于 01-07 10:11

    AD9361 FDD模式没有任何输出

    AD9361采用官网zynq7000 no os版本驱动程序进行配置,芯片初始化完成,并且寄存器回读正确,配置AD9361在FDD模式下工作,ad9
    发表于 01-14 09:10

    AD9361 Datasheet

    AD9361 Datasheet 射频芯片中的佼佼者 性能很好
    发表于 06-06 10:29 0次下载

    基于 ZYNQ系列 SoC和AD9361实现的简易频谱分析仪

    本文设计了基于ZYNQ系列SoC(System on chip)和AD9361实现的简易频谱分析仪,频谱数据可以通过串口发送给上位机,并在上位机中通过MATLAB进行数据处理和分析。
    的头像 发表于 04-11 10:42 1.4w次阅读

    基于FPGA对零中频射频收发器AD9361进行配置

    无人机机载数据链设备的系统架构如图1 所示。首先,FPGA 通过EMIF 接收DSP 的高清压缩视频、通过UART 接收飞控计算机的遥测数据,压缩后的视频数据和遥测数据在FPGA 组帧
    的头像 发表于 04-17 15:32 2w次阅读

    基于ADI AD9361模块AD-FMCOMMS3-EBZ搭建的AD9361 RF收发测试平台案例

    AD9361芯片工作频率范围为70 MHz至6 GHz,涵盖大部分特许执照和免执照频段,通过对AD9361自身可编程改变采样速率、数字滤波器和抽取参数,使该芯片支持的通道带宽范围为低于
    的头像 发表于 03-09 11:47 6457次阅读

    以高速AD9361芯片为例进行数据接口逻辑代码编写

    本文通过以高速AD9361芯片为例进行数据接口逻辑代码编写
    的头像 发表于 06-07 14:34 6982次阅读
    以高速<b class='flag-5'>AD9361</b><b class='flag-5'>芯片</b>为例<b class='flag-5'>进行数据</b><b class='flag-5'>接口</b><b class='flag-5'>逻辑</b><b class='flag-5'>代码</b>的<b class='flag-5'>编写</b>

    AD9361数据路径在低电压差分信号(LVDS)模式下运行

    接下来将介绍AD9361数据路径在低电压差分信号(LVDS)模式下运行。AD9361数据接口使用并行总线(P0和P1)在
    的头像 发表于 04-25 15:51 6407次阅读
    <b class='flag-5'>AD9361</b><b class='flag-5'>数据</b>路径在低电压差分信号(LVDS)模式下运行

    ad9361接收电平范围

    AD9361是一种宽频带软件可定义收发器芯片,由ADI(Analog Devices Inc.)公司研发,可用于各种射频(RF)应用。它是一种全集成的射频收发器,实现了收发器功能。在这篇文章中,我们
    的头像 发表于 12-26 15:49 3248次阅读