适用于多架构嵌入式处理器的在线调试器设计与实现
莫鹏飞1,陈志坚2 ,黄欢欢1
(1.杭州市中天微系统有限公司,浙江 杭州 310012
2.浙江大学超大规模集成电路研究所,浙江 杭州310027;)
摘要:为了实现适用于多架构嵌入式处理器的在线调试器,本文提出分层设计的思想,利用部分硬件驱动化的方法,设计实现了一款多架构嵌入式CPU在线调试器。此调试器能适用于内含不同调试接口电路HAD的嵌入式处理器。其需要适用于另一架构的嵌入式处理器时,硬件资源仅增加6.09K。由于采用了硬件驱动化的方法,有利于调试的升级换代,此款在线调试器平均下载速度能到 1367KB/S。
关键字: 嵌入式处理器,CK-CPU,在线调试器OCD,IEEE1149,JTAG,USB
中图分类号: TN402  文献标志码: A
Design and implementation of high-speed configurable RSA accelerator
ZENG Jian-lin1, HUANG Kai1, MA De1, FENG Jiong2, GE Hai-tong2, YAN Xiao-lang1
(1. Institute of VLSI Design, Zhejiang University, Hangzhou 310027, China
2. Hangzhou C-SKY Microsystem Corporation, Hangzhou 310012, China)
Abstract: To implement high-speed configurable RSA accelerator, a pipelined modular multiplier based on radix-64 Montgomery Modular Multiplication and its corresponding configurable memory architecture are proposed. With five-stage parallel pipeline and configurable memory, it fulfills RSA calculation ranging from 256-bit to 2048bit efficiently. As is shown in experiment, compared with other related works, the proposed pipeline architecture can reach better tradeoff between performance and resource. The accelerator is able to increase the performance of modular 
Key words:在线代码运行器 RSA, Montgomery modular multiplication, radix-64, parallel pipeline, configurable

0 引言
随着硬件SoC系统的设计趋向成熟、嵌入式系统软件变得复杂的情况下,嵌入式处理器应用于嵌入式系统的研发时, 软件调试的时间往往占到总体时间的50%以上[1]。嵌入式调试器中片上调试器OCD(On-Chip Dedugging),以其能方便的地访问CPU内的各种资源及价格适中越来越受到市场的热捧。
OCD的实质是根据目标CPU对调试接口的支持,结合运行在主机上的调试工具,如GDB,及中间JTAG协议转换器来实现整个调试器系统。因此,OCD要求目标CPU内具有支持OCD的调试接口电路,又名硬件辅助调试电路HAD(Hardware assisted Dedugging)。而HAD存在各种不同的实现方式,没有统一的标准,使得一款调试器只能适用于含有相同HAD电路的CPU中。如Lauterbach的TRACE32-ICD[2],能支持不同目标CPU的前提是需要更换调试器接口线(硬件)和相关软件。
因此,设计一种在线调试器,使其能适用于内含不同HAD 的多架构CPU,已经成为一个重要的趋势。
本文在研究CK-CPU[3] 调试接口电路HAD的基础上,提出分层设计的思想,对CK-CPU调试系统进行分层设计,利用部分硬件驱动化的方法,设计实现了一款嵌入式CPU在线调试器,其能适用于CK-CPU全系列处理器,不受不同HAD架构的影响。多增加支持另一HAD架构的CPU时,需要增加的微操作模块,硬件资源仅为6.09K逻辑门。此方法有利于在线调试器的升级换代,需要更新调试器时,只需要更新相关软件,而不需要更换调试器硬件,为整个调试系统的升级节约了成本。由于采用了分层设计的思想,设计人员能专注于优化每一层,此调试器平均下载速度可达到1367 KB/S。
1 CK-CPU 调试接口电路HAD
CK-CPU嵌入式CPU是C-CORE的重要分支,是面向中高端SoC应用的32位高性能低功耗CPU IP核[4]。
  CK600系列CPU采用16位指令集;CK800系列CPU采用16/32位混合编码的指令集[5]。CK-CPU的片上调试接口电路HAD如图1所示,主要有TAP状态机、HAD译码器、HAD命令寄存器及HAD状态/控制寄存器。
