五、一个quad同时支持pcie和sfp两种高速接口的ref时钟配置

项目描述

  1. 上位机将截图数据通过 XDMA 写入到 FPGA 侧的 DDR 内存区域 1 中
  2. 通过 axi_lite 接口给 axi_read_start 信号,通知 AXI_read 模块启动读取数据,然后通过 GTP TX 模块发送出去。
  3. 经过光纤回环,GTP RX 端接收到数据,送给 AXI_WRITE 模块,然后写入到 FPGA的内存的区域 2 中。
  4. 写完成后通过 AXI write end 的中断信号通知上位机读取区域 2 的数据。

结构框图

在这里插入图片描述
其中pc上位机与fpga之间通过pcie接口相连,axi_read模块读出的数据通过aurora8b10b模块实现并转串输出到光纤接口。

本次项目是在XDMA框架下的桌面采集和PCIE传输项目以及aurora8b10b ip的使用(framing接口下的数据回环测试)两个项目的基础上进行的。
在这里插入图片描述
本章内容:搭建适合pcie和sfp共用一个QUAD的框架

一、common与channel设置</

### 关于 FPGA 高速接口参考时钟计算公式的设计方法 在 FPGA 高速接口设计中,参考时钟refclk)对于 JESD204B 协议中的物理层实现至关重要。它决定了 GTP/GTX/GTH 串行高速收发器的工作频率以及数据传输速率。参考时钟的频率通常由串行线速率(Serial Line Rate)决定,并且可以通过特定公式进行计算。 #### 参考时钟与串行线速率的关系 参考时钟的频率范围是由所选器件支持的最大最小串行线速率定义的。对于 Xilinx 的 7 系列 FPGA,参考时钟频率 \( f_{\text{REFCLK}} \) 串行线速率 \( R_{\text{SLR}} \) 存在一个固定的比例关系: \[ f_{\text{REFCLK}} = \frac{R_{\text{SLR}}}{M} \] 其中: - \( R_{\text{SLR}} \): 表示串行线速率(单位为 Mbps 或 Gbps),即每个通道的数据传输速率。 - \( M \): 是一个整数因子,表示参考时钟与串行线速率之间的比例系数,取值取决于具体的硬件配置支持模式[^1]。 此公式表明,通过调整 \( M \),可以灵活选择适合应用需求的参考时钟频率。 #### Quad 结构下的参考时钟分配 Xilinx 的 7 系列 FPGA 中引入了 Quad 架构的概念,即将四个独立的 GTX 收发器组合成一组(Quad)。每组共享同一个 QPLL(Quad PLL),并依赖单一的参考时钟输入。这种架构简化了时钟管理复杂度,同时也减少了 PCB 布局布线的压力[^2]。 需要注意的是,在实际工程实践中,\( M \) 的选取需满足以下条件: 1. 符合目标器件的技术规格书规定的有效范围; 2. 能够提供足够的精度以匹配所需的串行线速率; 3. 尽量减少抖动累积效应的影响。 #### 数据读取过程中触发地址的相关处理 虽然本主题主要围绕参考时钟展开讨论,但在某些应用场景下,例如连续多段触发存储及传输系统中,还需要考虑如何正确设置读操作的起始位置。此时可采用如下公式来动态计算读指针的位置: \[ addr_{\text{start}} = (trig\_addr - pre\_depth + buffer\_size) \% buffer\_size \] 这里的关键参数解释如下: - \( trig\_addr \): 实际发生中断或者事件的时间戳对应的内存单元编号; - \( pre\_depth \): 用户预先设定好的预捕获窗口长度; - \( buffer\_size \): 整体缓冲区容量大小[^3]。 以上逻辑确保即使当触发点位于靠近环形缓存边界附近时也能得到合理的结果。 ```python def calculate_read_start_address(trigger_addr, pre_depth, buffer_size): """ Calculate the starting address for reading data from a circular buffer. Args: trigger_addr (int): The memory location where an event occurred. pre_depth (int): Pre-trigger depth defined by user requirements. buffer_size (int): Total size of the circular buffer. Returns: int: Starting index to begin read operation. """ return (trigger_addr - pre_depth + buffer_size) % buffer_size ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值