searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

标准AXI4与紫光DDR IP Simplified AXI4接口转换详解

2025-06-27 02:42:30
0
0

一、接口背景介绍

标准AXI4接口

AXI4(Advanced eXtensible Interface 4)是ARM公司制定的AMBA 4.0规范的一部分,广泛应用于高性能SoC设计中。标准AXI4协议提供了完整的信号集合,支持复杂的突发传输、乱序处理和多ID并发,能够满足CPU、GPU等高性能设备的互连需求。

紫光DDR IP的Simplified AXI4接口

紫光同创在其DDR控制器IP中采用了Simplified AXI4接口,这是一种针对内存访问场景优化的简化版本。相比标准AXI4,它减少了部分复杂特性,降低了实现复杂度和资源消耗,同时保持了足够的性能来满足DDR内存访问需求。

二、接口信号差异对比

写通道信号对比

信号名称 标准AXI4 紫光Simplified AXI4 位宽差异 信号含义
地址信号 awaddr[31:0] bist_axi_awaddr[31:0] 相同 写地址
传输长度 awlen[7:0] bist_axi_awlen[3:0] 8位→4位 突发长度,简化版最大支持16次传输
传输ID awid[7:0] bist_axi_awuser_id[3:0] 8位→4位 传输标识,简化版降低路由复杂度
传输大小 awsize[2:0] 缺失 - 每次传输的字节数,简化版省略
突发类型 awburst[1:0] 缺失 - 突发模式,简化版固定为INCR
用户信号 标准无 bist_axi_awuser_ap 新增1位 紫光自定义的用户信号
数据信号 wdata[255:0] bist_axi_wdata[127:0] 256位→128位 写数据,宽度与DDR接口匹配
字节使能 wstrb[31:0] bist_axi_wstrb[15:0] 32位→16位 字节写使能,对应数据宽度
最后传输 wlast 缺失 - 最后一次传输指示,简化版通过计数判断

读通道信号对比

信号名称 标准AXI4 紫光Simplified AXI4 位宽差异 信号含义
地址信号 araddr[31:0] bist_axi_araddr[31:0] 相同 读地址
传输长度 arlen[7:0] bist_axi_arlen[3:0] 8位→4位 读突发长度
传输ID arid[7:0] bist_axi_aruser_id[3:0] 8位→4位 读传输标识
数据返回 rdata[255:0] bist_axi_rdata[127:0] 256位→128位 读数据
最后数据 rlast 缺失 - 最后一次读数据指示
读响应 rresp[1:0] 简化处理 - 读响应信号

关键信号含义解释

  • awlen/arlen:突发传输长度-1,标准AXI4支持1-256次传输,简化版支持1-16次
  • awsize/arsize:每次传输的字节大小,2^size字节,简化版通过数据宽度固定
  • awburst/arburst:突发类型(FIXED/INCR/WRAP),简化版固定为INCR(递增)
  • wlast/rlast:指示突发传输的最后一拍,简化版通过内部计数器实现

三、接口转换机制解析

基于代码分析,转换模块主要通过以下机制实现两种接口的桥接:

3.1 参数化设计

parameter DATA_WIDTH_MUL = MEM_DQ_WIDTH*8/AXI_DATA_WIDTH;
parameter LEN_SHIFT = (DATA_WIDTH_MUL == 1) ? 0 : 
                      (DATA_WIDTH_MUL == 2) ? 1 : 2;

通过计算数据宽度比例,自动确定长度转换的移位量。

3.2 长度转换算法

