1. 项目概述与核心价值
在嵌入式系统和老派硬件设计的深水区里混迹,处理器与外部世界的“对话”方式——也就是总线操作——是决定整个系统性能、稳定性和设计复杂度的基石。今天,我想和你深入聊聊摩托罗拉(后来是飞思卡尔)的M68040处理器,特别是它那套设计精妙的总线协议,以及与之紧密相关的JTAG边界扫描技术。如果你正在维护一个基于68K架构的遗留系统,或者对经典处理器的内部工作机制有浓厚的兴趣,那么这篇文章就是为你准备的。它不仅能帮你理解手册里那些枯燥的时序图和数据表,更能让你掌握在实际硬件调试和测试中,如何让这块“老将”乖乖听话。
M68040作为68000家族的高性能32位成员,其总线接口的设计目标是高效、同步且灵活。它摒弃了早期型号的动态总线宽度调整,转向了更简洁、更易于预测的静态32位接口,这要求外围设备必须“跟上节奏”。同时,它集成了对IEEE 1149.1标准,即JTAG边界扫描的支持,这为硬件工程师提供了一扇窥探芯片内部、进行板级测试和调试的宝贵窗口。理解这两者,就等于握住了驾驭这颗处理器的缰绳:前者决定了系统跑得多快多稳,后者则是在它“生病”时进行诊断和修复的手术刀。
2. M68040总线架构与核心机制解析
2.1 双时钟系统与同步时序模型
M68040总线操作的核心在于其独特的双时钟设计。处理器内部使用一个高频的处理器时钟(PCLK),而总线接口则运行在频率减半的总线时钟(BCLK)上。PCLK在芯片内部通过锁相环(PLL)与BCLK的上升沿对齐。这种设计非常巧妙:它让处理器内核能以更高的频率运行,执行复杂的运算和流水线操作,而对外部内存和设备的接口则运行在相对较低、对时序要求更宽松的频率上,大大降低了系统设计中对存储器速度的苛刻要求。
所有总线输入/输出信号的时序,都以BCLK的上升沿为绝对参考点。这意味着,当你设计外围电路时,只需要关心与BCLK相关的建立时间(tsu)、保持时间(thi)和输出延迟(td),而无需纠结于内部PCLK的复杂相位。手册中的图7-1清晰地展示了这种关系:输出信号通常在BCLK周期内的T4状态发生改变,而输入信号则必须在BCLK上升沿前后的一个特定时间窗口内保持稳定,才能被正确采样。
注意:这里有一个关键例外。TIP(传输进行中)、TA(传输应答)和BB(总线忙)这三个信号,它们在逻辑电平切换时遵循T4状态,但从驱动状态切换到高阻态(High-Z)的转变却发生在T1状态。在设计总线仲裁或监控电路时,必须特别注意这个细节,否则可能导致总线冲突。
2.2 信号集与数据传输机制
M68040的总线是非复用的,即地址线(A31-A0)和数据线(D31-D0)是分开的。这简化了接口逻辑,但需要更多的引脚。控制信号则负责传达传输的意图和状态:
- TS (Transfer Start):一个BCLK周期宽度的脉冲,标志着一个总线周期的开始。
- TIP (Transfer In Progress):在整个总线访问期间保持有效,高电平表示总线正忙。
- TA (Transfer Acknowledge):由从设备(如内存、外设)驱动,有效表示数据已准备好(读)或已接收(写),请求终止当前周期。
- R/W (Read/Write):指示传输方向。
- SIZ1, SIZ0 (Size):编码传输大小(字节、字、长字、行)。
- TT1, TT0 (Transfer Type)和TM2-TM0 (Transfer Modifier):共同定义访问类型(如正常数据存取、缓存推送、MOVES指令访问等)。
数据传输基于一个严格的握手协议。主设备(通常是CPU)发起周期,从设备通过TA响应。M68040不支持其前辈MC68020/30的动态总线大小调整,它假定所有连接的设备都能处理32位数据。对于需要连接8位或16位外设的场景,摩托罗拉提供了MC68150动态总线调整器芯片作为桥梁。
2.3 字节使能与对齐处理
这是M68040总线设计中最体现其灵活性的地方之一。通过SIZ1、SIZ0、A1、A0这四个信号,可以生成针对数据总线四个字节段(D31-D24, D23-D16, D15-D8, D7-D0)的独立使能信号。表7-1详细列出了所有组合。
例如,当CPU要读取一个起始于地址$1001的字(2字节)数据时,它会设置SIZ[1:0]=10(表示字),A[1:0]=01(表示偏移)。根据表7-1,这将激活D23-D16和D15-D8两个字节段。外部设备必须将这两个字节的数据放到总线的正确位置上,其余字节段的数据将被忽略。
非对齐访问是另一个重要话题。M68040允许数据存放在任何字节边界,但非对齐的访问(如长字数据起始于奇地址)会导致性能损失。如图7-5和图7-6所示,一个非对齐的长字读操作会被分解成三个独立的、对齐的总线周期(一个字节+一个字+一个字节)。编译器为了追求最佳性能,应尽量将数据按自然边界对齐(字数据在偶地址,长字数据在4的倍数地址)。
3. 各类总线传输周期的时序深度剖析
3.1 字节、字、长字读传输
这是最基本的总线操作。流程图(图7-8)和时序图(图7-9)完美地展示了其过程:
- C1周期:CPU在BCLK上升沿后不久,驱动地址(A31-A0)、传输属性(TTx, TMx, SIZx, UPAx)、置R/W为高(读),并发出一个BCLK周期宽的TS脉冲。TIP信号被拉高。
- C2周期(或等待状态CW):CPU在C1结束时撤销TS。从设备解码地址,将数据放置到数据总线的相应字节上,然后驱动TA信号有效。
- 周期终止:在C2结束时的BCLK上升沿,CPU采样TA。若TA有效,则锁存数据总线上的值,传输结束,TIP可能根据后续操作保持或撤销。若TA无效,CPU插入等待状态(CW),并在每个后续BCLK上升沿继续采样TA,直到其有效为止。
实操心得:在设计低速外设时,利用TA信号插入等待状态是实现简单速度匹配的经典方法。你可以用一个计数器或状态机,在地址解码有效后延迟若干个BCLK周期再发出TA,从而为外设争取足够的响应时间。务必确保TA的建立和保持时间满足规范。
3.2 行读传输与突发模式
为了提高缓存填充和MOVE16指令的效率,M68040支持16字节(4个长字)的行传输,并首选突发模式。
- 突发读流程:如图7-11所示,CPU在C1周期给出起始地址(A3, A2用于突发计数),并将SIZx设置为“行”。从设备在第一个TA有效时,同时通过TBI信号表明自己是否支持突发。若TBI无效,则突发继续。
- 地址递增:在突发模式下,从设备负责在内部递增A3和A2,以提供后续三个长字数据。CPU的地址线在突发期间保持稳定。这是与某些其他处理器(由主设备递增地址)的关键区别。
- 突发禁止:如果从设备在第一个周期同时断言TA和TBI,则表示它不支持突发。CPU将终止突发,转而使用三个独立的长字读周期来完成剩余12字节的传输(见图7-13)。尽管是分开的周期,但CPU会锁定总线,不允许其他主设备打断这个行传输序列。
- 缓存抑制:TCI信号在行读的第一个周期被采样。如果有效,即使数据被传输,也不会填入缓存。这对于映射到内存空间的I/O设备非常有用,可以避免缓存污染。
3.3 写传输与读-修改-写操作
写传输的流程与读传输类似,但数据流向相反。CPU在地址周期后,将数据驱动到数据总线上,然后等待从设备的TA响应。读-修改-写操作(如TAS、CAS指令)是一个原子序列,用于信号量等同步操作。在此期间,LOCK信号会被断言,以防止其他总线主设备访问同一内存位置,LOCKE信号则在该序列的最后一个周期被断言。
4. JTAG边界扫描技术详解与应用
4.1 JTAG架构与TAP控制器
JTAG(Joint Test Action Group)标准,即IEEE 1149.1,在M68040上通过一个专用的测试访问端口实现。其核心是一个16状态的TAP(Test Access Port)控制器状态机,由TCK(测试时钟)、TMS(测试模式选择)、TDI(测试数据输入)和TDO(测试数据输出)四个信号控制。TRST(测试复位)是可选的,用于异步初始化TAP控制器。
边界扫描的本质是在芯片的每个I/O引脚内部插入一个称为边界扫描单元(BSC)的移位寄存器。在测试模式下,这些BSC可以捕获引脚的输入/输出状态,或强制引脚输出特定值,从而将芯片内部逻辑与外部PCB走线“隔离”开来,实现对互连网络的测试。
4.2 M68040的边界扫描描述语言与电气特性
用户手册6.21页的片段,实际上是边界扫描描述语言的一部分。它定义了每个引脚对应的边界扫描单元的类型和功能。例如,(BC_4, PCLK, input, X)表示PCLK引脚连接的是一个BC_4类型的BSC,方向为输入,安全值为X(无关)。
手册6.7节提供的JTAG电气和时序规范,是硬件设计时必须严格遵守的:
- 直流电气特性:包括输入高/低电平电压(VIH/VIL)、漏电流、输出驱动能力等。例如,TDO输出高电平至少为2.4V,低电平最高为0.5V。
- 交流时序规范:这是确保JTAG链稳定工作的关键。表6-8列出了所有关键时序参数,例如:
- TCK最大频率:10 MHz。这意味着你的JTAG调试器时钟不能超过这个速率。
- TMS/TDI建立保持时间:数据必须在TCK上升沿前至少20ns(Tsu)稳定,并在之后保持至少5ns(Th)。
- TCK到TDO有效:在TCK上升沿后,TDO数据最晚在20ns内有效。
图6-10和图6-11的时序图直观展示了边界扫描数据和TAP端口数据的传输时序。设计JTAG接口电路时,必须确保驱动器的输出时序和接收器的输入时序满足这些要求。
4.3 边界扫描的实际应用与设计警告
手册中特别用DESIGN_WARNING属性强调了一点:“当进入边界扫描测试模式时,必须遵守BCLK和PCLK上的非标准时钟协议。”这是一个极其重要的警告。
在正常操作中,BCLK和PCLK有严格的相位关系。但当芯片进入JTAG测试模式时,其内部逻辑可能被挂起或重新配置,此时这两个时钟输入可能被当作普通I/O处理,或者需要满足特殊的静态电平要求(如上拉/下拉),以防止芯片进入不确定状态或产生破坏性电流。具体的要求需要查阅更详细的设计指南或应用笔记。忽视这个警告,可能导致系统在尝试进行JTAG调试时无法连接,甚至损坏处理器。
JTAG的典型应用场景包括:
- 生产测试:在PCB组装后,通过JTAG测试所有芯片间的连接(开路、短路)。
- 系统调试:通过JTAG访问处理器的内部调试模块(如果存在),进行单步执行、断点设置、寄存器/内存查看修改。
- 编程:对板上的Flash或CPLD/FPGA进行编程。
- 故障诊断:在系统失效时,通过边界扫描隔离故障芯片。
5. 系统设计要点与常见问题排查
5.1 总线接口设计要点
- 地址解码与字节使能生成:根据表7-1和图7-4的逻辑,使用PAL或CPLD生成精确的字节使能信号(如
/UDS,/LDS对于16位设备),这是连接不同宽度存储器的关键。错误的使能会导致数据错位。 - 等待状态生成:对于慢速设备,必须设计可靠的TA延迟电路。简单的做法是用一个计数器在地址有效后开始计数,计数满后产生TA。确保TA信号满足建立/保持时间要求。
- 总线仲裁:在多主系统(如带有DMA控制器)中,需要处理BR(总线请求)、BG(总线授权)和BB(总线忙)信号。确保在CPU释放总线(TIP变低)后,其他主设备才能驱动地址和数据线。
- 时序收敛分析:必须对地址、数据、控制信号进行详细的时序分析,考虑PCB走线延迟、缓冲器延迟和时钟抖动。确保在最坏情况下,输入信号的建立/保持时间,以及输出信号的延迟时间仍满足手册第11节的AC特性要求。
5.2 JTAG链设计要点
- 链的顺序与长度:将板上所有支持JTAG的器件(CPU, CPLD, FPGA等)的TDO和TDI首尾相连,形成一条扫描链。链的顺序会影响测试向量的生成和调试时的器件定位。链过长会降低测试速度。
- 上拉电阻:TMS、TDI和TRST(如果使用)通常需要上拉电阻(如4.7kΩ)到VCC,以确保在JTAG控制器未连接时,这些信号处于确定的无效状态(TMS为高,保持在复位状态)。
- 信号完整性:TCK是高速时钟信号,布线时应作为传输线处理,避免过冲和振铃。TDO是输出,驱动能力有限,长距离走线可能需要缓冲。
- 电源与电平:确保JTAG调试器与目标板的逻辑电平兼容(通常是3.3V或5V)。如果不同,需要电平转换。
5.3 常见问题与排查实录
问题1:系统可以启动但运行不稳定,偶尔数据出错。
- 排查思路:这很可能是时序问题。首先检查BCLK的时钟质量(幅度、边沿速度、抖动)。然后,使用逻辑分析仪或示波器,捕获一次出错的读写周期。重点测量:
- 地址/数据对BCLK的建立保持时间:是否满足
tsu和thi? - TA信号的时序:是否在BCLK上升沿前足够早有效(建立时间)?是否在之后保持足够久(保持时间)?
- 电源噪声:在CPU核心和I/O电源引脚上是否存在大的毛刺?增加去耦电容。
- 地址/数据对BCLK的建立保持时间:是否满足
- 可能原因:存储器访问时间不足(TA插入的等待状态不够);总线负载过重导致边沿变缓;时钟信号受到干扰。
问题2:无法通过JTAG连接到M68040。
- 排查步骤:
- 基础检查:确认目标板供电正常,JTAG连接器引脚定义正确,线缆连接牢固。
- 电压检查:测量TCK、TMS、TDI上的电压,确认其上拉有效,且电平符合要求。
- 信号活动检查:用示波器查看TCK和TMS。连接时,调试器会发送一串特定的TCK/TMS序列来复位TAP控制器并进入空闲状态。如果看不到TCK活动,检查调试器配置和目标板供电。如果TCK有活动但TMS一直是高或低,检查连接或上拉电阻。
- 检查“设计警告”:确认在尝试JTAG连接时,BCLK和PCLK是否处于手册要求的状态(可能是固定电平或特定频率的时钟)。这是最容易忽略的一点。
- 扫描链检测:大多数JTAG调试软件都有“扫描链检测”功能。运行它,查看是否能识别出器件ID。如果识别不出,可能是链中某个器件损坏、电源不对、或TDO到TDI的连接断开。
问题3:进行边界扫描互连测试时,大量引脚报错。
- 排查思路:这通常是板级问题,而非芯片问题。
- 检查测试向量:确认使用的边界扫描描述语言文件与板上芯片的型号、封装完全匹配。
- 检查电源和地:确保所有芯片的电源和地都连接良好。一个虚焊的电源脚会导致整个芯片的I/O行为异常。
- 检查上拉/下拉电阻:有些未使用的输入引脚或双向引脚在测试时需要正确的偏置状态,如果板上的上拉/下拉电阻值与测试假设不符,会导致测试失败。
- 隔离测试:如果可能,将复杂的扫描链拆分成小段单独测试,以定位故障区域。
问题4:突发传输模式无法工作,CPU总是回退到长字周期。
- 排查重点:检查从设备(通常是内存控制器或SRAM)在行读的第一个周期,是否正确地同时发出了TA有效和TBI无效。用逻辑分析仪捕获第一个传输周期的TBI信号。如果TBI为高,则表明从设备声明不支持突发。你需要检查内存控制器的配置寄存器,确保其突发模式已使能,并且其时序满足M68040突发周期的要求(即在C3, C4, C5周期能连续快速地提供数据)。
深入理解M68040的总线操作和JTAG边界扫描,不仅仅是读懂一份技术手册,更是掌握了一套硬件系统级的调试与验证方法论。这些知识在面对一个“沉默”的电路板时,能为你提供清晰的排查路径。从精确的时序计算到谨慎的扫描链设计,每一个细节都关乎系统的成败。我个人的体会是,在处理这类经典架构时,耐心和严谨远比追求最新技术更为重要。一份清晰的手册、一台可靠的示波器、一个支持良好的JTAG调试器,以及一套有条理的排查流程,是你解决大多数硬件难题的最有力工具。最后,别忘了在初始设计时就为关键的测试点(如TS, TA, TBI, TCK, TMS)预留焊盘或测试钩,这会在调试阶段为你节省无数的时间。