RISC-V技术论坛
直播中

张霞

8年用户 1102经验值
私信 关注
[问答]

vivado中,怎么将e203内核源代码封装成ip核,并添加总线?

vivado中,怎么将e203内核源代码封装成ip核,并添加总线?

回帖(1)

胡秋阳

2025-11-11 18:10:36

在 Vivado 中将蜂鸟 E203 RISC-V 内核封装为 IP 核并添加 AXI 总线的步骤如下:




1. 准备工作




  • 获取源代码
    克隆官方仓库:


    git clone https://github.com/riscv-mcu/e203_hbirdv2

    核心文件位于 rtl/e203 目录。




  • 创建 Vivado 项目



    • 新建 RTL 项目,目标芯片选择 FPGA 型号(如 Xilinx Artix-7)。

    • 不添加任何源文件(后续通过 IP 封装添加)。






2. 封装 E203 为 IP 核


(1) 创建 IP 核框架



  • Tools → Create and Package New IP → Next  

  • 选择 Create a new AXI4 peripheral(即使 E203 无原生 AXI 接口,此模板简化总线添加)。

  • 设置 IP 名称(如 e203_axi_wrapper)和位置。


(2) 添加 E203 源代码



  • 在 IP 打包向导的 Add Files 阶段:

    • 添加所有 E203 RTL 文件(.v.sv):
      e203_hbirdv2/rtl/e203/core/*.v
      e203_hbirdv2/rtl/e203/subsys/*.v
      e203_hbirdv2/rtl/e203/perips/*.v
      e203_hbirdv2/rtl/e203/general/*.v

    • 取消勾选 "Copy sources into IP directory"(保持源码引用)。



(3) 创建顶层包装模块


新建 e203_axi_wrapper.v 作为 IP 顶层:


module e203_axi_wrapper (
  // 时钟和复位
  input  wire         aclk,
  input  wire         aresetn,

  // AXI4-Lite 从设备接口(用于调试/控制)
  input  wire         s_axi_awvalid,
  output wire         s_axi_awready,
  input  wire [31:0]  s_axi_awaddr,
  ... // 完整 AXI 信号列表

  // E203 原生接口
  output wire         core_clk,
  output wire         core_rstn,
  input  wire         jtag_TCK,
  ... // 其他 E203 信号
);

  //-----------------------------------
  // E203 实例化
  //-----------------------------------
  e203_soc_top u_e203_core (
    .hfextclk (aclk),      // 外部时钟
    .hfxoscen (1'b1),      // 时钟使能
    .io_pads_jtag_TCK_i_ival (jtag_TCK),
    ... // 信号连接
  );

  //-----------------------------------
  // AXI 接口逻辑(关键步骤)
  //-----------------------------------
  // 例1:添加 AXI 寄存器桥接 E203 的外设总线
  wire [31:0] e203_periph_addr;
  wire [31:0] e203_periph_wdata;
  wire        e203_periph_we;

  // 实例化 AXI-Lite 到 E203 外设总线的适配器
  axi_lite_to_e203_bridge u_bridge (
    .s_axi_aclk    (aclk),
    .s_axi_aresetn (aresetn),
    // AXI 接口(连接至 IP 端口)
    .s_axi_awvalid (s_axi_awvalid),
    .s_axi_awready (s_axi_awready),
    ...
    // E203 总线接口
    .periph_addr   (e203_periph_addr),
    .periph_wdata  (e203_periph_wdata),
    .periph_we     (e203_periph_we)
  );

  // 将适配器连接到 E203 的外设总线
  assign u_e203_core.io_sys_periph_awvalid = e203_periph_we;
  assign u_e203_core.io_sys_periph_wvalid  = e203_periph_we;
  assign u_e203_core.io_sys_periph_arvalid = ~e203_periph_we;
  assign u_e203_core.io_sys_periph_wdata   = e203_periph_wdata;
  assign u_e203_core.io_sys_periph_araddr  = e203_periph_addr;
  assign u_e203_core.io_sys_periph_awaddr  = e203_periph_addr;

  // 例2:直接暴露 JTAG 调试接口
  assign jtag_TCK = ...; // 连接至 E203 的 JTAG 引脚

endmodule



3. 添加 AXI 总线接口


(1) 在 IP 打包器中定义总线



  • 进入 IP Catalog → 右键 IP → Edit in IP Packager

  • Ports and Interfaces 选项卡:

    1. 添加 AXI4-Lite 从接口

      • 点击 + → 选择 AXI4LiteSlave

      • 设置名称(如 S_AXI)。


    2. 映射信号

      • s_axi_awvalid, s_axi_awready 等信号关联到顶层模块端口。


    3. 配置接口参数

      • 数据宽度:32-bit(与 E203 总线匹配)。

      • 地址范围:设置寄存器空间大小(如 64KB)。




(2) 生成地址映射



  • Addressing and Memory 中指定偏移地址(如 0x0000_0000)。




4. 封装 IP 并导出



  1. 保存 IP

    • Review and Package → Re-Package IP


  2. 在项目中引用

    • 关闭 IP 打包器,返回主工程。

    • IP Catalog → User Repository 中找到 e203_axi_wrapper





5. 在 Block Design 中使用



  1. 创建 Block Design

    • 添加 e203_axi_wrapper IP。


  2. 连接总线

    • 自动连接 S_AXI 到 AXI Interconnect。

    • 连接 aclkaresetn 到系统时钟/复位。


  3. 添加必要外设

    • BRAM 控制器(用于 E203 内存)。

    • UART/AXI Timer(示例外设)。


  4. 生成输出产品

    • Generate Block DesignCreate HDL Wrapper





关键注意事项



  1. 总线适配逻辑

    • E203 使用自定义总线(类似 Wishbone),需设计 AXI 到 E203 总线的转换桥(参考示例中的 axi_lite_to_e203_bridge)。若需高性能,可改用 AXI4 全功能适配器。


  2. 时钟与复位

    • E203 需独立的低速时钟(如 16MHz),使用 Clocking Wizard 分频。


  3. 调试接口

    • 暴露 JTAG 端口(TCK/TDI/TDO/TMS)以支持 OpenOCD 调试。


  4. 地址映射

    • 确保外设地址与 E203 的 hbirdv2 SoC 定义一致(检查源码中的 Memmap.h)。





验证流程



  1. 生成 Bitstream 并下载到 FPGA。

  2. 使用 RISC-V 工具链编译测试程序:
    riscv64-unknown-elf-gcc -march=rv32imac -o test.elf test.c

  3. 通过 OpenOCD + GDB 加载程序并调试:
    openocd -f board/hbird_e203.cfg
    riscv64-unknown-elf-gdb test.elf



提示:首次封装建议从最小系统入手(仅保留核心+内存)。完整移植需处理中断控制器、GPIO 等外设的 AXI 化封装。参考官方 hbirdv2 SoC 中的 AXI 集成示例。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分