assign axi_awlen_a = ({5'b0,bist_axi_awlen_d1} + 9'd1) << LEN_SHIFT;
assign axi_awlen_b = axi_awlen_a - 9'b1;
assign axi_awlen = axi_awlen_b[7:0];

转换步骤:

  1. 将简化接口的4位长度扩展为9位
  2. 加1得到实际传输次数
  3. 根据数据宽度比例左移(LEN_SHIFT)
  4. 减1转换为AXI4的len格式

3.3 地址对齐处理

parameter AXI_ADDR_SHIFT = (MEM_DQ_WIDTH == 16) ? 1 : 
                           (MEM_DQ_WIDTH == 32) ? 2 : 3;
assign axi_awaddr = {bist_axi_awaddr_d1,{AXI_ADDR_SHIFT{1'b0}}};

根据内存数据宽度自动进行地址对齐,确保地址符合AXI4传输要求。

3.4 数据宽度转换

转换模块使用了两个关键的FIFO来处理数据宽度差异:

写数据FIFO:

  • 输入:窄数据宽度 (MEM_DQ_WIDTH*8)
  • 输出:宽数据宽度 (AXI_DATA_WIDTH)
  • 功能:将多个窄数据合并为宽数据

读数据FIFO:

  • 输入:宽数据宽度 (AXI_DATA_WIDTH)
  • 输出:窄数据宽度 (MEM_DQ_WIDTH*8)
  • 功能:将宽数据拆分为多个窄数据

3.5 流控同步机制

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        wr_align_done <= 1;
    else if(bist_axi_awready & bist_axi_awvalid)
        wr_align_done <= 0;
    else if(axi_wready & axi_wvalid & (axi_wdata_cnt == axi_awlen))
        wr_align_done <= 1;
end

通过wr_align_done信号协调两个接口的握手时序:

  • 简化接口发起传输时,禁止新的传输请求
  • 标准AXI4传输完成后,重新使能简化接口
  • 确保数据传输的完整性和一致性

3.6 信号映射与补全

转换模块还负责补全简化接口缺失的标准AXI4信号:

  • axi_awsize/axi_arsize:根据数据宽度自动设置
  • axi_awburst/axi_arburst:固定设置为INCR模式
  • axi_wlast:通过内部计数器生成
  • axi_bready:固定为高电平
0条评论
0 / 1000
Du_carry
2文章数
0粉丝数
Du_carry
2 文章 | 0 粉丝
Du_carry
2文章数
0粉丝数
Du_carry
2 文章 | 0 粉丝
原创

标准AXI4与紫光DDR IP Simplified AXI4接口转换详解

2025-06-27 02:42:30
0
0

一、接口背景介绍

标准AXI4接口

AXI4(Advanced eXtensible Interface 4)是ARM公司制定的AMBA 4.0规范的一部分,广泛应用于高性能SoC设计中。标准AXI4协议提供了完整的信号集合,支持复杂的突发传输、乱序处理和多ID并发,能够满足CPU、GPU等高性能设备的互连需求。

紫光DDR IP的Simplified AXI4接口

紫光同创在其DDR控制器IP中采用了Simplified AXI4接口,这是一种针对内存访问场景优化的简化版本。相比标准AXI4,它减少了部分复杂特性,降低了实现复杂度和资源消耗,同时保持了足够的性能来满足DDR内存访问需求。

二、接口信号差异对比

写通道信号对比

信号名称 标准AXI4 紫光Simplified AXI4 位宽差异 信号含义
地址信号 awaddr[31:0] bist_axi_awaddr[31:0] 相同 写地址
传输长度 awlen[7:0] bist_axi_awlen[3:0] 8位→4位 突发长度,简化版最大支持16次传输
传输ID awid[7:0] bist_axi_awuser_id[3:0] 8位→4位 传输标识,简化版降低路由复杂度
传输大小 awsize[2:0] 缺失 - 每次传输的字节数,简化版省略
突发类型 awburst[1:0] 缺失 - 突发模式,简化版固定为INCR
用户信号 标准无 bist_axi_awuser_ap 新增1位 紫光自定义的用户信号
数据信号 wdata[255:0] bist_axi_wdata[127:0] 256位→128位 写数据,宽度与DDR接口匹配
字节使能 wstrb[31:0] bist_axi_wstrb[15:0] 32位→16位 字节写使能,对应数据宽度
最后传输 wlast 缺失 - 最后一次传输指示,简化版通过计数判断

读通道信号对比

信号名称 标准AXI4 紫光Simplified AXI4 位宽差异 信号含义
地址信号 araddr[31:0] bist_axi_araddr[31:0] 相同 读地址
传输长度 arlen[7:0] bist_axi_arlen[3:0] 8位→4位 读突发长度
传输ID arid[7:0] bist_axi_aruser_id[3:0] 8位→4位 读传输标识
数据返回 rdata[255:0] bist_axi_rdata[127:0] 256位→128位 读数据
最后数据 rlast 缺失 - 最后一次读数据指示
读响应 rresp[1:0] 简化处理 - 读响应信号

关键信号含义解释

  • awlen/arlen:突发传输长度-1,标准AXI4支持1-256次传输,简化版支持1-16次
  • awsize/arsize:每次传输的字节大小,2^size字节,简化版通过数据宽度固定
  • awburst/arburst:突发类型(FIXED/INCR/WRAP),简化版固定为INCR(递增)
  • wlast/rlast:指示突发传输的最后一拍,简化版通过内部计数器实现

三、接口转换机制解析

基于代码分析,转换模块主要通过以下机制实现两种接口的桥接:

3.1 参数化设计

parameter DATA_WIDTH_MUL = MEM_DQ_WIDTH*8/AXI_DATA_WIDTH;
parameter LEN_SHIFT = (DATA_WIDTH_MUL == 1) ? 0 : 
                      (DATA_WIDTH_MUL == 2) ? 1 : 2;

通过计算数据宽度比例,自动确定长度转换的移位量。

3.2 长度转换算法

assign axi_awlen_a = ({5'b0,bist_axi_awlen_d1} + 9'd1) << LEN_SHIFT;
assign axi_awlen_b = axi_awlen_a - 9'b1;
assign axi_awlen = axi_awlen_b[7:0];

转换步骤:

  1. 将简化接口的4位长度扩展为9位
  2. 加1得到实际传输次数
  3. 根据数据宽度比例左移(LEN_SHIFT)
  4. 减1转换为AXI4的len格式

3.3 地址对齐处理

parameter AXI_ADDR_SHIFT = (MEM_DQ_WIDTH == 16) ? 1 : 
                           (MEM_DQ_WIDTH == 32) ? 2 : 3;
assign axi_awaddr = {bist_axi_awaddr_d1,{AXI_ADDR_SHIFT{1'b0}}};

根据内存数据宽度自动进行地址对齐,确保地址符合AXI4传输要求。

3.4 数据宽度转换

转换模块使用了两个关键的FIFO来处理数据宽度差异:

写数据FIFO:

  • 输入:窄数据宽度 (MEM_DQ_WIDTH*8)
  • 输出:宽数据宽度 (AXI_DATA_WIDTH)
  • 功能:将多个窄数据合并为宽数据

读数据FIFO:

  • 输入:宽数据宽度 (AXI_DATA_WIDTH)
  • 输出:窄数据宽度 (MEM_DQ_WIDTH*8)
  • 功能:将宽数据拆分为多个窄数据

3.5 流控同步机制

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        wr_align_done <= 1;
    else if(bist_axi_awready & bist_axi_awvalid)
        wr_align_done <= 0;
    else if(axi_wready & axi_wvalid & (axi_wdata_cnt == axi_awlen))
        wr_align_done <= 1;
end

通过wr_align_done信号协调两个接口的握手时序:

  • 简化接口发起传输时,禁止新的传输请求
  • 标准AXI4传输完成后,重新使能简化接口
  • 确保数据传输的完整性和一致性

3.6 信号映射与补全

转换模块还负责补全简化接口缺失的标准AXI4信号:

  • axi_awsize/axi_arsize:根据数据宽度自动设置
  • axi_awburst/axi_arburst:固定设置为INCR模式
  • axi_wlast:通过内部计数器生成
  • axi_bready:固定为高电平
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0