work/rtl/eth_mac/apb2axi.md

5.4 KiB
Raw Blame History

@[TOC](apb2axi DS文档)

1 功能概述

本设计模块是面向eth MAC CSR的AXI接口设计apb2axi_bridge来进行给MAC CSR下发配置考虑该模块具有一般通用性可作为后续的通用性

1.1 MAC IP CSR

  1. 统一使用AXI总线管理控制信号和状态反馈
  2. 内置事务超时机制和死锁预防电路
  3. 集成中断仲裁器,多中断源合并为单输出
  4. 各功能通道寄存器采用线性地址映射
  5. 写1清除Write-1-to-Clear中断标志位
  6. 每个中断源有独立使能寄存器
  7. 基于功能通道的中断分组机制

2 接口列表及相关时序

2.1 APB

apb相关接口应该是为了保持统一而使用32bit(待确认因为脚本是支持生成64bit的),apb相关接口时序如下 信号包括PCLK, PRESETn, PSEL, PENABLE, PADDR, PWRITE, PWDATA, PRDATA, PREADY, PSLVERR。 传输分为两个阶段Setup阶段PSEL=1PENABLE=0和Access阶段PSEL=1PENABLE=1。当PREADY=1时传输完成。

2.2 AXI

2.2.1 AXI拓扑结构

64bit Data; 链式设备传递: alt text

alt text

担心是否会在某一个串联的slave挂死--内置超时机制; 伪代码如下:

def handle_transaction(addr):
    if (MY_BASE_ADDR <= addr <= MY_END_ADDR):  # 地址匹配本模块
        process_locally()       # 本地处理
        return TERMINATED       # 终止传递
    else:
        forward_to_next()       # 转发至下一级
        return FORWARDED

2.2.2 接口时序

AXI的读写Single接口时序 alt text

alt text

2.2.3 AXI features

支持功能如下: 1.基本接口规范64位总线宽度、支持burst; 2.地址操作:固定地址(同一地址连续写入--填充缓冲区)、递增地址突发(地址自动递增的连续传输--内存拷贝); 3.特殊访问类型支持非64位对齐的内存操作支持32bit窄访问

不支持功能: 1.不支持非对齐访问下或窄访问下或回环下的突发操作; 2.保护访问:不支持特权内存级保护机制; 3.不支持原子读写; 4.严格执行顺序执行、不支持乱序处理; 5.不支持8位/16位窄访问

2.3 bridge接口时序

该bridge转换接口

2.3.1 bridge接口写时序

接口写时序如下所示: alt text

2.3.2 bridge接口读时序

接口读时序如下所示: alt text

3 模块结构图

4 详细设计

在这里不支持burst和outsanding每次只处理传输一个APB因此其转换为AXI4的单个传输(读或写) 寄存器位宽是64bit;相邻寄存器间隔是8

4.1 读写操作

4.1.1 写操作(32-->64)

APB发起写设置PADDR, PWDATA, PWRITE=1, PSEL=1紧接着PENABLE=1。 桥接模块需要将此次写转换到AXI4的写地址通道和写数据通道。 1.先发送写地址AWVALID=1等待AWREADY=1; 同时或之后发送写数据WVALID=1等待WREADY=1 2.写响应通道等待BVALID=1然后桥接模块设置PREADY=1并传递BRESP给PSLVERR0表示OK1表示错误。 注意AXI4的写操作是先发送地址和数据然后等待响应而APB是先设置地址和数据再使能传输。

特别地在这里对于AXI 64bit wdata中通过APB32bit总线配置写寄存器地址位宽是64bit连续相邻寄存器地址间隔是8 alt text 在这里AXI地数据位宽是64bit,而APB的总线位宽是32bit支持窄访问是32bit; alt text 假如说想配置写0x19f0的64bit 我理解是: APB32位发起两笔写transaction 第一笔写低32位paddr = 0x19f0; pwdata = 32'xx; ----> AXI awaddr = 0x19f0; wdata = pwdata; wstrb = 8'h0Fwsize = 3'b010; 第二笔写高32位paddr = 0x19f4; pwdata = 32'xxx; ----> AXI: awaddr = 0x19f4; wdata = pwdata ; wstrb = 8'hF0; wsize = 3'b010;

4.1.2 读操作

APB发起读设置PADDR, PWRITE=0, PSEL=1紧接着PENABLE=1。 1.桥接模块将读地址发送到AXI4的读地址通道ARVALID=1等待ARREADY=1。 2.等待读数据通道返回RVALID=1然后读取数据传递给PRDATA并设置PREADY=1同时传递RRESP给PSLVERR

特别地在这里进行对于AXI 64bit中 rdata访问获取32bit alt text 假如说想配置读0x19f0的64bit 我理解是: APB32位发起两笔读transaction 第一笔写低32位paddr = 0x19f0; ; ----> AXI awaddr = 0x19f0; prdata = (paddr[2]) ? rdata[64 -1:32] : [32 -1:0]; 第二笔写高32位paddr = 0x19f4; ; ----> AXI: awaddr = 0x19f4;prdata = (paddr[2]) ? rdata[64 -1:32] : [32 -1:0] ;

4.2 状态机设计

alt text

5 MAC-IP Propramming Guide

To guide to propram sequences to initialize and manage. 寄存器配置流程:下配置的核心是:读-修改-写--目的是为了防止覆盖同一寄存器的其他字段; 实现使用MASK参数来进行精准定位需修改的位 alt text

5.1 Startup using Standard Alignment Marker Cycle length

以寄存器配置去bring up 这个800GBASE-R8 KP 配置通道0的相关寄存器然后通过读取状态寄存器0x0010等待其中指定的9个状态位全部置1表示通道0已经启动完成。 alt text 进行适配APB配置时的32bit接口 alt text 到时候仿axi_read_modify_write()函数来进行写一个apb_read_modify_write()函数注意addr、data、mask的取32bit map;