AD9371 Crossbar 和 I、Q数据 映射JESD204B传输层

AD9371 系列快速入口

AD9371+ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发

ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射

AD9371 官方例程 时钟间的关系与生成 : AD9371 官方例程HDL详解之JESD204B TX侧时钟生成(一)

JESD204B相关IP端口信号 : AD9371 官方例程HDL JESD204B相关IP端口信号

裸机程序配置 AD9528、AD9371、FPGA IP: AD9371 官方例程裸机SW 和 HDL配置概述(一)

AD9371 主函数: AD9371 官方例程 NO-OS 主函数 headless 梳理(一)

AD9371 主函数: AD9371 官方例程 NO-OS 主函数 headless 梳理(二)

前言


从FPGA中的 JESD204B 传输层 tx/rx 基带数据时,I、Q两路 谁占据传输层 组/解帧 时转换器 M0 的位置,谁占据转换器 M1 的位置,才能正确通过AD9371射频 ?

下述内容假设 TX sample =122.88M,RX 和 RX_OS sample =122.88M;TX 和 RX M=4 , RX_OS M=2;TX L=4, RX 和 RX_OS L=2;

TX传输层要求格式 , [ M3S1, M3S0, M2S1, M2S0, M1S1, M1S0, M0S1, M0S0]
RX传输层输出格式 , [ M3S0, M2S0, M1S0, M0S0]
RX_OS传输层输出格式,[ M1S1, M1S0, M0S1, M0S0]

Lane通道之间的连接关系见 AD9371 官方例程之 tx_jesd 与 xcvr接口映射


一、TXDeframer 的 DAC Crossbar 和 Lane Crossbar

官方例程 TX 分配 4个 LANE和4个转换器M

DAC Crossbar 被一直配置为 framerADC_XBar = 0xB1 = 1011 0001

Lane crossbar 被一直配置为 laneXbar= 0xE4 = 1110 0100;

即 :
LANE0 —> DEFRAMER INPUT 0 —> DEFRAMER OUTPUT 0 —> Tx1 I
LANE1 —> DEFRAMER INPUT 1 —> DEFRAMER OUTPUT 1 —> Tx1 Q
LANE2 —> DEFRAMER INPUT 2 —> DEFRAMER OUTPUT 2 —> Tx2 I
LANE3 —> DEFRAMER INPUT 3 —> DEFRAMER OUTPUT 3 —> Tx2 Q
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即:

SERDIN0 ——> LANE 0 ——>DEFRAMER INPUT 0 ——> DAC0 ——> DEFRAMER OUTPUT 0 ——> Tx1 I
SERDIN1 ——> LANE 1 ——>DEFRAMER INPUT 1 ——> DAC1 ——> DEFRAMER OUTPUT 1 ——> Tx1 Q
SERDIN2 ——> LANE 2 ——>DEFRAMER INPUT 2 ——> DAC2 ——> DEFRAMER OUTPUT 2 ——> Tx2 I
SERDIN3 ——> LANE 3 ——>DEFRAMER INPUT 3 ——> DAC3 ——> DEFRAMER OUTPUT 3 ——> Tx2 Q

二、RXFramer 的 ADC Crossbar 和 Lane Crossbar

官方例程 RX 分配 2个 LANE和4个转换器M

ADC Crossbar 被一直配置为 framerADC_XBar = 0xB1=1011 0001

Lane Crossbar 根据RX 转换器M 的数量
M=4,framerLaneXbar = 0x08=0000 1000; 使用 Rxframer outputs 0 and 2
M=2,framerLaneXbar = 0x04; 使用 Rxframer outputs 0 and 1

文章后续默认 M=4,framerLaneXbar = 0x08;

在这里插入图片描述

Rx1 I ——>RXFramer INPUT 0 ——>ADC0 ——> RXFramer OUTPUT 0 ——> LANE 0 ——> SERDOUT0
Rx1 Q ——>RXFramer INPUT 1 ——>ADC1 ——> RXFramer OUTPUT 0 ——> LANE 0 ——> SERDOUT0
Rx2 I ——>RXFramer INPUT 2 ——>ADC2 ——> RXFramer OUTPUT 2 ——> LANE 1 ——> SERDOUT1
Rx2 Q ——>RXFramer INPUT 3 ——>ADC3 ——> RXFramer OUTPUT 2 ——> LANE 1 ——> SERDOUT1

