跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

紫光 FPGA 开发:PCIe 接口、远程升级与 AXI Bridge 接口

紫光 FPGA 开发中的核心功能,包括 PCIe DMA 将 AXI4-Stream 接口转换为 RAM 读写接口,支持多种 PCIe 版本及 PIO 模式;以及 Logos2 系列器件的远程升级方案,支持通过串口或 IO 保持状态进行 Flash 位流的升级与回读,最多支持三个位流程序。

禅心发布于 2026/3/21更新于 2026/9/1188 浏览
紫光 FPGA 开发:PCIe 接口、远程升级与 AXI Bridge 接口

紫光 FPGA 开发:PCIe 接口、远程升级与 AXI Bridge 接口

PCIe DMA:AXI4-Stream 到 RAM 读写接口的转换

在项目中,PCIe DMA 负责将 AXI4-Stream 接口转换为 RAM 读写接口。支持多种模式(Gen1x1/2/4, Gen2x1/2/4),DMA Mrd/Mwr 及 1DW PIO,读写数据长度 4~4096 字节(以 DW 为单位)。

文章配图

module pcie_dma (
    input wire clk,
    input wire rst,
    // AXI4-Stream input
    input wire [DATA_WIDTH - 1:0] axi4_stream_data,
    input wire axi4_stream_valid,
    output wire axi4_stream_ready,
    // RAM interface
    output reg [ADDR_WIDTH - 1:0] ram_addr,
    output reg [DATA_WIDTH - 1:0] ram_wdata,
    output reg ram_wen,
    input wire [DATA_WIDTH - 1:0] ram_rdata
);

    // 状态机定义
    typedef enum reg [2:0] {
        IDLE,
        READ_AXI4_STREAM,
        WRITE_RAM
    } state_t;

    state_t current_state, next_state;

    always @(posedge clk or posedge rst) begin
        if (rst)
            current_state <= IDLE;
        else
            current_state <= next_state;
    end

    always @(*) begin
        next_state = current_state;
        case (current_state)
            IDLE: begin
                if (axi4_stream_valid)
                    next_state = READ_AXI4_STREAM;
            end
            READ_AXI4_STREAM: begin
                if (axi4_stream_ready)
                    next_state = WRITE_RAM;
            end
            WRITE_RAM: begin
                // 假设写完一个数据后回到 IDLE 等待下一次 AXI4-Stream 数据
                next_state = IDLE;
            end
        endcase
    end

    always @(posedge clk or posedge rst) begin
        if (rst) begin
            ram_addr <= {ADDR_WIDTH{1'b0}};
            ram_wdata <= {DATA_WIDTH{1'b0}};
            ram_wen <= 1'b0;
            axi4_stream_ready <= 1'b0;
        end else begin
            case (current_state)
                IDLE: begin
                    axi4_stream_ready <= 1'b1;
                    ram_wen <= 1'b0;
                end
                READ_AXI4_STREAM: begin
                    ram_wdata <= axi4_stream_data;
                    axi4_stream_ready <= 1'b1;
                end
                WRITE_RAM: begin
                    ram_addr <= ram_addr + 1;
                    ram_wen <= 1'b1;
                    axi4_stream_ready <= 1'b0;
                end
            endcase
        end
    end
endmodule

代码逻辑通过状态机控制数据从 AXI4-Stream 接口到 RAM 接口的传输。在 IDLE 状态下等待 axi4_stream_valid 信号,有效则进入 READ_AXI4_STREAM 状态接收数据,完成后进入 WRITE_RAM 状态写入 RAM,写完后返回 IDLE。

文章配图

Logos2 系列 FPGA 器件远程升级

Logos2 系列 FPGA 器件的远程升级功能支持芯片代码版本升级或回退。利用串口或在 IO 口状态保持不变的情况下,实现 Flash 应用数据流升级、回读 Flash 芯片中的应用位流,最多支持三个位流程序。

文章配图

以下是一段 Python 代码示例,模拟通过串口进行数据传输来实现升级:

import serial

# 配置串口
ser = serial.Serial('COM1', 9600)  # 根据实际串口修改

def send_upgrade_data(data):
    ser.write(data)

# 假设这里有升级数据
upgrade_data = b'\x01\x02\x03\x04'
send_upgrade_data(upgrade_data)
ser.close()

该代码使用 serial 库配置串口并发送数据。实际 FPGA 开发中需与底层硬件逻辑配合,确保数据准确无误地被 FPGA 接收并用于升级。

文章配图

目录

  1. 紫光 FPGA 开发:PCIe 接口、远程升级与 AXI Bridge 接口
  2. PCIe DMA:AXI4-Stream 到 RAM 读写接口的转换
  3. Logos2 系列 FPGA 器件远程升级
  4. 配置串口
  5. 假设这里有升级数据

更多推荐文章

查看全部
  • 拆解 Llama 4 Scout:Meta 新一代 MoE 模型核心优势
  • 大模型在医学领域的应用
  • 基于 Microi 吾码低代码框架构建 Vue 高效应用
  • GLM 语言模型拆解:从概率图到 PyTorch 代码
  • 卷积神经网络 CNN 深度解析:原理、数学表达、变体架构与工程实践
  • 2025 年主流 AI 论文写作工具详解
  • 使用 Java 实现简单高效的任务调度框架
  • 从盲行到跑酷:深度视觉如何赋予足式机器人极限运动能力
  • Flutter web3dart 连接以太坊区块链构建 DApp 实战
  • Stable Diffusion v1.5 风格迁移实战:照片转油画/水彩/像素风
  • 基于 SpringBoot 的游戏账号在线交易系统设计与实现
  • Dify 集成 Qwen3-VL 低代码构建视觉智能应用
  • 智能家居系统接入谷歌 Home 与 Assistant 集成指南
  • Git Worktree:单仓库多分支并行开发实战
  • 统一 API 接入大模型:解决多厂商兼容与成本难题
  • 2022 年信奥赛 C++ 提高组 CSP-S 初赛真题及答案解析(完善程序第 2 题)
  • C++物理引擎碰撞检测实战指南
  • GitHub Copilot 学生身份认证与免费开通教程
  • Qwen1.5-1.8B-GPTQ-Int4 结合 Chainlit 实现思维导图自动生成演示
  • Qwen-Image 2512 基于 ComfyUI 镜像快速上手指南

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online