work/rtl/eth_mac/apb2axi.md

107 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@[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](image.png)
![alt text](image-1.png)
担心是否会在某一个串联的slave挂死--内置超时机制;
伪代码如下:
```python
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](image-2.png)
![alt text](image-3.png)
### 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](image-7.png)
### 2.3.2 bridge接口读时序
接口读时序如下所示:
![alt text](image-9.png)
# 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](image-4.png)
在这里AXI地数据位宽是64bit,而APB的总线位宽是32bit支持窄访问是32bit;
![alt text](企业微信截图_17531479011747.png)
假如说想配置写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](image-5.png)
假如说想配置读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](image-6.png)