三、ObsRxFramer 的 ADC Crossbar 和 Lane Crossbar

官方例程 ObsRx 分配 2个 LANE和2个转换器M

ADC Crossbar 被一直配置为 framerADC_XBar = 0xB1=1011 0001

Lane Crossbar 被一直配置为 framerLaneXbar = 0x40=0100 0000; 使用 ObsRxframer outputs 0 and 1
在这里插入图片描述

在这里插入图片描述

Rx_OS I ——> ObsRxFramer INPUT 0 ——>ADC0 ——> ObsRxFramer OUTPUT 0 ——> LANE 2 ——> SERDOUT2
Rx_OS Q ——>ObsRxFramer INPUT 1 ——>ADC1 ——> ObsRxFramer OUTPUT 1 ——> LANE 3 ——> SERDOUT3

四、TX 的 I、Q 映射关系

第一节内容结合 Lane通道之间的连接关系 AD9371 官方例程之 tx_jesd 与 xcvr接口映射 ,可得到TX:

tx_phy0(tx_jesd) ——> SERDIN0 ——> Tx1 I
tx_phy1(tx_jesd) ——> SERDIN1 ——> Tx1 Q
tx_phy2(tx_jesd) ——> SERDIN2 ——> Tx2 I
tx_phy3(tx_jesd) ——> SERDIN3 ——> Tx2 Q


链路层:

而在 axi_ad9371_tx_jesd/tx IP核逻辑中输入数据 tx_data 经过加扰,字符替换标志后,输出 phy_data

tx_data(tx_jesd) ——> phy_data (tx_jesd)

phy_data [ 31: 0] (tx_jesd) = tx_phy0(tx_jesd)
phy_data [63:32] (tx_jesd) = tx_phy1(tx_jesd)
phy_data [95:64] (tx_jesd) = tx_phy2(tx_jesd)
phy_data [127:96] (tx_jesd)= tx_phy3(tx_jesd)


传输层

dac_ddata(tpl_core) ——> link_tdata(tpl_core) ——> tx_data(tx_jesd)

dac_ddata 格式 :[ M3S1, M3S0, M2S1, M2S0, M1S1, M1S0, M0S1, M0S0]

经过 组帧得到 link_tdata,link_tdata格式 Octets LSB first :

[ M3S1[OL], M3S0[OL], M2S1[OL], M2S0[OL], M1S1[OL], M1S0[OL], M0S1[OL], M0S0[OL]]

注意 : MmSn[OL] = { MmSn [7:0] ,MmSn [15:8] }

即:

M0S1, M0S0 ——> M0S1[OL], M0S0[OL] ——> tx_phy0(tx_jesd) ——> SERDIN0 ——> Tx1 I
M1S1, M1S0 ——> M1S1[OL], M1S0[OL] ——> tx_phy1(tx_jesd) ——> SERDIN1 ——> Tx1 Q
M2S1, M2S0 ——> M2S1[OL], M2S0[OL] ——> tx_phy2(tx_jesd) ——> SERDIN2 ——> Tx2 I
M3S1, M3S0 ——> M3S1[OL], M3S0[OL] ——> tx_phy3(tx_jesd) ——> SERDIN3 ——> Tx2 Q


五、RX 的 I、Q 映射关系

第二节内容结合 Lane通道之间的连接关系 AD9371 官方例程之 tx_jesd 与 xcvr接口映射 ,可得到RX:

{ Rx1 Q[7:0],Rx1 Q[15:8],Rx1 I[7:0],Rx1 I[15:8] } ——> SERDOUT0 ——> rx_phy0(rx_jesd)
{ Rx2 Q[7:0],Rx2 Q[15:8],Rx2 I[7:0],Rx2 I[15:8] } ——> SERDOUT1 ——> rx_phy1(rx_jesd)


