目录
这个资料不全,厂家保密,所以学习的不够细,只能了解整体思路了。
一,NOC理论基础
在传统的SoC设计中,各个IP核(如CPU、GPU、VPU、内存控制器等)通常通过共享总线(如AMBA AXI)进行通信。但随着芯片内模块增多、数据流复杂化,总线容易成为性能瓶颈。
NOC 可以理解为 芯片内部的“高速公路网”或“交换网络”。它将多个并行的数据通道和交换节点集成在片上,允许多个主设备(如CPU、GPU)和从设备(如DDR、外部接口)之间同时进行高速、低延迟的数据传输,极大提升了内部带宽和效率。
类比:城市交通系统
SoC 总线系统 ≈ 城市交通系统
NOC 控制器 ≈ 交通指挥中心
QoS 控制器 ≈ 各个路口的红绿灯
性能监控 ≈ 交通监控摄像头
各功能模块 ≈ 不同区域的车辆
关键点理解
NOC 是基础架构:负责所有模块的互连和基本路由
QoS 是策略控制:根据不同场景优化访问优先级
性能监控是眼睛:实时查看系统状态,用于调试
电源域是供电管理:与QoS协同工作,实现能效优化
设计哲学
模块化:每个功能模块有自己的QoS控制器
可配置:运行时动态调整,适应不同场景
可监控:完善的性能计数,便于优化
分层管理:系统级(NOC)和模块级(QoS)分离
1. 多层多通道的互连结构
NOC不是一个单一总线,而是一个分层、分区的交换网络。它通常包含:
-
多个主端口:连接不同的主设备(CPU簇、GPU、视频处理单元VPU、显示处理器VOP、各种DMA控制器等)。
-
多个从端口:主要连接到双通道DDR内存控制器,也连接到一些高速配置总线。
-
内部的交叉开关:用于路由数据包,允许多个传输同时进行。
2. 服务质量保证
这是NOC最关键的特性。NOC实现了QoS机制:
-
带宽分配:可以为不同的主设备或数据流(如显示输出、视频解码、GPU渲染)设置不同的带宽权重或上限。
-
优先级控制:高优先级的请求(如显示实时读取帧缓冲)会被优先处理和响应,确保画面不卡顿。
-
仲裁策略:智能的仲裁器根据配置的QoS规则,决定多个并发请求的响应顺序。
3. 专用带宽通道
对于最关键的子系统使用专用数据通路来绕过公共部分的竞争:
-
显示路径:从内存到显示控制器(VOP)的读请求具有极高优先级和专用通道,这是保证UI流畅和视频播放不掉帧的基石。
-
视频编解码路径:VPU与内存之间的数据通道也经过特别优化,保证大块视频码流输入和输出帧的稳定传输。
4. 与DDR控制器的紧密耦合
NOC直接与高效的双通道32位DDR3/LPDDR2/LPDDR3内存控制器对接。NOC负责将内部多路请求,高效地调度并转换为对DDR物理层的访问命令,最大化利用DDR带宽。
二,rk3288的NOC
┌───────────────────────────────────┐
│ NOC 控制器 (系统级) │
│ 0xFFAC0000 │
├──────────┬─────────┬──────────────┤
│ 性能监控 │ 路由仲裁 │ 配置管理 │
└──────────┴─────────┴──────────────┘
↓
┌───────────────────────────────────┐
│ QoS 控制器 (模块级) │
│ 按功能区域分布 │
├─────┬──────┬──────┬─────┬─────────┤
│ GPU │ 视频 │ 显示 │ VPU │ 外设 │
└─────┴──────┴──────┴─────┴─────────┘
↓
┌─────────────────────────────────────┐
│ 各功能模块 (应用层) │
│ VOP/ISP/RGA/GPU/VPU/HEVC等 │
└─────────────────────────────────────┘
QoS (服务质量) 工作流程,QoS:控制模块的访存优先级和带宽
模块请求 → QoS 控制器 → NOC 仲裁 → DDR 访问
↓ ↓ ↓ ↓
设置优先级 → 分配带宽 → 调度访问 → 完成传输
1,内存映射关系
// NOC 主控制器和监控
#define NOC_BASE 0xFFAC0000
#define NOCP_CORE_BASE 0xFFAC0400 // CPU
#define NOCP_GPU_BASE 0xFFAC0800 // GPU
#define NOCP_PERI_BASE 0xFFAC0C00 // 外设
#define NOCP_VPU_BASE 0xFFAC1000 // VPU
#define NOCP_VIO0_BASE 0xFFAC1400 // VIO0
#define NOCP_VIO1_BASE 0xFFAC1800 // VIO1
#define NOCP_VIO2_BASE 0xFFAC1C00 // VIO2
// QoS 控制器
#define QOS_GPU_R_BASE 0xFFAA0000 // GPU读
#define QOS_GPU_W_BASE 0xFFAA0080 // GPU写
#define QOS_VIO1_VOP_BASE 0xFFAD0000 // VIO1 VOP
#define QOS_VIO0_VOP_BASE 0xFFAD0400 // VIO0 VOP
#define QOS_VIDEO_BASE 0xFFAE0000 // 视频编解码
#define QOS_HEVC_R_BASE 0xFFAF0000 // HEVC读
#define QOS_HEVC_W_BASE 0xFFAF0080 // HEVC写,
2,NOC 地址空间布局
0xFFAC0000 - 0xFFAC1FFF: NOC 主控制器
+0x0400: nocp_core (CPU 性能监控)
+0x0800: nocp_gpu (GPU 性能监控)
+0x0C00: nocp_peri (外设性能监控)
+0x1000: nocp_vpu (VPU 性能监控)
+0x1400: nocp_vio0 (VIO0 性能监控)
+0x1800: nocp_vio1 (VIO1 性能监控)
+0x1C00: nocp_vio2 (VIO2 性能监控)
0xFFAA0000 - 0xFFAAFFFF: GPU QoS 区域
0xFFAA0000: qos_gpu_r (GPU 读 QoS)
0xFFAA0080: qos_gpu_w (GPU 写 QoS)
0xFFAD0000 - 0xFFADFFFF: 视频 QoS 区域
0xFFAD0000: qos_vio1_vop
0xFFAD0100: qos_vio1_isp_w0
0xFFAD0180: qos_vio1_isp_w1
0xFFAD0400: qos_vio0_vop (关键节点)
0xFFAD0480: qos_vio0_vip
0xFFAD0500: qos_vio0_iep
0xFFAD0800: qos_vio2_rga_r
0xFFAD0880: qos_vio2_rga_w
0xFFAD0900: qos_vio1_isp_r
0xFFAE0000: qos_video (视频编解码 QoS)
0xFFAF0000: qos_hevc_r/qos_hevc_w (HEVC QoS)
3,NOC 层次
CPU Cluster
├── CPU0/1/2/3
└── 通过 NOC 连接其他模块
NOC 总线结构:
├── CPU 子系统 (nocp_core)
├── GPU 子系统 (nocp_gpu, qos_gpu_r/w)
├── VPU 子系统 (nocp_vpu)
├── 视频子系统 (nocp_vio0/1/2, qos_vio*)
│ ├── VOP (显示控制器)
│ ├── ISP (图像信号处理)
│ ├── VIP (视频输入)
│ ├── IEP (图像增强)
│ └── RGA (2D图形加速)
├── 视频编解码 (qos_video, qos_hevc_r/w)
└── 外设子系统 (nocp_peri)
三,注意事项
配置顺序:先配置优先级,再配置带宽,最后启用仲裁器
时钟要求:NOC模块需要PCLK和ACLK时钟
复位影响:软复位不会清除NOC寄存器,需要手动复位
性能影响:不正确的QoS配置可能导致系统性能下降
安全限制:某些安全区域配置需要TrustZone权限

2232

被折叠的 条评论
为什么被折叠?



