微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > CISC处理器调试系统的设计实现,详细软硬件架构、流程、代码

CISC处理器调试系统的设计实现,详细软硬件架构、流程、代码

时间:06-04 来源:互联网 点击:

存器、复位、断点设置检测和处理器运行控制,还有写CPU内部程序计数器PC等调试功能的实现。

  1. 处理器运行控制模块

处理器运行控制模块是片上调试器的核心部件,负责指令译码和根据当前指令和CPU的运行状态进行机器指令或者微指令的单步和断点的判定,并且根据判定结果控制CPU的运行。指令译码就是根据PC上层平台发送到指令寄存器中的指令来产生相应的控制信号,直接通过这些控制信号控制CPU的运行、停止和复位等。设计了9条指令,分别为:

1)SREAD:CPU停止,并且此时选通CPU内部扫描寄存器数据链读出CPU内部主要寄存器的值。

2)STEP:微指令的单步,CPU运行一条微指令然后停下来。

3)MSTP:机器指令的单步,CPU运行一条机器指令然后停下来。

4)BPSET:断点设置,该指令只负责产生断点设置所需要的相应控制信号,并不负责断点数据的写入。实际的断点数据是用户通过PC机的上层工具设置以后,再进行一个BPR的数据写入来完成的。

5)RUN:CPU运行指令。

6)BRUN:断点运行,在断点设置完成以后,发送该指令来使CPU运行。

7)RESET:复位指令,使CPU复位。

8)WPC:写PC指令,为用户提供对CPU内部程序计数器PC值进行写入的功能,以满足某些用户的特殊需求。

9)STOP:CPU停止指令。

上面所描述的9条指令, 其中BPSET和BPRUN指令是两条相互依赖的调试指令,两条指令联合完成断点调试功能。其他的指令都是一条指令完成相应的调试功能。

  1. 断点设置和检测

首先要通过外部来设置断点值,硬件部分要设计一个断点寄存器BPR用来存放用户设置的机器指令断点或者微指令断点值,该寄存器位宽为24,其中低18位为有效数据位,高6位作为预留的扩展位。通过边界扫描的方式将断点值串行的移入到断点寄存器BPR中。

BPR[17:16]两位为标志位用来进行断点类型的区分,当BPR[17:16]=00时表明要写入的是微指令断点,此时BPR[8:0]为要写入的微指令的断点值即断点微地址;当BPR[17:16]=01时表示要写入的是机器指令断点,此时BPR[15:0]为要写入的机器指令的断点值即内存机器指令的地址。

断点的检测首先根据标志位来区分断点类型,是微指令断点还是机器指令断点。当标志位为00时,将断点值与微指令地址进行比较,其值一致时产生断点触发信号;当标志位为01时,将断点值与PC寄存器中的机器指令地址进行比较,如果一致同样产生断点触发信号。

  1. PC值的写入

处理器调试的过程中,为了能够随时控制处理器所要执行的指令,需要设置PC(程序计数器)值即所要执行的指令的地址。采用边界扫描技术来实现该功能,设计一条扫描链通过该扫描链将要设置的PC值写入到PC寄存器中,扫描链的结构如图5所示。

图5 写PC扫描链

由于CISC处理器内部的寄存器在写入和读出时都有相应的使能信号,所以在写入PC值的时候需要使PC的使能信号PCce有效,而这些寄存器的使能信号的产生是由微指令译码得来的,如果要修改微指令会影响到其他寄存器的使能控制存在一定的风险。

为了解决这个问题可以有两种方法可供选择:

1、将uIR数据读出,PC写操作完成以后再写回

该方法是先将uIR内部的内容读出保存好,然后写入带有PC寄存器使能控制信号微指令,当PC值正确写入以后再将原来保存的uIR的值还原到uIR寄存器中。

2、引入伪微指令寄存器用来在写入PC值取代uIR输出微指令

该方法是在微指令寄存器uIR到微指令译码模块uIR_Decoder之间加入一个扫描寄存器BSC_uIR,称之为伪微指令寄存器,这个寄存器在保证不影响uIR的前提下产生PCce信号。当写入PC值时首先选中该扫描链,然后将要写入PC的数据移入BSC_PC_A中,PCce有效则将BSC_PC_A中数据更新到PC中,完成PC的写操作。

第一种方法操作起来比较繁琐并且对软件的设计要求也比较高,在PC机和硬件平台指令就会存在反复传送数据的局面增加了数据出错的几率。而第二种方法实施起来比较简单,并且只要将需要的微指令和要写入的PC值一起进行一次写操作就可以完成,还保证了uIR寄存器中原有的微指令保持不变。因此本文采用了第二种方法。

  1. 处理器内部状态读出

处理器内部寄存器反映处理器内部运行的状态和当前一些主要数据,在调试过程中必须能够将这些数据读回给用户。这样就需要在处理器内部构建一条自定义数据扫描链,当执行处理器内部数据读出调试功能时先选中该扫描链,然后将该扫描链内部数据读回到PC机上层控制台。处理器内部自定义数据扫描链的结构如图6所示。

图 6 自定义数据扫描链

构建数据扫描链可以考虑在在寄存器的输入或者输出线上加边界扫描单元的方法来捕获数据,而不直接对寄存器本身进行操作,这样就将片上调试器对CPU的侵入性

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top