链路层:

phy_data [ 31: 0] (rx_jesd) = rx_phy0 (rx_jesd) = rx_0 (ad9371_xcvr)
phy_data [63:32] (rx_jesd) = rx_phy1 (rx_jesd) = rx_1 (ad9371_xcvr)

而在 rx_jesd/rx IP核逻辑中,输入数据 phy_data 经过解扰等操作后输出 rx_data

phy_data(rx_jesd) ——> rx_data(rx_jesd) ——> link_data(rx_ad9371_tpl_core/tpl_core)


传输层

link_data(rx_ad9371_tpl_core/tpl_core) ——> adc_data(rx_ad9371_tpl_core/tpl_core)

link_data 格式 :[ M3S0[OL], M2S0[OL], M1S0[OL], M0S0[OL]]

注意 : MmSn[OL] = { MmSn [7:0] ,MmSn [15:8] }

经过 解帧得到 adc_data,adc_data 格式 samples LSB first :

[ M3S0, M2S0, M1S0, M0S0]

即:

M1S0, M0S0 ——> M1S0[OL], M0S0[OL] ——> rx_phy0 (rx_jesd) ——> Rx1 Q,Rx1 I
M3S0, M2S0 ——> M3S0[OL], M2S0[OL] ——> rx_phy1 (rx_jesd) ——> Rx2 Q,Rx2 I

即:
Rx1 I ——> M0S0,Rx1 Q ——> M1S0,Rx2 I ——> M2S0,Rx2 Q ——> M3S0


六、RX_OS 的 I、Q 映射关系

第三节内容结合 Lane通道之间的连接关系 AD9371 官方例程之 tx_jesd 与 xcvr接口映射 ,可得到RX_OS:

Rx_OS I [OL] —— > SERDOUT2 ——> rx_2(xcvr) ——> rx_phy0(rx_os_jesd)
Rx_OS Q [OL] ——> SERDOUT3 ——> rx_3(xcvr) ——> rx_phy1(rx_os_jesd)

Rx_OS 类似 RX 中的形式,简略为 Rx_OS I、Q [OL]


链路层:

phy_data [ 31: 0] (rx_os_jesd) = rx_phy0 (rx_os_jesd) = rx_2 (ad9371_xcvr)
phy_data [63:32] (rx_os_jesd) = rx_phy1 (rx_os_jesd) = rx_3 (ad9371_xcvr)

而在 rx_os_jesd/rx IP核逻辑中,输入数据 phy_data 经过解扰等操作后输出 rx_data

phy_data(rx_os_jesd/rx) ——> rx_data(rx_os_jesd) ——> link_data(tpl_core)


传输层

link_data(tpl_core) ——> adc_data(tpl_core)

link_data 格式 :[ M1S1[OL], M1S0[OL], M0S1[OL], M0S0[OL]]

注意 : MmSn[OL] = { MmSn [7:0] ,MmSn [15:8] }

经过 解帧得到 adc_data,adc_data 格式 samples LSB first :

[ M1S1, M1S0, M0S1, M0S0]

即:

M0S1, M0S0 ——> M0S1[OL], M0S0[OL] ——> rx_phy0 (rx_os_jesd) ——> Rx_OS I
M1S1, M1S0 ——> M1S1[OL], M1S0[OL] ——> rx_phy1 (rx_os_jesd) ——> Rx_OS Q


七、测试

TX 端 发送数据如下 ,TX1 和 TX2发送数据相同 (数据来源DMA)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


RX 接收的数据如下 (TX选择DDS提供数据)

在这里插入图片描述

RX 接收的数据如下 (TX选择DMA提供数据)

在这里插入图片描述


抓取 Rx_OS I 和 Rx_OS Q 信号波形,正如上所述, Rx_OS I S0 在最低 16 位,Rx_OS I S1 次之,Rx_OS Q S1 在最高的16位 。

在这里插入图片描述

在这里插入图片描述



通过使用 AD9361 进一步测试确认 I、Q 数据,AD9371 发送 源自DMA的数据

