1. ARM CT1156T2F-S与RealView仿真板集成指南
在嵌入式系统开发领域,ARM的CT1156T2F-S测试芯片与RealView仿真板的组合为开发者提供了一个强大的硬件验证平台。这套系统基于AMBA 3.0总线架构,特别适合需要高性能处理器与可编程逻辑协同工作的场景。
1.1 核心组件概述
CT1156T2F-S是ARM1156T2F-S处理器的测试芯片版本,具有完整的处理器功能集和调试接口。RealView仿真板(EB)则提供了丰富的外设接口和FPGA资源,两者结合可以构建一个完整的嵌入式开发环境。
这套系统的主要特点包括:
- 支持AXI(Advanced eXtensible Interface)总线协议
- 集成动态内存控制器(DMC)和静态内存控制器(SSMC)
- 灵活的时钟架构,支持多时钟域
- 通过FPGA实现的可配置逻辑
1.2 典型应用场景
这种组合特别适合以下开发场景:
- 嵌入式操作系统移植和优化
- 硬件加速器开发与验证
- 低延迟外设接口开发
- 多核系统原型设计
- 实时性能分析和调优
2. 系统架构与总线设计
2.1 AMBA 3.0总线架构
AMBA(Advanced Microcontroller Bus Architecture)是ARM公司提出的片上总线标准,3.0版本引入了AXI协议,显著提高了系统性能。
2.1.1 AXI总线关键特性
AXI协议的主要优势体现在:
- 支持多主多从架构
- 分离的地址/数据通道
- 基于握手的传输机制
- 乱序事务支持
- 突发传输能力
在CT1156T2F-S与EB的集成方案中,AXI总线宽度为64位,采用6x5的交叉开关矩阵,可以实现6个从设备与5个主设备之间的非阻塞通信。
2.1.2 总线矩阵实现
系统总线矩阵的实现有几个关键点:
- 同步寄存器切片(AXI SYNC SLICE):插入到主端口S0-S5,确保数据在AXI矩阵地址解码前保持完整周期有效
- 异步桥接(AXI ASYNC SLICE):允许Tile Site 2工作在不同的时钟域
- ID压缩:减少AXI总线上ID通道的宽度
- 多路复用方案:通过2:1多路复用器减少引脚数量
2.2 内存子系统
系统包含两种内存控制器:
- 动态内存控制器(DMC):基于ARM PL340 PrimeCell,默认工作频率30MHz(OSCCLK1四分频)
- 静态内存控制器(SSMC):基于ARM PL093 PrimeCell
注意:DMC连接高速DDR设备时需要使用特殊类型的焊盘和信号,这在FPGA设计中需要特别注意。
3. 时钟架构与复位系统
3.1 多时钟域设计
系统包含6个独立的时钟域:
- EB内部系统总线:由HCLK驱动,HCLK=ACLK
- CPU外部系统总线:默认与Core Tile输入时钟同频(T1_CLK_NEG_UP_OUT)
- CPU内部系统总线:测试芯片PLL默认将输入时钟7倍频
- LT系统总线:由OSCCLK2驱动
- DDR_CLK:OSCCLK1的四分频
- CLCDCLK:直接连接OSCCLK4
3.1.1 默认时钟频率配置
| 时钟信号 |
用途 |
默认频率 |
| OSCCLK0 |
Tile site 1参考时钟 |
30MHz |
| OSCCLK1 |
DMC(DDR时钟) |
120MHz |
| OSCCLK2 |
Tile site 2(逻辑Tile) |
20MHz |
| OSCCLK3 |
未使用 |
35MHz |
| OSCCLK4 |
CLCD |
25MHz |
3.2 复位系统
CT1156T2F-S的复位结构包含多级复位信号:
- GLOBAL_DONE:所有FPGA配置完成时变高
- nSYSPOR:GLOBAL_DONE变高约7μs后变高
- nSYSRST:nSYSPOR变高约20μs后变高
- PLDRESETn:复位并启动PLD串行数据传输
复位序列的关键时间点:
- 上电后FPGA配置阶段
- PLD串行数据传输阶段(约3.25μs)
- 等待PLL锁定阶段
- 最终系统释放复位阶段
4. 硬件配置与接口
4.1 核心Tile安装与配置
配置CT1156T2F-S与RealView仿真板的基本步骤:
- 将CT1156T2F-S Tile安装到仿真基板的TILE SITE 1
- 将CONFIG开关(S1)滑到ON位置
- 通过J18连接JTAG ICE或通过J16连接USB调试端口
- 连接+12V电源(中心引脚为正极,±10%,35W)
- 上电后确认'3V3 OK'和'5V OK'LED亮起
- 根据连接类型运行对应的编程工具:
- USB连接使用progcards_usb.exe
- RVI连接使用progcards_rvi.exe
- 选择CT1156T2F-S选项,等待编程完成(可能需要几分钟)
- 断电后将配置开关设置为加载FPGA镜像0(S10全OFF)
- 将CONFIG开关滑到OFF位置,重新上电
4.2 AXI多路复用方案
为减少Tile X接口上的引脚数量,系统采用了创新的2:1多路复用和锁存方案:
- 输出数据:在CLK电平上进行多路复用
- 解复用:通过锁存CLK高电平时生成的数据(A),并在CLK变低时传递
- 直接传递:CLK低电平时生成的数据(B)
这种设计假设数据总是在CLK上升沿生成和捕获,时序要求如下:
- 输出保持时间(Toh):最小0ns
- 输出有效时间(Tov):最大2ns
- 输入建立时间(Tis):最大2ns
- 输入保持时间(Tih):最大0ns
- 多路复用器和板级延迟(Tmux):最大6ns
4.3 配置PLD
CT1156T2F-S Tile包含一个配置PLD,负责:
- 测试芯片初始化信号配置
- 测试芯片复位控制
- AXI多路复用/解复用逻辑使能
- 相位控制逻辑状态管理
- DAC和ADC控制
PLD通过三线串行接口(PLDRESETn、D0、D1、PLDCLK)与基板FPGA通信,所有数据位在PLDCLK上升沿锁存。
5. 中断系统设计
5.1 中断架构
系统采用多级中断控制器(GIC)架构,支持Tile Site 1和Site 2的中断源和接收:
- 每个Tile Site有自己的IRQ和FIQ线路
- 使用4个GIC控制器管理47个中断源
- COMMRX和COMMTX信号只连接到产生这些信号的Tile的中断控制器
中断源包括:
- 定时器中断
- 外设中断(UART、GPIO等)
- 通信缓冲区状态中断
- 调试接口中断
5.2 中断优先级处理
GIC控制器支持中断优先级管理和分发:
- 每个中断源可配置优先级
- 支持中断屏蔽
- 可配置为电平触发或边沿触发
- 支持中断亲和性设置(在多核系统中)
6. 内存映射与编程模型
6.1 系统内存布局
系统采用统一的内存地址空间,主要区域包括:
| 内存范围 |
大小 |
总线类型 |
描述 |
| 0x00000000-0x0FFFFFFF |
256MB |
AHB/AXI |
动态内存 |
| 0x10000000-0x10000FFF |
4KB |
APB |
系统寄存器 |
| 0x10004000-0x10017FFF |
80KB |
APB |
各种外设(AACI、UART等) |
| 0x10018000-0x10018FFF |
4KB |
APB |
DMC配置 |
| 0x10020000-0x1002FFFF |
64KB |
AHB |
CLCD配置 |
| 0x10040000-0x1007FFFF |
256KB |
AHB |
GIC控制器 |
| 0x40000000-0x5FFFFFFF |
512MB |
AHB/AXI |
静态内存控制器 |
| 0x60000000-0x6FFFFFFF |
256MB |
AHB/AXI |
PCI接口 |
| 0x80000000-0xFFFFFFFF |
2GB |
AHB |
逻辑Tile Site 2 |
6.2 关键寄存器配置
系统提供了一系列配置寄存器,主要位于0x10000000基地址:
- SYS_PLD_INIT:ARM1156T2F-S初始化寄存器
- SYS_SET_VOLTAGE0:设置和读取VDDCORE电压
- SYS_SET_VOLTAGE1:设置和读取PLDVDD25电压
- SYS_PLD_CTRL1:PLL配置和控制
- SYS_PLD_CTRL2:状态读取和控制
提示:所有寄存器必须先向base+0x20写入0xA05F解锁后才能修改。
7. 调试与性能分析
7.1 调试接口配置
系统支持多种调试连接方式:
- JTAG ICE:通过J18连接器
- USB调试端口:通过J16连接器
- RealView ICE:通过专用调试接口
调试功能包括:
- 处理器核心状态监控
- 内存和寄存器访问
- 断点设置
- 性能计数器读取
7.2 性能优化技巧
基于AXI总线的系统性能优化可以考虑:
- 突发传输:利用AXI的突发传输能力减少总线开销
- 乱序完成:允许响应乱序返回提高总线利用率
- 多缓冲设计:避免总线等待状态
- 时钟域优化:根据外设需求选择合适的时钟频率
- DMA使用:减轻处理器负担
8. 实际应用中的注意事项
在开发过程中,有几个关键点需要特别注意:
- 时钟配置:错误的时钟设置可能导致系统不稳定或外设无法工作
- 电源管理:不同电压域需要正确配置,特别是测试芯片核心电压
- 复位序列:必须严格遵守复位时序要求
- 信号完整性:高速总线(如DDR接口)需要特别注意布局布线
- 调试支持:合理利用ETM和调试接口可以显著提高开发效率
对于初次使用该平台的开发者,建议:
- 从简单的示例项目开始
- 逐步验证各子系统功能
- 充分利用ARM提供的文档和示例代码
- 在修改关键配置(如PLL设置)前做好备份