图 1 CK-CPU 调试接口电路架构
Fig 1 Architecture of CK-CPU HAD
由于CK800较CK600采用不同的指令集,且CPU的具体实现架构不相同,两个系列CPU的片上接口电路HAD除开TAP状态机外的几个部分都不相同。如HAD中指令寄存器的位宽及扫描链寄存器的访问方式就不一样。
2 CK-CPU调试器设计
程序开发人员利用在线调试器下载调试程序、设置断点、单步执行、观察、修改处理器寄存器以及内存变量,都需要通过访问及控制HAD中的寄存器来实现。在传统模式下,特别是采用USB、网络接口的在线调试器,如果更新了CPU的调试接口电路,都需要更换调试
器的硬件和软件。本文采用分层设计的思想,对调试器的软件和硬件进行深入研究,并利用FPGA的可配置性来实现部分硬件驱动化,以此来实现当CPU调试接口电路HAD架构不一时,不需要更新调试器的硬件电路。
2.1 调试器整体架构
嵌入式开发系统,一般都采用如图2所示的调试架构[6]。在线调试器完成的工作是把从PC主机发出的命令和数据转化成符合IEEE1149协议的JTAG命令传送到目标机。传统上,主机与在线调试器通过串口或者并口连接主机和调试器。这种方式可以直接通过软件来控制引脚电平,所以IEEE1149协议的转换功能可以通过软件方式来完成,但是传输速度不快。另外一种方式可以通过网络或者USB方式,这种连接方式的优点是速度快,调试器内配有专门的处理器和固化程序,IEEE1149协议转换工作由硬件方式实现,这样的方式硬件成本较高,功能单一不利于升级换代[7]。
图 2 典型系统调试架构
Fig 2 Architecture of Classic embedded Debugging system
随着网络,音视频领域中嵌入式系统的发展,所调试的程序越来越复杂,代码量越来越大,在线调试器的下载速度也成为一个重要的指标,故本文采用USB方式连接主机和在线调试器。
本文对调试系统进行了更详细的分层,所设计的CK-CPU在线调试器的整体框架如图3所示。包括调试工具GDB、调试代理服务器、调试器OCD、CK-CPU目标机。
图 3 CK-CPU调试器架构
Fig 3  Architecture of CK-CPU debugging system
调试工具GDB是自由软件基金会开发的一套符合自由软件协议的调试器系统,可以支持多目标系统[8]。GDB与调试代理服务程序通过基于socket数据包的方式进行通信。故此调试代理服务程序可以与GDB运行在不同的PC上,可以实现远程调试。调试代理服务程序负责
隔离上层接口(socket包)和具体硬件操作,代理服务程序采用JP(JtagProxy)协议[9]以实现对多种调试接口的支持,如USB、并口。调试器驱动则主要实现USB设备的枚举,JP数据包到USB数据包的转化。调试器驱动还起到配置调试器中的FPGA重要作用。
2.2 调试器软件
CK-CPU在线调试器软件主要包括调试代理服务程序和调试器驱动。
调试代理服务程序从逻辑上可以分为socket协议层、HAD层、JP层、USB层。socket协议层负责网络数据包的接收、解析、封转、发送。HAD层,负责调试命令的拆分,即负责通知调试器按照什么顺序访问目标CPU中调试接口支持电路HAD的某些寄存器。JP层负责封装成遵循JP协议的调试数据包。USB层负责数据包写入USB端点(EndPoint)。或者从USB端点读出数据包。
CK-CPU在线调试器,采用美国Cypress公司的USB2.0控制芯片CY7C68013及一款容量适中的FPGA芯片为核心来实现。,USB2.0控制芯片的固件及FPGA内的逻辑都存在于调试器驱动程序中。USB控制芯片的固件负责USB芯片与USB驱动的通信、USB芯片与FPGA的通信(通过JP协议通信),USB固件还负责完成FPGA逻辑的初始配置。
CK-CPU在线调试器驱动的工作过程如图4所示。
图 4 CK-CPU调试器驱动工作流程
Fig 4  Flow of CK-CPU OCD driver
首先,调试器通过USB接入到安装有调试代理服务器及驱动的PC机上,调试器上电, 接着
进行USB设备的枚举,第三步通过USB芯片的Endpoint 0下载USB芯片的固件程序,第四步USB芯片重枚举,第五步配置FPGA逻辑,第六步检测FPGA配置是否完成,如果没有配置完成,继续配置,如果配置完成,判断FPGA是否配置成功,如果配置成功,调试器进入正常工作模式,如果配置不成功,调试器将以信号灯表征设备故障。
2.3 调试器硬件
调试器硬件如图所示,主要包括一款USB控制芯片及FPGA芯片,及其他电路芯片如EEPROM,电源管理电路、加密防抄板电路和信号驱动电路。本节主要介绍配置在FPGA内的逻辑。
图 5 CK-CPU调试器硬件架构
Fig 5  Architecture of Hardware for CK-CPU OCD
本文提出的部分硬件驱动化的方法,即把FPGA内的逻辑集成到调试器的驱动中。FPGA内的逻辑如图6所示 。从逻辑上分为协议层,功能层,微操作层,JTAG驱动层。 协议层主要包括JP协议的分析及符合JP协议的数据包准备。功能层实现调试器寄存器的访问、目标机内存访问、CK-CPU寄存器访问、HAD寄存器访问。微操作层实现具体的对CPU调试接口电路HAD的访问。JTAG驱动层采用符合IEEE1149标准的接口,采用通用的TAP状态机来显现。
    由于调试器与目标CPU的接口只有IEEE1149标准接口,功能层除开OCD寄存器访问外的行为都需要经过对目标机HAD寄存器的读写来间接实现。而不同CPU的HAD架构又不相同。本文对调试器系统做充分的分层设计后,在微操作层加入针对HAD架构的微操作模块,以本文为例,为了同时支持CK600,CK800两个系列的CPU,在微操作层加入了CK600 HAD微操作模块及CK800 HAD微操作模块。如还需要适用另外一个架构的嵌入式处理器,CK900,其HAD架构不同,只需要在微操作层加入CK900 HAD微操作模块即可。由于整个FPGA逻辑通过OCD的驱动自动加载,从而只需要更换设备驱动即可完成调试器的升级。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。