1. ARM7TDMI与AMBA总线接口设计概述
在嵌入式系统设计中,处理器与总线的接口设计是决定系统性能的关键因素之一。ARM7TDMI作为经典的32位RISC处理器内核,通过与AMBA(Advanced Microcontroller Bus Architecture)总线的对接,能够构建高性能的片上系统(SoC)。AMBA总线架构中的ASB(Advanced System Bus)是一种高性能系统总线,支持多主设备操作和流水线传输,特别适合对实时性要求较高的应用场景。
ARM7TDMI与ASB总线的接口模块主要实现以下功能:
- 总线主控模式下的地址/数据总线切换
- 传输类型转换(通过BTRAN信号)
- 总线仲裁处理(AGNT/AREQ信号交互)
- 错误检测与处理机制(BERROR信号)
- 测试模式下的从设备功能
这个接口模块本质上是一个协议转换器,将ARM7TDMI的本地总线时序转换为符合AMBA ASB规范的时序。模块内部包含两个独立的状态机:主状态机负责正常操作时的总线控制,从状态机则用于测试模式下的向量读写。
2. 硬件接口信号详解
2.1 ASB总线信号定义
ASB总线信号可分为以下几类:
2.1.1 仲裁与控制信号
- AGNT:总线授权信号,由仲裁器发出,指示主设备获得总线使用权。该信号在BCLK低电平期间变化,并在高电平期间保持有效。
- AREQ:总线请求信号,本模块默认将其永久拉高,表示ARM核始终需要总线。
- BLOK:总线锁定信号,高电平表示当前传输不可分割,其他主设备不应获得总线访问权。
2.1.2 地址与数据信号
- BA[31:0]:系统地址总线,由当前主设备驱动。地址在对应传输的BCLK高电平前期有效,并保持到传输的最后一个高电平周期。
- BD[31:0]:双向系统数据总线。写传输时由主设备驱动,读传输时由从设备驱动。
2.1.3 传输控制信号
- BWRITE:读写指示信号,高电平表示写周期,低电平表示读周期。其时序与地址总线相同。
- BSIZE[1:0]:传输大小指示,可以是字节(8位)、半字(16位)或字(32位)。
- BTRAN[1:0]:下一传输类型指示:
- 00:地址传输(Address-only)
- 01:非连续传输(Nonsequential)
- 10:保留
- 11:连续传输(Sequential)
2.1.4 响应信号
- BWAIT:等待信号,由从设备驱动。高电平表示需要额外总线周期,低电平表示当前周期可完成传输。
- BERROR:传输错误指示,高电平表示发生错误。与BLAST配合还可指示总线回撤操作。
- BLAST:突发结束指示,高电平表示下一传输需要充分地址解码时间(结束突发序列)。
2.2 ARM7TDMI信号连接
ARM7TDMI的信号与ASB总线的连接关系体现了接口设计的核心逻辑:
2.2.1 关键控制信号连接
- A[31:0]:通过三态缓冲器连接到BA总线
- nRW:连接到BWRITE信号
- LOCK:连接到BLOK信号
- MAS[1:0]:连接到BSIZE信号
- nTRANS:连接到BPROT[1](保护位)
- nOPC:连接到BPROT[0](操作码取指指示)
2.2.2 特殊配置信号
- APE:接Vdd,启用内核地址流水线
- BIGEND:接Vss,固定为小端模式
- BUSEN:接Vss,使用双向数据总线
- ISYNC:接Vdd,中断不进行同步
2.2.3 测试相关信号
- TDI/TDO/TCK/TMS/nTRST:连接至JTAG接口
- COMMRX/COMMTX:连接至中断控制器的通信通道
3. 主状态机设计与工作原理
3.1 状态机架构
主状态机是接口模块的核心控制单元,负责管理ARM7TDMI与ASB总线之间的交互。状态机在BCLK的下降沿触发,包含6个主要状态:
- IdleGnt(空闲授权状态):已获得总线授权,但无待处理内存请求
- IdleHld(空闲保持状态):未获得总线授权,且无待处理请求
- XferAct(传输活跃状态):已获授权且有内存请求
- XferHld(传输保持状态):有未完成请求但未获授权
- XferGnt(传输授权状态):未完成请求后获得授权
- XferRet(传输回撤状态):处理未完成的传输(BWAIT、BLAST和BERROR同时为高)
3.2 状态转移逻辑
状态机的转移条件主要基于以下信号:
- AGNT:总线授权状态
- nMREQ:ARM核的内存请求信号
- BWAIT/BLAST/BERROR:总线响应信号
- SEQ:ARM核的连续传输指示
关键状态转移包括:
- 复位后根据AGNT状态进入IdleHld或IdleGnt
- 从IdleGnt到XferAct:当nMREQ变低(有内存请求)
- 从XferAct到XferHld:当失去总线授权(AGNT变低)
- 从XferHld到XferGnt:当重新获得授权
- 进入XferRet:当检测到总线回撤条件(BWAIT、BLAST和BERROR同时为高)
3.3 输出信号生成
状态机在不同状态下产生特定的输出组合:
- cken:时钟使能信号,连接到ARM的nWAIT。低电平时停止ARM时钟以降低功耗。
- Mdbe:主设备数据总线使能,控制数据总线驱动。
- Mabe:主设备地址总线使能,控制地址和相关信号驱动。
- BTRAN[1:0]:根据nMREQ和SEQ信号生成传输类型。
特别值得注意的是Granted信号的生成逻辑(如图1-4所示),它确保在传输未完成时(BWAIT为高)不会改变总线控制权。
4. 测试模式与从设备操作
4.1 测试模式原理
当接口模块作为从设备被寻址时(通过DSELARM信号),可进入测试模式。此时测试接口控制器(TIC)作为总线主设备,通过特定序列的读写操作向ARM核写入和读取测试向量:
- 写入控制信息
- 写入数据输入值或读取数据输出值
- 读取状态和控制输出
- 读取地址
4.2 从状态机设计
从状态机负责测试模式下的操作序列控制,包含以下状态:
- INACTIVE:初始状态
- TURNAROUND:总线方向切换
- CTRL_IN:控制信息写入
- DATA_IN:数据写入
- STAT_OUT:状态读取
- ADDR_OUT:地址读取
- DATA_OUT:数据读取
- DSEL_RETRACT:从设备回撤状态
状态转移由DSELARM、BWRITE和BWAIT信号控制,在BCLK的下降沿触发。
4.3 测试向量结构
测试向量分为控制输入和状态输出两部分:
4.3.1 控制输入向量(32位)
| 信号 |
位位置 |
说明 |
| SMTest |
29 |
主状态机测试使能 |
| nENIN |
28 |
使能输入(低有效) |
| APE |
25 |
地址流水线使能 |
| BL[3:0] |
24-21 |
字节锁存控制 |
| TMS/TDI/TCK/nTRST |
20-17 |
JTAG接口信号 |
| DBGEN |
12 |
调试使能 |
| ABORT |
2 |
内存中止(连接BERROR) |
| nRESET |
0 |
复位信号 |
4.3.2 状态输出向量(32位)
| 信号 |
位位置 |
说明 |
| DBGRQI |
24 |
内部调试请求 |
| COMMRX/COMMTX |
21-20 |
通信通道状态 |
| nM[4:0] |
13-9 |
处理器模式 |
| LOCK |
6 |
锁定操作指示 |
| nRW |
2 |
读写状态 |
| SEQ |
0 |
连续地址指示 |
4.4 主状态机测试
通过设置控制向量的SMTest位(29)可启用主状态机测试。此时:
- 状态机的时钟由SMTest和BCLK组合产生
- 测试模式下的BERROR、BWAIT和BLAST由测试向量位控制
- 状态机的当前状态可通过状态输出向量的SMState[2:0]读取
特别注意总线回撤操作的测试:当BWAIT、BLAST和BERROR同时为高时,状态机应进入XferRet状态,且测试接口控制器也会看到回撤操作,导致几个周期的延迟。
5. 实际应用中的设计考量
5.1 时序收敛问题
在物理实现时需要特别关注以下关键路径:
- nMREQ和SEQ到BTRAN的组合逻辑路径
- BERROR、BWAIT和BLAST到Granted信号的路径
- 时钟域交叉处理(ARM核时钟与BCLK的关系)
5.2 性能优化技巧
- 流水线深度:合理配置APE信号可平衡性能与时序裕量
- 总线利用率:通过BTRAN信号优化连续传输,减少地址周期
- 错误恢复:利用BERROR和BLAST实现健壮的错误处理机制
- 测试覆盖:充分利用测试模式验证状态机的所有可能状态
5.3 常见问题排查
-
总线死锁:
- 现象:系统停止响应,AGNT信号停滞
- 检查:BLOK信号是否被不当置位,Granted逻辑是否正确
-
数据损坏:
- 现象:读回数据与预期不符
- 检查:Mdbe/Mabe信号的时序,特别是与BCLK的相位关系
-
性能下降:
- 现象:BWAIT频繁置位
- 检查:从设备响应时间,总线负载平衡
-
测试模式失败:
- 现象:无法正确读写测试向量
- 检查:DSELARM信号的解码逻辑,从状态机序列
6. 设计验证与调试
6.1 功能验证要点
完整的验证应覆盖以下场景:
- 所有主状态机状态转移路径
- 各种传输类型(地址、非连续、连续)
- 总线错误和回撤情况
- 锁定序列操作
- 测试模式下的从设备功能
6.2 调试接口利用
充分利用ARM7TDMI的调试功能:
- 通过JTAG接口观察内部状态
- 使用EmbeddedICE设置观察点
- 利用COMMRX/COMMTX通道输出调试信息
6.3 实际测量建议
在物理原型上建议测量:
- BCLK与地址/数据信号的建立保持时间
- AGNT到地址有效的延迟
- BWAIT响应时间窗口
- 不同负载条件下的最大总线频率
通过逻辑分析仪或示波器捕获典型传输波形,与仿真结果对比验证。