简单高效的在线仿真方法及接口电路转让专利

申请号 : CN201310164614.9

文献号 : CN103714190B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈建业

申请人 : 深圳市汇春科技有限公司

摘要 :

一种简单高效的在线仿真方法及接口电路,用于软件开发工具通过一通信接口对单片机系统进行在线仿真或调试。所述接口电路连接在该通信接口与带有一CPU的第二电路之间,包括第一内部寄存器,连接源自通信接口的下行数据总线以获得写入数据并通过命令数据总线DBI输出往仿真器,该仿真器还连接所述通信接口的读/写控制线和所述下行数据总线;该仿真器还连接一断点寄存器堆及所述CPU;该断点寄存器堆还接入所述下行数据总线;输出自CPU的CPU状态总线CPU_STAT连往所述通信接口以便传送给另一通信方。采用本发明,极大方便了应用开发者对单片机实时全面的在线仿真。

权利要求 :

1.一种简单高效的在线仿真方法,其特征在于,包括:

步骤A.将软件开发工具通过一通信接口连接一单片机系统以进行主从机间的同步通信;所述单片机系统为以一单片机为中央控制单元的一电路、装置或设备;该单片机内部设置有一第一内部寄存器;

步骤B.所述软件开发工具通过该通信接口向所述第一内部寄存器执行写“命令数据”的步骤;当所述命令数据为有效命令数据则所述单片机启动主机对从机CPU当前在线命令的命令操作;

反复执行步骤B直到完成主从机间的在线仿真或调试;

所述通信接口包括二线同步串行通信接口,该二线同步串行通信接口包括两根信号线一为时钟线Y2CK另一为数据线Y2D的Y2接口;所述主从机基于该两根信号线以4个基本命令的数据传输过程为元素进行组合而进行双向数据传输,该4个基本命令包括“读地址”、“写地址”、“读数据”和“写数据”命令。

2.根据权利要求1所述简单高效的在线仿真方法,其特征在于:所述有效命令数据为一组预定义的单字节二进制数,分别对应着的在线命令包括:软复位、暂停、设置断点、取消断点、全速运行、单步进入或访问SFR、访问IRAM、访问XRAM、访问FLASH。

3.如权利要求1所述简单高效的在线仿真方法,其特征在于:定义一地址数据来对应第一内部寄存器的地址,则步骤B包括:主机通过所述Y2接口发出写入该地址数据的“写地址”命令,再发出写所述命令数据的“写数据”命令。

4.根据权利要求1所述简单高效的在线仿真方法,其特征在于:所述基本命令的格式如表

其中,命令字的长度为2位,不同的段值对应着不同的命令;传输长度的长度为2位,不同的段值对应着所述数据输出或数据输入的不同的传输字节数;等待位为持续n个时钟信号周期的第一电平加持续一个时钟信号周期的第二电平,其中n为0或自然数;所述命令字、传输长度、等待位、数据输入和数据输出均在数据线Y2D上按位串行传输;所述开始位以所述时钟线Y2CK在总线空闲时发出一个第一变化沿为标志,停止位以该时钟线Y2CK在当前基本命令的数据传输完后发出一个第二变化沿为标志。

5.一种简单高效的在线仿真接口电路,连接在一通信接口与带有一CPU的第二电路之间;其特征在于,包括:第一内部寄存器,该第一内部寄存器连接源自所述通信接口的下行数据总线以通过该通信接口获得写入数据,该写入数据可通过命令数据总线DBI输出;

接入所述命令数据总线DBI的仿真器,该仿真器还连接源自所述通信接口的读/写控制线和所述下行数据总线;该仿真器与所述CPU之间的连接包括:输出自该CPU的取指控制线LIR和程序计数器PC总线,输出自该仿真器的操作命令线;

所述仿真器还与一断点寄存器堆进行连接,输出断点寄存器写控制信号往断点寄存器堆,或接收来自该断点寄存器堆的断点数据;该断点寄存器堆还接入所述下行数据总线;

输出自CPU的CPU状态总线CPU_STAT连往所述通信接口以便传送给另一通信方。

6.根据权利要求5所述简单高效的在线仿真接口电路,其特征在于:

所述第二电路包括存储单元,该仿真器通过该仿真器输出的访问地址总线ADR和一组内存写控制输出线来与所述第二电路的存储单元进行连接;所述下行数据总线还接往所述第二电路的存储单元;

该在线仿真接口电路还包括一内存访问接口,输出自所述存储单元的存储数据总线连接到所述内存访问接口,以供该内存访问接口在来自所述仿真器的一组读控制信号线RDx的控制下选择相应存储单元的存储数据来通过所述通信接口传送给另一通信方;

所述存储单元包括FLASH、IRAM、XRAM或SFR;相应地,所述内存写控制输出线包括连接FLASH的擦除信号线ERA和第一写控制输出线WR_FLASH、连接IRAM的第二写控制输出线WR_IRAM、连接XRAM的第三写控制输出线WR_XRAM或连接SFR的第四写控制输出线WR_SFR。

7.根据权利要求5或6所述简单高效的在线仿真接口电路,其特征在于:

所述通信接口包括两根进行双向数据传输的信号线,即时钟线Y2CK和数据线Y2D;

该在线仿真接口电路还包括连接该时钟线Y2CK和数据线Y2D的通信接口电路Y2I,以实现一侧串行传输数据与另一侧并行处理数据之间的数据转换;该通信接口电路Y2I包括:分别连接所述数据线Y2D和时钟线Y2CK的移位寄存器,把来自数据线Y2D的下行串行数据转换成下行并行数据输出往所述下行数据总线Y2_WDATA,或锁存来自地址寄存器或寄存器堆的上行并行数据;

移位输出三态门,输入端接所述下行数据总线Y2_WDATA的最低位线,输出端接所述数据线Y2D,以把移位寄存器锁存的数据串行输往所述数据线Y2D;

连接所述时钟线Y2CK和所述下行数据总线Y2_WDATA的主状态机,完成对所述下行并行数据所携带协议命令的译码以在输出控制线上输出相应的控制信号,所述输出控制线包括:连接所述移位寄存器的读脉冲信号线Y2_RD、连接所述寄存器堆写脉冲信号线Y2_WR、连接地址寄存器的写控制信号线AR_WR和连接所述移位输出三态门的控制端的数据方向控制线DIR,连接所述移位寄存器的锁存控制线;

所述地址寄存器还分别连接所述时钟线Y2CK和下行数据总线Y2_WDATA,受控或者传送该地址寄存器的内容为所述上行并行数据;或者将所述下行并行数据写入该地址寄存器;