AD9361 接收信号如下,I 路 COS ,Q 路 SIN ,进一步证实 AD9371 TX 数据格式排布为:
[ Tx2 Q S1,Tx2 Q S0, Tx2 I S1, Tx2 I S0, Tx1 Q S1,Tx1 Q S0, Tx1 I S1, Tx1 I S0 ]

在这里插入图片描述


AD9361 发送并接收的基带 I、Q 信号如下

在这里插入图片描述

AD9371 的RX_OS接收 AD9361 发送的信号 如下图,进一步证实 AD9371 RX_OS数据格式排布为:
[ Rx_OS Q S1, Rx_OS Q S0,Rx_OS I S1, Rx_OS I S0 ]

在这里插入图片描述

AD9371 的 RX2 接收 AD9361 发送的信号 如下图,进一步证实 AD9371 RX 数据格式排布为:
[ Rx2 Q, Rx2 I,Rx1 Q, Rx1 I ]

在这里插入图片描述

八、总结

TX 传输层输入 I、Q 排列如下:

[ Tx2 Q S1,Tx2 Q S0, Tx2 I S1, Tx2 I S0, Tx1 Q S1,Tx1 Q S0, Tx1 I S1, Tx1 I S0 ]

RX 传输层输出 I、Q 排列如下:

[ Rx2 Q, Rx2 I,Rx1 Q, Rx1 I]

RX_OS 传输层输出 I、Q 排列如下:

[ Rx_OS Q S1, Rx_OS Q S0,Rx_OS I S1, Rx_OS I S0 ]

### Bus 架构与 Crossbar 架构的概念及区别 #### 1. 总线(Bus)架构概念 共享总线是一种早期的片上互联架构形式,其核心思想是通过单一的数据通道连接所有的模块。在这种架构下,任意时刻只有一个设备可以占用总线进行数据传输[^1]。 这种架构的优点在于简单性低成本实现,但由于带宽有限且存在仲裁开销,在高并发场景下的性能会受到显著影响。 #### 2. Crossbar 架构概念 Crossbar 是一种更复杂的互连方式,它由一组交叉开关组成,能够允许多对设备之间同时建立独立的通信路径[^2]。这意味着在理想情况下,所有可能的源节点都可以与其对应的目标节点同时通信而不发生冲突。 相比总线结构,Crossbar 提供了更高的吞吐量更低的访问延迟,但也带来了面积成本增加的问题,尤其是在大规模系统中,所需的硬件资源呈指数增长趋势。 #### 3. 主要区别对比 | 特性 | 共享总线(Bus) | Crossbar | |-----------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------| | **拓扑结构** | 单一公共信道用于所有设备之间的通讯 | 多条专用链路形成矩阵状连接 | | **并发能力** | 同一时钟周期内仅允许一对主从设备间传递信息 | 支持多对主从设备的同时操作 | | **扩展性** | 随着新增加更多外设数量增多,效率下降明显 | 更适合较大规模系统的构建 | | **复杂度&功耗** | 实现较为容易;由于竞争机制的存在可能导致额外的能量消耗 | 设计更为精细复杂;理论上整体能耗较高但如果合理规划则可有效控制 | #### 应用场景分析 对于小型嵌入式应用而言,考虑到经济因素以及实际需求水平较低的特点,采用传统的共享总线方案可能是更加合适的选择^。然而,在高性能计算环境比如图形处理器GPU内部或者是现代数据中心服务器SoC设计当中,则倾向于利用crossbars 或者进一步演化的 NoCs 来满足日益严格的实时响应要求服务质量标准[^4]. ```python # 示例 Python 伪代码展示两种架构模拟差异 class SharedBus: def __init__(self): self.busy = False def request(self, device_id): while self.busy: pass # wait until bus is free self.busy = True def release(self): self.busy = False class CrossBarSwitch: connections = {} @staticmethod def connect(source, destination): if source not in CrossBarSwitch.connections or \ destination not in CrossBarSwitch.connections[source]: raise Exception('Connection does not exist') return f"{source} -> {destination}" ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值