图3( b) 为DSU 控制寄存器,它与程序状态字作用相似,能够直接控制微处理器的行为模式,决定微处理器如何进入调试状态。T E 位将控制处理器中指令Buf fer 的使能; 第1~ 5 位将作为处理器能够被挂起的条件位,BE 表示处理器发生错误可进入调试模式,BW表示触发IU 监测点可进入调试模式,BS 表示执行断点指令( ta1) 可进入调试模式,BX 表示任何陷阱可进入调试模式,BZ 是在特定陷阱才能进入调试模式; DM 将用来指示处理器进入调试状态; EE 位和EB 位为只读,将记录DSU 外部使能和调试信号; PE 位用来记录处理器是否进入错误状态; HL 位记录处理器是否暂停;PW 位记录处理器是否进入省电模式; 其他位均未定义。
图3( c) 为DSU 中断和单步寄存器,由于该系统设计的AHB 总线系统最大可支持16 个主设备,所以这里的中断和单步控制寄存器以及屏蔽寄存器也将能够控制16 个主设备。当前面所述的引起系统进入调试模式的条件触发时,则相应的BNx ( break now ) 位将被置位,而SS( single step) 位则可通过外部写入而使得处理器执行单步操作,这些位将直接驱动对应每一个微处理器的控制部件,由各处理器负责监测并做出相应的调试反应,如PC 现场保护、冻结流水和定时器、关闭看门狗等。
图3( d) 为DSU 屏蔽寄存器,考虑在多处理器系统中一个处理器进入调试对其他处理器的影响,特设计此寄存器。EDx 表示一个处理器进入调试模式时,处理器x 是否强制进入调试模式; DMx 表示处理器x 是否屏蔽其他处理器进入调试模式。当某一处理器因触发断点或满足DSU 控制寄存器所设定的条件时,调试单元内部的屏蔽逻辑将会查询该寄存器,对其中的EDx和DMx 进行相与运算,得出的结果将直接写入DSU中断和单步寄存器中对应BNx 位,由此可直接决定其他处于正常状态的处理器是否连带进入调试模式。
调试单元的设计初衷,不仅是要能够控制整个系统接受调试控制,同样也需要用户能够对所有片上存储单元进行访问。整个片上存储单元可分为3 类: 一是两大T race Buf fer,包括AHB 和指令追踪缓存; 二是DSU 内部寄存器,除前所述的四大关键寄存器,还包括用于记录时间值的时间索引寄存器,用于控制AHBTrace Buf fer 内部地址的AHB T race Buffer 地址索引寄存器,用于存储精确断点地址的AHB 断点寄存器和与其配套的掩码寄存器; 三是微处理器内部寄存器,包括cache,IU 寄存器堆,SPR,PSR,FSR,窗口寄存器,PC 和NPC 指针,陷阱寄存器等。为了能对如此多的寄存器和存储器进行准确定位,必须有一套完整的寻址机制,所以在DSU 设计过程中设计了一套多级译码体体系,将片上所有存储部件地址映射入此体系中。基于以上对DSU 功能的设计考虑,其具体的结构组成如图4所示。
图4 DSU 内部结构框图
当DSU 被AHB 总线译码器选中后,DSU 内部的第一级译码器将对地址总线访问地址进行译码,它将判断当前访问的对象属于三类存储单元中的哪一类,如果是第二类即DSU 内部寄存器,那么将继续进行第二级地址译码,译码的结果将决定当前调试主机将访问哪一个功能寄存器; 如果是第一类存储部件,由于它们容量较大,并需要其128 b 的位宽能与总线位宽相兼容,所以需要在这些循环存储体内设计一个独立的译码器,能够对AHB 索引寄存器或一级译码送出的地址再译码;对于第三类存储部件,由于此类存储部件位于DSU 外部,所以除了需要DSU 内部的第一、二级译码外,在处理器内部仍然需要更深层次的辅助译码,因此在实际工作中,访问此类存储单元所需的时钟周期要多于其他几类存储单元。在图4 中,左边5 个寄存器将共同决定AHB T race Buf fer 的工作情况,断点判别逻辑根据控制、断点和屏蔽寄存器的内容共同决定AHB TraceBuf fer 记录值来源于总线还是调试主机; 时间索引寄存器值将随时钟周期自增加,同时也作为记录内容的一部分方便以后查询; 而索引寄存器也将随时钟周期自增,为正常通信数据提供地址,而在调试模式下,将由一级译码器直接提供访问地址; 右边3 个寄存器将共同控制微处理器的工作状态,在DSU 外部使能信号下处理器进入调试模式后,处理器将程序指针入栈保护,同时输出信号指示当前调试状态并将定时器冻结。当DSU 控制寄存器中的BN 位被清零时,则处理器定时器解冻,程序指针恢复,退出调试状态。
1. 4 调试通信链路
在图1 中就已经提到在本系统设计中需要一个调试接口,该接口将连接调试主机与AHB 总线,它包含一个连接在AHB 总线上的专用UART。该系统为此设计了一个简单的通信协议,它支持数据在串口和AHB 接口之间的格式转换。通过这个通信链路,一个读或写传输可以在任意的AHB 地址上产生,其结构如图5 所示。
图5 调试通信链路
该系统设计的UART 包含一个波特率发生器,它利用一个18 位宽的自减计数器产生所需的波特率,在时钟的驱动下,每当计数器下溢,则产生一个脉冲信号,同时将一个重载寄存器的预定值重新载入计数器,最终产生的UART 脉冲频率将是所需波特率的8 倍。
调试机的串口支持的数据帧结构为10 位,包括1 位起始位、8 位数据位和1 位停止位( 高电平) 。当进行的是读传输时,除了将读地址按照规定的帧格式进行拆分外,在开始阶段需另加1 个控制帧,其中包含指明当前传输的类型以及连续传输的块数; 若进行的是写传输,那么在地址发送完后,还需要按照帧结构发送调试数据。每次进行连续传输时,只需要发出1 个首地址,以后地址将按照控制帧中指定的块数按字自增。
通过本接口,调试机的串行数据将能被此接口封装成符合AHB 总线协议的传输格式,同样在读传输时,调试输出数据也能被此接口分解为单bit 数据返回到调试串口。
2 结 语
本文所提出的一种硬件调试单元完全自主实现,且顺利通过Modelsim 的功能仿真,所以它不但能够有效的完成对片上处理器的诊断与调试,而且其拥有的跟踪技术也能对程序的运转以及片内的通信状况进行实时监控,同时专用的硬件协议转换模块在片内就实现了远程调试连接,能够方便的与调试机进行通信。