所述寄存器堆包括第一寄存器和一第二寄存器,该第二寄存器的数据输入端还或者连接所述CPU状态总线CPU_STAT或者连接所述内存访问接口的数据输出端;该寄存器堆还分别连接所述时钟线Y2CK、下行数据总线Y2_WDATA和来自所述地址寄存器的地址数据总线AddrR,受控对包括所述第一寄存器和一第二寄存器在内的各内部寄存器或者进行寻址读操作来提供所述上行并行数据,或者进行寻址写操作来将所述下行并行数据写入地址对应的内部寄存器。

8.根据权利要求7所述简单高效的在线仿真接口电路,其特征在于:还包括连接在所述通信接口电路Y2I和所述仿真器之间的同步器SYNC,接收来自时钟线Y2CK和来自第二电路的第二时钟线CPU_CLK的不同时钟信号,把来自所述读脉冲信号线Y2_RD和写脉冲信号线Y2_WR的信号分别同步到输出往所述仿真器的读/写控制线,该读/写控制线包括第二读脉冲信号线Y2_RD_S和第二写脉冲信号线Y2_WR_S;该同步器SYNC还通过一输出的应答线ACK连接所述主状态机。

9.根据权利要求7所述简单高效的在线仿真接口电路,其特征在于:所述程序计数器PC总线或所述断点寄存器堆的数据输出总线还分别连接到所述寄存器堆。

10.根据权利要求5所述简单高效的在线仿真接口电路,其特征在于:所述操作命令线包括软复位线SOFT_RST或暂停线STALL。

11.一种集成电路芯片,包括带有一CPU的第二电路,其特征在于:还包括如权利要求

5~10任一项所述简单高效的在线仿真接口电路。

说明书 :

简单高效的在线仿真方法及接口电路

