FPGA 在 PCIE 数据采集中的精彩实践:AD7606 与 AD9226
1.FPGA XDMA 中断模式实现 PCIE3.0 AD7606采集 提供2套工程源码和QT上位机源码。 本设计使用Xilinx系列FPGA为平台调用Xilinx官方的XDMA方案搭建基中断模式下的AD7606数据采集转PCIE3.0传输 2.FPGA基于XDMA实现PCIE X8采集AD9226数据 提供工程源码和QT上位机程序。 本工程实现基础的PCIE测速试验上进行了修改实时采集AD9226数据缓存DDR3后通过PCIE发送给QT上位机显示程序显示属于FPGA图像采集领域的高端项目。 三个该工程可移植到其他项目提供源码。嘿各位技术小伙伴们今天来跟大家分享两个超有趣的 FPGA 项目涉及到通过 PCIE 进行数据采集还贴心地给大家准备了源码哦一、FPGA XDMA 中断模式实现 PCIE3.0 AD7606 采集这个设计是以 Xilinx 系列 FPGA 为平台展开的。这里用到了 Xilinx 官方的 XDMA 方案构建基于中断模式下的 AD7606 数据采集并将采集到的数据通过 PCIE3.0 进行传输。先说说 XDMA它是 Xilinx 推出的一个用于 PCIe 数据传输的解决方案极大地简化了我们在 FPGA 上实现 PCIe 接口的开发流程。代码示例与分析下面来看一段简单的代码片段伪代码示例仅为示意module ad7606_xdma ( input wire clk, input wire rst, // AD7606 相关接口信号 input wire ad7606_data_valid, input wire [15:0] ad7606_data, // XDMA 相关接口信号 output reg [15:0] xdma_tx_data, output reg xdma_tx_valid ); always (posedge clk or posedge rst) begin if (rst) begin xdma_tx_data 16b0; xdma_tx_valid 1b0; end else if (ad7606_data_valid) begin xdma_tx_data ad7606_data; xdma_tx_valid 1b1; end else begin xdma_tx_valid 1b0; end end endmodule在这段代码里模块ad7606xdma负责将 AD7606 采集到的数据传递给 XDMA 用于传输。当复位信号rst有效时将发送数据和有效信号清零。当 AD7606 数据有效信号ad7606datavalid有效时就把 AD7606 的数据加载到要发送给 XDMA 的数据寄存器xdmatxdata中并置有效信号xdmatx_valid为高。1.FPGA XDMA 中断模式实现 PCIE3.0 AD7606采集 提供2套工程源码和QT上位机源码。 本设计使用Xilinx系列FPGA为平台调用Xilinx官方的XDMA方案搭建基中断模式下的AD7606数据采集转PCIE3.0传输 2.FPGA基于XDMA实现PCIE X8采集AD9226数据 提供工程源码和QT上位机程序。 本工程实现基础的PCIE测速试验上进行了修改实时采集AD9226数据缓存DDR3后通过PCIE发送给QT上位机显示程序显示属于FPGA图像采集领域的高端项目。 三个该工程可移植到其他项目提供源码。而且这个项目还给大家准备了 2 套工程源码以及 QT 上位机源码。QT 上位机可以方便地接收和处理通过 PCIE 传输过来的数据实现数据的可视化等功能。二、FPGA 基于 XDMA 实现 PCIE X8 采集 AD9226 数据这个工程可厉害了它是在基础的 PCIE 测速试验上进行了修改。实时采集 AD9226 数据先把数据缓存到 DDR3 中然后通过 PCIE 发送给 QT 上位机显示程序进行显示妥妥的 FPGA 图像采集领域高端项目并且该工程还可移植到其他项目。代码示例与分析同样来看段简单代码伪代码示例module ad9226_pcie ( input wire clk, input wire rst, // AD9226 相关接口信号 input wire ad9226_data_valid, input wire [11:0] ad9226_data, // DDR3 相关接口信号 output reg [11:0] ddr3_write_data, output reg ddr3_write_en, // PCIE 相关接口信号 output reg [11:0] pcie_tx_data, output reg pcie_tx_valid ); // 这里可以简单理解为有一个状态机控制数据流向 reg [1:0] state; parameter IDLE 2b00, WRITE_DDR3 2b01, READ_DDR3_AND_TX 2b10; always (posedge clk or posedge rst) begin if (rst) begin state IDLE; ddr3_write_en 1b0; pcie_tx_valid 1b0; end else begin case (state) IDLE: begin if (ad9226_data_valid) begin state WRITE_DDR3; ddr3_write_data ad9226_data; ddr3_write_en 1b1; end end WRITE_DDR3: begin // 假设这里完成了 DDR3 写入操作的判断 state READ_DDR3_AND_TX; ddr3_write_en 1b0; end READ_DDR3_AND_TX: begin // 从 DDR3 读出数据并准备通过 PCIE 发送 pcie_tx_data ddr3_read_data; // 假设存在这个信号 pcie_tx_valid 1b1; state IDLE; end endcase end end endmodule这段代码中的模块ad9226pcie实现了对 AD9226 数据的采集、缓存到 DDR3 以及通过 PCIE 发送的功能。通过一个简单的状态机来控制整个流程。初始状态为IDLE当 AD9226 数据有效时进入WRITEDDR3状态完成写入后进入READDDR3AND_TX状态从 DDR3 读出数据通过 PCIE 发送之后又回到IDLE状态。同样这个项目也为大家提供了工程源码和 QT 上位机程序方便大家在此基础上进行开发和扩展。希望这两个项目能给各位在 FPGA 与 PCIE 数据采集相关的开发中带来一些启发和帮助赶紧下载源码动手实践起来吧