ARM720T处理器作为经典的ARM7系列处理器,广泛应用于嵌入式系统设计。其与AHB总线的接口设计是系统性能的关键所在。AHB Wrapper作为处理器核与AHB总线之间的桥梁,承担着协议转换、时序调整和信号处理等重要功能。
在典型的SoC设计中,AHB Wrapper需要解决几个核心问题:首先,ARM720T原生使用ASB总线协议,而现代SoC多采用AHB总线,两者在时序和协议上存在差异;其次,测试模式下的总线访问需要特殊处理;最后,低功耗设计需要考虑时钟门控等技术的实现。
时钟门控是AHB Wrapper设计中的关键技术点。设计中使用了一个时钟反相器(uClockInv实例)来生成nHCLK信号,这个反向时钟信号在多个关键场景发挥作用:
BCLK使能生成:在A7x0TWrapMaster模块中,nHCLK参与生成BclkEn信号,这是ASB接口时钟BCLK的使能项。具体实现采用了一个透明锁存器(uLATS实例),确保使能信号在正确的时间窗内保持稳定。
测试信号生成:在A7x0TWrapTest模块中,nHCLK用于生成DriveBwrite和Write信号,这两个信号共同控制BWRITE信号的三态行为。
设计提示:使用反相时钟而非下降沿触发器的设计选择,主要基于两点考虑:一是某些单元库可能不包含下降沿触发器;二是避免综合过程中工具自动插入非预期的时钟门控逻辑。
时钟NAND门(uClockNand实例)用于生成ASB接口的BCLK信号。这种设计确保了时钟信号的干净边沿,同时提供了必要的门控能力。
透明锁存器在AHB Wrapper中有两处关键应用:
BCLK使能生成:在A7x0TWrapMaster模块中的uLATS实例,采用异步置位透明锁存器(LATS设计块描述)。当锁存使能有效时,输出随输入变化;当使能无效时,输出保持最后状态。
从设备选择信号生成:在A7x0TWrapTest模块中的uLATR实例,采用异步复位透明锁存器(LATR设计块描述)。这种设计特别适合需要保持信号直至下一个时钟沿的场景。
锁存器的综合方法与时钟门控类似:在提供的综合脚本中,这些模块会首先被综合,设置为dont_touch属性,然后在Wrapper综合时链接进来。这种方法保证了锁存器实例具有确定的引用,同时防止后续优化流程改变这些关键元件。
三态驱动在Wrapper中多处使用,主要分布在两个模块:
在ASIC设计流程中,任何可能进入三态的信号都需要添加Buskeeper。对于ARM720T Wrapper,以下信号必须添加Buskeeper:
实践经验:Buskeeper的布局需要特别注意,应尽量靠近接收端放置,同时要考虑信号完整性。在实际项目中,我们曾因Buskeeper放置不当导致信号振铃问题,最终通过重新布局和增加终端电阻解决。
ARM7TDMI AHB Wrapper的架构设计体现了清晰的层次划分。图3-1所示的框图展示了主要功能模块:
对于ARM7TDMI-S版本,由于支持全扫描测试,架构更为简洁,去除了测试相关的从接口模块。
AHB信号可分为以下几类:
系统信号:
主设备接口信号:
从设备接口信号:
特别注意DOUT[31:0]的特殊连接要求:必须直接连接到AHB总线的HWDATA[31:0]和A7TWrap的DOUT输入。
ARM7TDMI核心的信号连接需要特别注意以下几点:
时钟与复位:
数据总线:
测试信号:
主状态机是Wrapper的核心控制逻辑,其状态变量AddrState可以取以下值:
状态转移图(图3-3)展示了各种状态间的转换关系。特别值得注意的是SWP指令处理需要三个特殊状态,确保总线锁定操作的原子性。
地址生成采用双路径设计:
这种设计避免了从核心到HADDR的组合路径,提高了时序性能。
该模块的核心功能是处理AHB的SPLIT和RETRY响应,主要机制包括:
测试状态机是测试接口的核心,其状态包括:
28位测试寄存器存储控制输入向量,各位对应不同的核心控制信号。测试数据输出多路复用器由A7TWrapCtrl模块实现,但受本模块控制。
在实际项目中,AHB Wrapper设计常遇到以下问题:
时钟偏移问题:
三态总线冲突:
保持寄存器异常:
基于多个项目经验,总结以下优化方向:
关键路径优化:
功耗优化:
面积优化:
ARM7TDMI-S版本的Wrapper设计有以下特点:
在实际项目中,可根据需求进行以下扩展:
调试接口增强:
性能监控:
安全扩展:
在实现这些扩展时,需要特别注意与原有Wrapper逻辑的时序兼容性,建议采用分层设计方法,保持核心Wrapper的稳定性。