[0001] 技术领域 本发明涉及电数字数据通信技术,特别涉及装置或设备之间仿真数据的传送及处理。
[0002] 背景技术 单片机诞生于1971年,经历了SCM(单片微型计算机)、MCU(微控制器)、SOC(片上系统)三大阶段。早期SCM单片机为8位机或4位机,其中最成功的是英特尔(INTEL)公司的8031系列。此后在8031上发展出了MCS51系列MCU系统,基于这一系统的单片机及其系统直到现在还被广泛使用。90年代后随着消费电子产品和半导体技术的迅猛发展,单片机技术得到了快速发展。目前单片机被广泛应用于消费电子、仪器仪表、工业控制、医用设备、智能化和过程控制等领域,随着应用环境的多样化,系统开发对单片机的在线仿真接口的要求越来越高,支持多功能、实时性强和仿真的非破坏性是其中的最迫切要求。
[0003] 目前市场上支持在线仿真的产品不多,一般只提供烧录功能。绝大部分是采用UART(通用异步接收发送)接口通过各自厂商提供的调试软件来把编译好的程序烧录到单片机。
[0004] 大部分国内厂商现有单片机在线仿真功能的不足之处在于:1、烧录采用的UART接口存在速度过慢及要另外设置波特率的缺点;2、不支持单片机在Keil集成环境下的调试,调试实时性差:它们通常要求用户使用Keil开发软件(一种C51编译器),生成hex文件后再通过厂商提供的ISP工具来完成下载编程;若软件没有实现预期的目标,则需要回到Keil集成环境修改程序再编译再生成hex再用ISP下载;用户调试往往要在Keil和ISP之间回来好几次才能把程序调试好,开发周期也因此延长。3、基本调试功能诸如暂停、运行、监视寄存器等不能原生支持,要用户另辟蹊径。如果想观察被调试单片机的内部寄存器或RAM的内容,则需要用户另外写一段程序把这些内容经UART传输给上位机,上位机软件接收后对这些内容进行显示。如果要执行“暂停”则需要特殊的技巧,例如但不限于先编写一个子函数cmd_poll;在主函数里周期性的调用该子函数cmd_poll,通过该子函数cmd_poll查询某个用作命令解释的变量,例如CMD,若查询到CMD等于预先定义的某个值,比如说“暂停”,程序则把感兴趣的SFR(特殊功能寄存器)或IRAM(内部RAM)通过UART上传到上位机,然后再次查询CMD,如果它等于“运行”,则跳出此子函数回到主函数里,否则循环查询。现有在线仿真接口对于设置断点、单步和运行到光标处等高级调试命令则毫无办法。这些缺点都将大大降低用户对单片机开发软件的体验度,并严重影响系统软件开发周期。
[0005] 发明内容 本发明要解决的技术问题是针对上述现有技术的不足之处,而提出一种在线仿真方法及接口电路,以全面支持Keil调试命令来给MCU提供必要的在线调试功能。
[0006] 为解决上述技术问题,本发明的基本构思为:在主机与从机之间建立起一种联系,使之在特定的情况下进入在线仿真或调试的模式,这样允许从机在可正常脱机工作之外,增加一种直接获得软件开发环境支持的可能来降低软件开发的复杂流程。若从通信接口协议方面就开始规范,系统的架构将可以得到进一步简化。
[0007] 作为实现本发明构思的技术方案是,提供一种一种简单高效的在线仿真方法,尤其是,包括:
[0008] 步骤A. 将软件开发工具通过一通信接口连接一单片机系统以进行主从机间的同步通信;所述单片机系统为以一单片机为中央控制单元的一电路、装置或设备;该单片机内部设置有一第一内部寄存器;
[0009] 步骤B. 所述软件开发工具通过该通信接口向所述第一内部寄存器执行写“命令数据”的步骤;当所述命令数据为有效命令数据则所述单片机启动主机对从机CPU当前在线命令的命令操作;
[0010] 反复执行步骤B直到完成主从机间的在线仿真或调试。
[0011] 上述方案中,所述有效命令数据为一组预定义的单字节二进制数,分别对应着的在线命令包括:软复位、暂停、设置断点、取消断点、全速运行、单步进入或访问SFR、访问IRAM、访问XRAM、访问FLASH。
[0012] 上述方案中,所述通信接口包括二线同步串行通信接口,该二线同步串行通信接口包括两根信号线一为时钟线Y2CK另一为数据线Y2D的Y2接口;所述主从机基于该两根信号线以4个基本命令的数据传输过程为元素进行组合而进行双向数据传输,该4个基本命令包括“读地址”、“写地址”、“读数据”和“写数据”命令。进一步地,定义一地址数据来对应第一内部寄存器的地址,则步骤B包括:主机通过所述Y2接口发出写入该地址数据的“写地址”命令,再发出写所述命令数据的“写数据”命令。具体来说,所述基本命令的格式如表
[0013]
[0014] 其中,命令字的长度为2位,不同的段值对应着不同的命令;传输长度的长度为2位,不同的段值对应着所述数据输出或数据输入的不同的传输字节数;等待位为持续n个时钟信号周期的第一电平加持续一个时钟信号周期的第二电平,其中n为0或自然数;所述命令字、传输长度、等待位、数据输入和数据输出均在数据线Y2D上按位串行传输;所述开始位以所述时钟线Y2CK在总线空闲时发出一个第一变化沿为标志,停止位以该时钟线Y2CK在当前基本命令的数据传输完后发出一个第二变化沿为标志。
[0015] 作为实现本发明构思的技术方案还是,提供一种简单高效的在线仿真接口电路,连接在一通信接口与带有一CPU的第二电路之间;尤其是,包括:第一内部寄存器,该第一内部寄存器连接源自所述通信接口的下行数据总线以通过该通信接口获得写入数据,该写入数据可通过命令数据总线DBI输出;接入所述命令数据总线DBI的仿真器,该仿真器还连接源自所述通信接口的读/写控制线和所述下行数据总线;该仿真器与所述CPU之间的连接还包括:输出自该CPU的取指控制线LIR和程序计数器PC总线,输出自该仿真器的操作命令线;所述仿真器还与一断点寄存器堆进行连接,输出断点寄存器写控制信号往断点寄存器堆,或接收来自该断点寄存器堆的断点数据;该断点寄存器堆还接入所述下行数据总线;输出自CPU的CPU状态总线CPU_STAT连往所述通信接口以便传送给另一通信方。
[0016] 上述方案中,当所述第二电路包括存储单元,该仿真器通过该仿真器输出的访问地址总线ADR和一组内存写控制输出线来与所述第二电路的存储单元进行连接;所述下行数据总线还接往所述第二电路的存储单元;该在线仿真接口电路还包括一内存访问接口,输出自所述存储单元的存储数据总线连接到所述内存访问接口,以供该内存访问接口在来自所述仿真器的一组读控制信号线RDx的控制下选择相应存储单元的存储数据来通过所述通信接口传送给另一通信方;所述存储单元包括FLASH、IRAM、XRAM或SFR;相应地,所述内存写控制输出线包括连接FLASH的擦除信号线ERA和第一写控制输出线WR_FLASH、连接IRAM的第二写控制输出线WR_IRAM、连接XRAM的第三写控制输出线WR_XRAM或连接SFR的第四写控制输出线WR_SFR。
[0017] 更进一步,所述通信接口包括两根进行双向数据传输的信号线,即时钟线Y2CK和数据线Y2D;该在线仿真接口电路还包括连接该时钟线Y2CK和数据线Y2D的通信接口电路Y2I,以实现一侧串行传输数据与另一侧并行处理数据之间的数据转换;该通信接口电路Y2I包括:分别连接所述数据线Y2D和时钟线Y2CK的移位寄存器,把来自数据线Y2D的下行串行数据转换成下行并行数据输出往所述下行数据总线Y2_WDATA,或锁存来自地址寄存器或寄存器堆的上行并行数据;移位输出三态门,输入端接所述下行数据总线Y2_WDATA的最低位线,输出端接所述数据线Y2D,以把移位寄存器锁存的数据串行输往所述数据线Y2D;连接所述时钟线Y2CK和所述下行数据总线Y2_WDATA的主状态机,完成对所述下行并行数据所携带协议命令的译码以在输出控制线上输出相应的控制信号,所述输出控制线包括:
连接所述移位寄存器的读脉冲信号线Y2_RD、连接所述寄存器堆写脉冲信号线Y2_WR、连接地址寄存器的写控制信号线AR_ WR和连接所述移位输出三态门的控制端的数据方向控制线DIR,连接所述移位寄存器的锁存控制线;所述地址寄存器还分别连接所述时钟线Y2CK和下行数据总线Y2_WDATA,受控或者传送该地址寄存器的内容为所述上行并行数据;或者将所述下行并行数据写入该地址寄存器;所述寄存器堆包括所述第一寄存器和一第二寄存器,该第二寄存器的数据输入端还或者连接所述CPU状态总线CPU_STAT或者连接所述内存访问接口的数据输出端;该寄存器堆还分别连接所述时钟线Y2CK、下行数据总线Y2_WDATA和来自所述地址寄存器的地址数据总线AddrR,受控对包括所述第一寄存器和一第二寄存器在内的各内部寄存器或者进行寻址读操作来提供所述上行并行数据,或者进行寻址写操作来将所述下行并行数据写入地址对应的内部寄存器。
[0018] 上述方案中,还包括连接在所述通信接口电路Y2I和所述仿真器之间的同步器SYNC,接收来自时钟线Y2CK和来自第二电路的第二时钟线CPU_CLK的不同时钟信号,把来自所述读脉冲信号线Y2_RD和写脉冲信号线Y2_WR的信号分别同步到输出往所述仿真器的读/写控制线,该读/写控制线包括第二读脉冲信号线Y2_RD_S和第二写脉冲信号线Y2_WR_S;该同步器SYNC还通过一输出的应答线ACK连接所述主状态机。
[0019] 上述方案中,所述程序计数器PC总线或所述断点寄存器堆的数据输出总线还分别连接到所述寄存器堆。所述操作命令线包括软复位线SOFT_RST 或暂停线STALL。
[0020] 作为实现本发明构思的技术方案还是,提供一种集成电路芯片,包括带有一CPU的第二电路,尤其是,还包括上述各方案中所述简单高效的在线仿真接口电路。
[0021] 这些措施便于支持实时、全面的在线仿真功能,给应用开发者使用Keil调试命令来调试MCU带来极大的方便;且对芯片来说,低成本地实现了功能的增加。

附图说明

[0022] 图1为本发明在线仿真接口电路的结构框图;
[0023] 图2为图1中仿真器的功能状态转换图;
[0024] 图3为图1中通信接口电路的结构框图;
[0025] 图4为图1中仿真器实现图2功能的逻辑结构示意图;
[0026] 图5为图1中同步器的电路原理图。

具体实施方式

[0027] 下面,结合附图所示之最佳实施例进一步阐述本发明。
[0028] 本发明的在线仿真方法适用于单片机系统,这里称的单片机系统是指以一带有CPU(中央处理器)的单片机(MCU)为中央控制单元的一电路、装置或设备,本发明方法包括:
[0029] 步骤A. 将软件开发工具通过一通信接口连接所述单片机系统以进行主从机间的同步通信;约定在该单片机内部设置一第一内部寄存器;
[0030] 步骤B. 所述软件开发工具通过该通信接口向所述第一内部寄存器执行写“命令数据”的步骤;当所述命令数据为有效命令数据则所述单片机启动主机对从机CPU当前在线命令的命令操作;
[0031] 反复执行步骤B直到完成主从机间的在线仿真或调试。
[0032] 所述有效命令数据为一组预定义的单字节二进制数,分别对应着的在线命令包括:软复位、暂停、设置断点、取消断点、全速运行或单步进入。根据在线仿真或调试功能的需要,所述在线命令还可以包括:访问SFR、访问IRAM、访问XRAM或访问FLASH来支持对单片机片内IRAM、SFR、XRAM(外部RAM)或FLASH(程序存储器)的读写访问。
[0033] 鉴于现有单片机多采用UART接口来进行数据通信,在线仿真功能在该接口下的实现受到诸多限制,而使用现有二线同步串行通信接口(包括I2C接口)更是效率低下或不可能,本公司为提高通信效率和解决通信中的同步问题在另一中国专利申请中提出一种二线同步串行通信协议及接口(下称Y2接口,实现该Y2接口的接口电路称Y2I),在本发明方法中所述通信接口包括该Y2接口将更有利于主机对从机的在线仿真或调试。
[0034] 所述Y2接口包括两根信号线一为时钟线Y2CK另一为数据线Y2D;主从机基于该两根信号线以4个基本命令的数据传输过程为元素进行组合而进行双向数据传输,该4个基本命令包括“读地址”、“写地址”、“读数据”和“写数据”命令。这样,定义一地址数据来对应所述第一内部寄存器的地址,则本发明方法中所述执行写“命令数据”的步骤包括:主机通过所述Y2接口发出写入该地址数据的“写地址”命令,再发出写所述命令数据的“写数据”命令。
[0035] 所述基本命令的格式可以规范如下表以提高数据传输效率:
[0036]
[0037] 其中,命令字的长度为2位,不同的段值对应着不同的命令;传输长度的长度为2位,不同的段值对应着所述数据输出或数据输入的不同的传输字节数;等待位是为解决为读写数据过程中两个时钟域可能存在不同步问题而预留的,可以设定等待位为持续n个时钟信号周期的第一电平(可以使低电平或高电平,例如以低电平为例)加持续一个时钟信号周期的第二电平(因第一电平为低电平,则第二电平选择高电平),其中n为0或自然数。所述命令字、传输长度、等待位、数据输入和数据输出均在数据线Y2D上按位串行传输;串行数据采用例如但不限于从最低有效位开始传输的顺序。所述开始位以所述时钟线Y2CK在总线空闲时发出一个第一变化沿(可以是下降沿或上升沿,例如以下降沿为例)为标志,停止位以该时钟线Y2CK在当前基本命令的数据传输完后发出一个第二变化沿(因第一变化沿为下降沿,则第二变化沿选择上升沿)为标志。
[0038] 关于Y2接口除了上述内容,可以制定一些更详细的数据传输协议来细化,例如(但不限于):定义空闲状态下使时钟线Y2CK停留在高电平,对数据线的状态不进行定义(可高电平或低电平)。对于通信的主机来说,是在时钟线Y2CK的下降沿把数据输出(“写地址”AW/“写数据”DW命令)或者接收(“读地址”AR/“读数据”DR命令);相反,对于通信的从机来说,它在Y2CK的上升沿把数据接收(AW/DW命令)或者输出(AR/DR命令)。所述命令字的段值及对应的命令例如但不限于如下表:Y2命令命令字段值
读地址 2’b10
写地址 2’b11
读数据 2’b00
写数据 2’b01
[0039] 传输长度的段值例如但不限于如下表:传输长度 传输字节数
2’b00 8位数据,1字节
2’b01 16位数据,2字节(半字)
2’b10 24位数据,3字节
2’b11 32位数据,4字节(字)
[0040] 图1示意了为实现本发明方法而提出的一种在线仿真接口电路。该电路连接在一通信接口与带有一CPU的第二电路之间。为了使主机能通过所述通信接口来在线调试所述CPU,本发明在线仿真接口电路包括第一内部寄存器,该第一内部寄存器连接源自所述通信接口的下行数据总线以通过该通信接口获得写入数据,该写入数据可通过命令数据总线DBI输出;仿真器接入所述命令数据总线DBI,还连接源自所述通信接口的读/写控制线和所述下行数据总线,并与所述CPU连接如下:通过输出自该CPU的取指控制线LIR和程序计数器PC总线来相连,通过输出自该仿真器的操作命令线来相连。所述操作命令线例如但不限于软复位线SOFT_RST 或暂停线STALL。其中,程序计数器PC总线上的数据来自于CPU的程序计数器PC,记录程序存储空间中的当前运行指令的地址,通过该程序计数器PC可以了解当前程序运行到哪一条指令。为了在所述读写控制线的作用下根据有效的所述写入数据来完成对该CPU的各种在线仿真或调试,所述仿真器还与一断点寄存器堆进行连接,输出断点寄存器写控制信号往断点寄存器堆,或接收来自该断点寄存器堆的断点数据。该断点寄存器堆还接入所述下行数据总线;输出自CPU的CPU状态总线CPU_STAT连往所述通信接口以便传送给另一通信方,通过该CPU状态总线可以输出CPU内部状态寄存器中反映CPU所处状态(包括但不限于:睡眠或活动、暂停或全速运行、复位或自引导)的数据。所述断点寄存器堆包括x个断点寄存器,x为自然数,根据系统需求而定。尤其是,读出自各断点寄存器的断点数据的位数可以比程序读数器PC总线的位数多一位,该多出来的一位用作为使能表征位,为1时表示其它位数所示意的地址为有效断点。为此,断点寄存器写控制信号的输出线可以包括一组断点写控制线BPx_WR、一组断点置位控制线BPx_SET和一组断点复位控制线BPx_DIS。
[0041] 下面结合本发明接口电路和图2对主机的具体在线命令之实施列举一二, 这些命令为一组预定义或约定的单字节二进制数RST_CMD、HALT_CMD、BPS_CMD、RUN_CMD等等。上电复位或外部复位后,本发明接口电路的仿真器处于等待状态WAIT,在该状态下,仿真器接收来自命令数据总线DBI的命令数据并判断为约定的有效命令后进行相应的状态转换及相关的控制输出。所述有效命令及其所对应的命令数据例如但不限于下表:
在线命令 命令数据
RST_CMD 0x5F
HALT_CMD 0x01
BPS_CMD 0xFF
SET0 0xF1
SET1 0xF2
SET2 0xF4
DIS0 0xB1
DIS1 0xB2
DIS2 0xB4
RUN_CMD 0x02
SSTEP_CMD 0x04
SFR_CMD 0x11
SFR_RD 0x12
SFR_WR 0x14
IRAM_CMD 0x21
IRAM_RD 0x22
IRAM_WR 0x24
XRAM_CMD 0x41
XRAM_RD 0x42
XRAM_WR 0x44
FLA_CMD 0x81
FLA_RD 0x82
FLA_WR 0x84
FLA_ERA 0x88
[0042] 其中,SET0~2和DIS0~2分别用来表示对三个断点的置位与复位,假设有三个断点的话。
[0043] 1)软复位(RST_CMD):要求对CPU进行复位,使之暂停在程序地址0x0000处;根据需要还可以用来要求CPU以外的其它单元,例如SFR,进行复位。以CPU为例该在线命令的执行过程为,先往所述第一内部寄存器写数据RST_CMD,仿真器随之在软复位线SOFT_RST上发出有效脉冲且把暂停线STALL上的信号置为有效后如图2进入空闲状态IDLE,则CPU无论处于何种状态都将被复位,同时取指地址暂停在0x0000处。
[0044] 2)暂停(HALT_CMD):要求正在运行的CPU暂时停下并处于下一指令的取指阶段。先往所述第一内部寄存器写数据HALT_CMD;CPU完成当前正在执行的指令后进行下一指令的取指时,因所述取指控制线LIR上信号有效触发所述仿真器把STALL暂停线STALL上的信号置为有效,则CPU停在该取指阶段,仿真器进入空闲状态IDLE。
[0045] 3)设置断点:把目标地址写入一个断点寄存器。先往所述第一内部寄存器写数据BPS_CMD,仿真器如图2随之进入读写访问断点寄存器状态ACC_BPS;接着在下行数据总线Y2_WDATA上输出目标地址,仿真器进入第一取址子状态ADDR1,同时在断点写控制线BPx_WR上发出断点寄存器写控制信号,以把位于下行数据总线Y2_WDATA上的地址数据锁存到BPx断点寄存器;继续往该第一内部寄存器写“使能断点”命令SETx(,表示使能第x个断点),仿真器进入断点设定子状态SET_DIS1,此时仿真器在断点置位控制线BPx_SET上发出断点寄存器写控制信号,来使相关断点寄存器BPx的使能表征位为“1”;完后仿真器结束当前“设置断点”命令,回到空闲状态IDLE。
[0046] 4)取消断点:把一个断点寄存器清空。先往所述第一内部寄存器写数据BPS_CMD,接着在下行数据总线Y2_WDATA上输出目标地址,仿真器进入第一取址子状态,ADDR1,同时在断点写控制线BPx_WR上发出断点寄存器写控制脉冲,以把位于下行数据总线Y2_WDATA上的地址数据锁存到BPx断点寄存器;继续往该第一内部寄存器写“消除断点”命令(DISx,表示消除第x个断点),仿真器进入断点设定子状态SET_DIS1,此时仿真器在断点复位控制线BPx_DIS上发出断点寄存器写控制信号,来使相关断点寄存器BPx的使能表征位为“0”,完后仿真器结束当前“取消断点”命令,回到空闲状态IDLE。
[0047] 5)全速运行(RUN_CMD):要求使处于停止状态的CPU重新运行起来,直到接到暂停命令或运行到指定断点。先往所述第一内部寄存器写数据RUN_CMD,仿真器如图2随之进入运行状态RUNNING,撤消暂停线STALL上的有效信号,CPU因而往下继续执行指令直到程序运行到断点寄存器所设定的地址,或者上位机发出暂停命令为止,此时仿真器重新在暂停线STALL上发出有效信号。
[0048] 6)单步进入(SSTEP_CMD):要求处于停止状态的CPU(程序地址加1并取指操作)执行一条汇编指令后再次暂停;先往所述第一内部寄存器写数据SSTEP_CMD,仿真器如图2随之进入单步执行状态SSTEP,撤消暂停线STALL上的有效信号;CPU执行完一条指令后取指因所述取指控制线LIR上信号有效触发仿真器重新在暂停线STALL上发出有效信号,仿真器回到空闲状态IDLE。
[0049] 以上各在线命令,除“软复位”命令外,主机欲发出其它在线命令最好事先通过CPU状态总线CPU_STAT来查询确保CPU不是处于低功耗模式。此外,以上述原生的在线命令为基础,主机利用例如单步进入、设置断点和全速运行命令的组合,可以产生一些扩充的高级命令,诸如:
[0050] 7)单步跳过,如Keil软件开发环境的step-over命令:当前指令是调用子函数的相关调用指令时执行此命令,CPU不会在子函数暂停,而是停在调用子函数指令的下一指令;否则CPU执行“单步进入”。欲实现“单步跳过”,先执行“设置断点”,再往所述第一内部寄存器写数据RUN_CMD来执行“全速运行”。
[0051] 8)单步跳出,如Keil软件开发环境的step-out命令:此命令只在CPU在执行子函数的时候才有效,假设CPU停在子函数里面,执行此命令会使CPU执行完子函数后,停在调用该子函数的下一条指令。程序每次调用子函数时Keil都会检查当前的可用断点(所谓可用是指没有被设置过的断点,例如断点寄存器堆有5个断点寄存器,如果已经使用了3个,那么可用断点是2),如果有可用断点即把调用该子函数的下一指令地址设置到一个可用断点,程序跳出子函数时又自动将其清除,这些都可通过“设置断点”、“取消断点”来完成。若当前暂停在子函数里,用户按了一下step-out按钮,则Keil会执行“全速运行”命令,即往所述第一内部寄存器写数据RUN_CMD,CPU将全速运行直到该断点寄存器指定的地址。
[0052] 9)运行到光标处,如Keil软件开发环境的run-to-cursor-line命令:执行完此命令,CPU停在光标所在行的指令。Keil先执行“设置断点”命令,把光标处所在地址写入某个可用断点寄存器BPx;再执行“全速运行”命令。
[0053] 另为适应单片机系统的不同需求及方便所述在线仿真或调试过程中的数据交换,本发明接口电路考虑所述第二电路存在存储单元,例如但不限于特殊功能寄存器SFR、内部数据RAM(IRAM)、外部数据RAM(XRAM)或程序存储器FLASH,则如图1所示,本发明仿真器还通过该仿真器输出的访问地址总线ADR、一组内存写控制输出线来与所述存储单元进行连接;所述下行数据总线还接往所述存储单元。根据内存单元的特性不同,所述内存写控制输出线包括连接FLASH的擦除信号线ERA和第一写控制输出线WR_FLASH、连接IRAM的第二写控制输出线WR_IRAM、连接XRAM的第三写控制输出线WR_XRAM或连接SFR的第四写控制输出线WR_SFR。为此,本发明接口电路还设置一内存访问接口,输出自该存储单元的存储数据总线连接到所述内存访问接口,以供该内存访问接口在来自所述仿真器的一组读控制信号线RDx的控制下选择数据通过所述通信接口传送给另一通信方。所述读控制信号线RDx包括用来选择FLASH的第一读控制输出线RD_FLASH、用来选择IRAM的第二读控制输出线RD_IRAM、用来选择XRAM的第三读控制输出线RD_XRAM或用来选择SFR的第四读控制输出线RD_SFR。可见,该内存访问接口实为多路数据选择器。为此,所述读控制信号线RDx还可以采用其它方式来设计,例如但不限于用两根控制线,控制线传递数据“00”表示选择FLASH输出、传递数据“01”表示选择IRAM输出、传递数据“10”表示选择XRAM输出、传递数据“11”表示选择SFR输出。
[0054] 利用本发明接口电路,可以扩充在线命令种类,从而能支持对单片机片内存储单元的读写访问,将实现和业界最流行的C51编译器无缝结合,使得用户用本发明在线仿真接口电路来调试CPU软件时感觉就像使用Keil附带的软件仿真器一样,十分方便。基于此,可以对所述原生的在线命令进行扩充,以实现仿真过程中对各内存单元的访问,这些扩充的原生命令包括:
[0055] 10)访问SFR(SFR_CMD):先往所述第一内部寄存器写数据SFR_CMD,仿真器进入读写访问SFR状态ACC_SFR;接着在下行数据总线Y2_WDATA上输出目标起始地址,仿真器进入第二取址子状态ADDR2,把所述目标起始地址锁存到仿真器内部的仿真地址寄存器;继续下行数据总线Y2_WDATA上写入欲访问的长度,进入第二数据长度子状态LEN2,把所述长度数据锁存到仿真器内部的长度寄存器;最后通过向所述第一寄存器写SFR_RD或者SFR_WR来决定读还是写访问,如果是读访问,仿真器置起所述第四读控制输出线RD_SFR上的信号;如果是写访问,仿真器则置起所述第四写控制输出线WR_SFR上的信号。此后仿真器将在读写脉冲的控制下控制使访问地址总线ADR上的地址进行自增,直到通过内存访问接口把LEN长度的SFR数据送到通信接口电路例如Y2I(读访问时)或者接收LEN长度数据写到SFR(写访问时),完后仿真器结束当前“访问SFR”命令,回到IDLE状态。
[0056] 11)访问IRAM(IRAM_CMD):先往所述第一内部寄存器写数据IRAM_CMD,仿真器进入读写访问IRAM状态ACC_IRAM;接着在下行数据总线Y2_WDATA上输出目标起始地址,仿真器进入第三取址子状态ADDR3,把该目标起始地址数据锁存到仿真器内部的仿真地址寄存器;继续往下行数据总线Y2_WDATA写入欲访问的长度,进入第三数据长度子状态LEN3,把下行数据总线Y2_WDATA上的数据锁存到仿真器内部的长度寄存器;最后根据写入命令IRAM_RD或者IRAM_WR来决定读还是写访问,如果是读访问,仿真器置起第二读控制输出线RD_IRAM上的信号;如果是写访问,仿真器则置起第二写控制输出线WR_IRAM上的信号。此后仿真器将控制使访问地址总线ADR上的地址进行自增,直到通过内存访问接口把LEN长度的IRAM数据送到Y2I(读访问时)或者接收LEN长度数据写到IRAM(写访问时),完后仿真器结束当前“访问IRAM”命令,回到IDLE状态。
[0057] 12)访问XRAM(XRAM_CMD):先往所述第一内部寄存器写命令数据XRAM_CMD,仿真器进入读写访问XRAM状态ACC_XRAM;接着在下行数据总线Y2_WDATA上输出目标起始地址,仿真器进入第四取址子状态ADDR4,把Y2_WDATA数据锁存到所述仿真地址寄存器;继续往下行数据总线Y2_WDATA写入欲访问的长度,进入第四数据长度子状态LEN4,把下行数据总线Y2_WDATA上的数据锁存到所述长度寄存器;最后根据写入的命令XRAM_RD或者XRAM_WR来决定读还是写访问,如果是读访问,仿真器置起所述第三读控制输出线RD_XRAM上的信号;如果是写访问,仿真器则置起第三写控制输出线WR_XRAM上的信号。此后仿真器将控制访问地址总线ADR的输出,直到内存访问接口把LEN长度的XRAM数据送到Y2I(读访问时)或者接收LEN长度数据写到XRAM(写访问时),完后仿真器结束当前“访问XRAM”命令,回到IDLE状态。
[0058] 13)访问FLASH(FLA_CMD):先往所述第一内部寄存器写命令数据FLA_CMD,仿真器进入读写访问FLASH状态ACC_FLASH;接着在下行数据总线Y2_WDATA上输出目标起始地址,仿真器进入第五取址子状态ADDR5子状态,把下行数据总线Y2_WDATA上的数据锁存到所述仿真地址寄存器;继续往下行数据总线Y2_WDATA上写入欲访问的长度,进入第五数据长度子状态LEN5,把下行数据总线Y2_WDATA上的数据锁存到所述长度寄存器;最后根据写入的命令FLA_ERA、FLA_RD、FLA_WR来决定擦除、读还是写访问,如果是读访问,仿真器置起第一读控制输出线RD_FLASH上的信号;如果是写访问,仿真器则置起第一写控制输出线WR_FLASH上的信号;如果是擦除访问,则置起擦除信号线ERA上的信号。此后仿真器将控制访问地址总线ADR的输出,直到擦除目标扇区(擦除访问时),或者通过内存访问接口把LEN长度的FLASH数据送到Y2I(读访问时)或者接收LEN长度数据写到FLASH(写访问时),完后仿真器结束当前“访问FLASH”命令,回到IDLE状态。
[0059] 本发明中,所述通信接口包括两根进行双向数据传输的信号线,即时钟线Y2CK和数据线Y2D。本发明在线仿真接口电路为提高在线仿真效率还包括连接该时钟线Y2CK和数据线Y2D的通信接口电路Y2I(为本公司提出的一种新型二线同步通信接口Y2接口的具体实现电路),以实现一侧串行传输数据与另一侧并行处理数据之间的数据转换。图3示意了该通信接口电路Y2I的结构:包括分别连接所述数据线Y2D和时钟线Y2CK的移位寄存器,或把来自数据线Y2D的下行串行数据转换成下行并行数据输出往所述下行数据总线Y2_WDATA,或锁存来自地址寄存器或寄存器堆的上行并行数据;还包括移位输出三态门,输入端接所述下行数据总线Y2_WDATA的一条线(例如但不限于最低位线,依数据的传输顺序而定),输出端接所述数据线Y2D,以把移位寄存器锁存的数据串行输往所述数据线Y2D。连接所述时钟线Y2CK和所述下行数据总线Y2_WDATA的主状态机,完成对所述下行并行数据所携带协议命令的译码以在输出控制线上输出相应的控制信号,所述输出控制线包括:连接所述移位寄存器的读脉冲信号线Y2_RD、连接所述寄存器堆写脉冲信号线Y2_WR、连接地址寄存器的写控制信号线AR_ WR和连接所述移位输出三态门的控制端的数据方向控制线DIR,连接所述移位寄存器的锁存控制线SR_CON。所述地址寄存器还分别连接所述时钟线Y2CK和下行数据总线Y2_WDATA,受控或者传送该地址寄存器的内容为所述上行并行数据;或者将所述下行并行数据写入该地址寄存器。所述寄存器堆包括本发明接口电路中的所述第一寄存器(表示为DBI_r)和一第二或第三寄存器;该第二寄存器的数据输入端还或者连接所述CPU状态总线CPU_STAT,或者(所述第二电路存在内存单元时)连接所述内存访问接口的数据输出端;或者用所述第二寄存器连接所述CPU状态总线CPU_STAT,同时用所述第三寄存器(MAI)连接所述内存访问接口。该寄存器堆还分别连接所述时钟线Y2CK、下行数据总线Y2_WDATA和来自所述地址寄存器的地址数据总线AddrR,受控对包括所述第一寄存器和一第二寄存器在内的各内部寄存器或者进行寻址读操作来提供所述上行并行数据,或者进行寻址写操作来将所述下行并行数据写入地址对应的内部寄存器。前述的Y2接口双向数据传输基础的4个基本命令,“读地址”、“写地址”、“读数据”和“写数据”命令,就是通过该Y2I电路来实现,具体过程如下:
[0060] “读地址(AR)”命令:是要求读出通信接口电路Y2I的地址寄存器内容,通过它可了解当前地址数据总线AddrR所指定的寄存器。具体过程可以是,主机先发出一个下降沿(即开始位),紧接着发送命令字段2’b10(由于LSB先发送,故数据线Y2D上看到的是2’b01);然后主机释放对数据线Y2D的驱动,从机将在接着的8个Y2CK上升沿输出地址流,完后再来一个上升沿结束该命令帧,所述主状态机返回到空闲状态待命。由此可知,一次AR花费
11.5个Y2CK周期。
[0061] “写地址(AW)”命令:是往所述地址寄存器中写入数据,通过它把目标寄存器地址写到地址寄存器中以实现对内部寄存器的直接寻址访问。具体过程可以是,主机先发出一个下降沿(即开始位),紧接着发送命令字段2’b11;在往后的8个Y2CK下降沿把地址从低位到高位输入,完后再来一个上升沿结束该命令帧,主状态机返回到空闲状态待命。同样地,“写地址”花费11.5个Y2CK周期。
[0062] “读数据(DR)”命令:是把由所述地址寄存器指定的寄存器中的内容读出来,根据定义,寄存器的大小可以是8位、16位、24位或者32位。具体过程可以是,主机发出开始位,紧接着发送命令字段2’b00;再发数据长度2’bxx(以读1个字节的数据为例,故数据长度段为2’b00),此后主机要释放对数据线Y2D的驱动;直到响应位结束前,主机应一直发送Y2CK时钟;待同步握手完毕,数据线Y2D出现高电平;在接下来的Y2CK时钟里,从机将输出长度为(2’bxx+1)字节的串行数据;在主机发送停止位后,主状态机返回到空闲状态待命。
[0063] “写数据(DW)”是往由所述地址寄存器指定的寄存器中写入数据,根据定义,寄存器的大小可以是8位、16位、24位或者32位。主机发出开始位,紧接着发送命令字段2’b01(由于LSB先发送,故Y2D看到的是2’b10);再发数据长度2’bxx(以读1个字节的数据为例,故数据长度段为2’b00);在接下来的Y2CK时钟里,主机将输入长度为(2’bxx+1)字节的串行数据,此后主机要释放对Y2D的驱动;直到响应位结束前,主机应一直发送Y2CK时钟;主机检测到Y2D出现高电平后应发最后一个上升沿,此帧命令结束,主状态机返回到空闲状态待命。
[0064] 至此,所述4个基本命令的具体实现步骤已介绍完毕,它们是本发明Y2I的通信基础所在。
[0065] 如图1,将所述程序计数器PC总线或所述断点寄存器堆的数据输出总线还分别连接到所述寄存器堆,则可以利用通信接口电路Y2I来直接对程序计数器PC或断点寄存器进行读访问,细述如下:程序计数器PC是CPU用来指示程序中当前指令的地址用的。本发明接口电路中,可以将程序计数器PC映射到通信接口电路Y2I的直接寻址空间(例如所述内部寄存器一样可以直接被访问到的空间),这样通过所述Y2接口的“写地址”和“读数据”命令就能直接访问程序计数器PC,而无需通过所述仿真器来进行间接访问。例如,假设程序计数器PC在内部寄存器中的映射地址是0x10,则上位机通过“写地址”命令写入地址数据0x10,再通过“读数据”命令即读出程序计数器PC的内容。与之类似,断点寄存器堆的第1~n个断点也可以被映射到通信接口电路Y2I的内部寄存器中,以方便直接被访问。
[0066] 进一步地,将“软复位”在线命令、“访问程序存储器FLASH”中的FLASH擦除操作、写访问程序计数器PC等进行组合来编制函数,就可以在keil环境中通过该函数来在线完成将程序下载到CPU的下载命令,大大简化了软件开发调试过程。
[0067] 如图1所示,鉴于主从机之间极可能存在时钟不一致的情况,本发明在线仿真接口电路还包括连接在所述通信接口电路Y2I和所述仿真器之间的同步器SYNC,接收来自时钟线Y2CK和来自第二电路的第二时钟线CPU_CLK的不同时钟信号,把来自所述主状态机的读脉冲信号线Y2_RD和写脉冲信号线Y2_WR的信号分别同步到输出往所述仿真器的读/写控制线,该读/写控制线包括第二读脉冲信号线Y2_RD_S和第二写脉冲信号线Y2_WR_S。该同步器SYNC还通过一输出的应答线ACK连接所述主状态机。这样,主从机或上下位机之间的时钟域不同的问题得以协调,通信双方各自的时钟频率不再受到限制。同步器SYNC可以设计为一个toggle-pulse同步器,先在自身域触发切换(toggle)一次,然后在对方域采样三拍,把其中两拍的寄存器输出异或后重新产生一个脉冲(pulse),以此把来自主状态机的读/写脉冲信号转换成CPU时钟域的读/写脉冲信号,及由该CPU时钟域的读/写脉冲信号来转换成主状态机时钟域的应答信号往所述应答线ACK。图5示意了该同步器一个实施例的电路原理图,包括四个级联的D触发器U002~U005,其中第一级D触发器U002的时钟输入端接时钟线Y2CK,第二~第四级D触发器U003~U005连接第二时钟线CPU_CLK;该级联D触发器的输入端接一个选择器U001的输出端,该选择器U001的两个输入端一端接所述第一级D触发器U002的正输出端,另一端接该第一级D触发器U002的负输出端;该选择器U001的控制端接所述读脉冲信号线Y2_RD或写脉冲信号线Y2_WR。来自该级联D触发器的输出端与来自第三级D触发器U004的输出端(也就是第四级D触发器U005的输入端)的信号经一个异或门U006运算,提供对应的输出线,即第二读脉冲信号线Y2_RD_S或第二写脉冲信号线Y2_WR_S。应答线ACK的产生与之类似:采用另四个级联的D触发器U008~U011,其中第一级D触发器U008的时钟输入端接第二时钟线CPU_CLK,第二~第四级D触发器U009~U011连接时钟线Y2CK;该级联D触发器的输入端同样接另一个选择器U007的输出端,该另一个选择器U007的两个输入端一端接第一级D触发器U008的正输出端,另一端接该第一级D触发器U008的负输出端;该选择器U007的控制端接所述第二读脉冲信号线Y2_RD_S或第二写脉冲信号线Y2_WR_S;来自该级联D触发器的输出端与来自第三级D触发器U010的输出端(也就是第四级D触发器U011的输入端)的信号经另一个异或门U012运算,提供应答线ACK。
[0068] 综上所述,仿真器是本发明在线仿真接口电路的核心,它可以是一个基于静态CMOS的数字电路,基于Mealy型的有限状态机进行设计,根据现态、由通信接口接收到的数据、写脉冲及CPU送来的相关信号进行状态的翻转,并根据当前所在的状态输出各种控制信号。
[0069] 图4示意了仿真器的实现框图,包括组成状态机的次态生成逻辑和现态寄存器、状态比较器、递减计数器及判断逻辑、仿真地址寄存器及其附属逻辑、长度寄存器。利用一比较器对CPU当前的程序计数器PC和已经使能的断点寄存器BP的内容是否匹配进行比较,比较结果与来自CPU的取指控制线LIR上的信号一起经一个与门运算后送往一个或门的输入端,这样可以控制在每一个指令周期,仿真器判断CPU当前的程序计数器PC和已经使能的断点寄存器BPx的内容相匹配后则在所述暂停线STALL上产生有效信号。所述次态生成逻辑根据来自命令数据总线DBI、下行数据总线Y2_WDATA及来自CPU的取址控制线LIR、来自同步器的第二写脉冲信号线Y2_WR_S、来自递减计数器及判断逻辑的一组存储访问结束线x_END(前缀x包括BPS、SFR、IRAM、XRAM或FLASH)等各种输入线上的信号,结合来自现态寄存器的现态输出总线PRES上的现态数据,对当前状态进行翻转,通过继态输出总线NEXT来输出下一次状态供所述现态寄存器在第二时钟线CPU_CLK的时钟信号作用下锁存。该现态寄存器的现态输出总线PRES还连接所述状态比较器,此外,该现态寄存器还输出一控制信号往所述递减计数器及判断逻辑对计数初值进行控制。状态比较器则根据来自现态输出总线PRES表示当前状态信息的现态数据来确定其各输出线上的信号,这些输出线包括送往内存访问接口的读控制信号线RDx送往存储单元的内存写控制输出线WRx(包括WR_SFR、WR_IRAM、WR_XRAM、WR_FLASH)、连接FLASH的擦除信号线ERA、送往断点寄存器的断点寄存器写控制信号的输出线、送往所述长度寄存器的写锁存线W_LEN和送往所述仿真地址寄存器的第二写锁存线W_AR。所述递减计数器及判断逻辑的主要组成是自减1同步计数器和数值比较器;在相关第n数据长度子状态LENn(n=2、3、4或5)时仿真器在所述写锁存线W_LEN上发出有效信号来完成长度寄存器的初始化,初始化值是下行数据总线Y2_WDATA上的长度数据;所述递减计数器及判断逻辑接收来自该长度寄存器的输出,然后在CPU时钟域的读/写脉冲(包括第二时钟线CPU_CLK、第二读脉冲信号线Y2_RD_S和第二写脉冲信号线Y2_WR_S上的信号)的作用下递减计数,当计数器值变为0时在所述存储访问结束线x_END(前缀x代表BPS、SFR、IRAM、XRAM或FLASH)上输出相应脉冲,代表结束当前在线命令(包括“设置断点”、“取消断点”、“访问IRAM”、“访问SFR”、“访问XRAM”或“访问FLASH”)。所述仿真地址寄存器及其附属逻辑是一个自增1同步计数器,它在相关的第n取址子状态ADDRn下仿真器在所述第二写锁存线W_AR上发出有效信号来完成初始化,初始化值是下行数据总线Y2_WDATA上的代表目标起始地址的数据;然后在所述CPU时钟域的读/写脉冲的作用下自动增1,对其输出的访问地址总线ADR进行更新,直至当前在线命令结束。如图4所示,软复位线SOFT_RST则为一个D触发器的输出线,该D触发器接收来自次态生成逻辑的一输出及来自第二时钟线CPU_CLK的时钟信号。
[0070] 所述通信接口电路Y2I的主状态机的实现方式与该仿真器类似,根据前述4个基本命令“读地址”、“写地址”、“读数据”和“写数据”的操作步骤,可见该主状态机接收各命令前的初始状态为空闲状态,检测到“开始位”而进入命令接收状态,进而根据不同的命令字转向不同的状态,并输出与该状态相关的各种控制信号;在“读数据”“写数据”命令过程中还分别有不同的后续状态;每一命令均在“停止位”出现后返回空闲状态;每一命令过程中的状态演化与时钟计数相关。因此可以采用经典的两段式或三段式有限状态机利用次态生成逻辑、现态寄存器、一个计数器、若干数值比较器和若干与门来设计该主状态机,其中,计数器根据来自现态寄存器的现态决定计数初值,对来自时钟线Y2CK的时钟进行计数并输出计数值往所述次态生成逻辑;该次态生成逻辑根据所述计数值、来自移位寄存器的命令字段(SHIFT[7:6])、来自应答线ACK的响应信号及来自现态寄存器的现态来共同决定并输出下一状态往所述现态寄存器;现态寄存器在来自时钟线Y2CK的时钟作用下对该下一状态进行锁存及输出;各数值比较器则进行条件比较,各比较结果通过逻辑运算来组合确定该主状态机输出线上的输出,例如但不限于所述读脉冲信号线Y2_RD、写脉冲信号线Y2_WR、所述数据方向控制线DIR、写控制信号线AR_WR和锁存控制线SR_CON上的信号输出。
[0071] 经FPGA实验验证,本发明在线仿真通信接口电路成功通过测试。因此将其集成在任一带有一CPU的第二电路的集成电路芯片,将便于对该集成电路芯片进行实时、全面的在线仿真和调试,且重要的是可与现行C51编译器Keil无缝结合,在同一连接下进行下载和调试,从而为该芯片的应用开发者带来了极大的方便。
[0072] 综上所述,本发明的结构特征及各实施例皆已详细揭示,而可充分显示出本发明在目的及功效上均具有实施的进步性。
[0073] 以上说明仅为本发明的优选实施例而已,不能用来表达限定本发明所实施的范围。本领域技术应当理解:即凡根据本发明权利所记载技术方案的等效变化与修饰,皆应属于本发明专利涵盖的范围。