基于SOPC的通用型JTAG调试器的设计_第1页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页基于sopc的通用型jtag调试器的设计sopc技术的进展,给器指出了新的进展方向。所谓sopc技术,就是指用可编程技术将囫囵系统放在一块硅片上。在传统设计中级互相自立的各个系统被集成到一块芯片中。

sopc的可重用性是一种先进的设计思想。为了降低用户的负担,避开重复劳动,将一些在数字电路中常用但比较复杂的功能模块,比如sdram控制器等,设计成可修改参数的模块,用户在设计系统时可以挺直调用这些模块。这些特定的功能模块被称为ipcore(学问产权核)。因为ipcore通常是很成熟的,因此降低了开发风险。

本文利用sopc技术的特点,设计一种通用型调试器。按照待调试目标板的cpu型号,将相应的调试ipcore和其他通用ipcore一起编译生成一个调试系统,下载到fpga上,实现一个通用型调试器。在用法同一个硬件系统的状况下,可以挑选不同的调试ipcore来调试不同的cpu,而不同的ipcore可以便利的相互替换。该办法在设计灵便性、开发成本、开发周期、工作性能等方面都具有优越性。详细的实现采纳了cyclone开发板和开发套件。

1jtag调试原理

目前在线仿真调试器中用法最多的调试办法都是基于jtag标准。1986年,联合测试行动组发表了最早的边界扫描测试规范(boundaryscantesting),经不断改进,1990年被批准为ieeestd1149.1a标准,简称jtag标准。现在大多数复杂的ic芯片都带有jtag调试接口。本文所研究的调试办法也基于jtag标准。下面首先容易介绍一下jtag调试原理。

jtag调试原理的基础是边界扫描测试。它通过在芯片的每个i/0脚附加一个边界扫描单元(boundaryscancell,bsc)以及一些附加的测试控制规律来实现。每个bsc有两个数据通道:一个是测试数据通道——测试数据输入tdi(testdatainput)、测试数据输出td0(testdata0utput);另一个是正常数据通道——正常数据输入ndi(normaldatainput)、正常数据输出nd0(normaldataoutput)。在正常工作状态,输入和输出数据可以自由通过每个bsc,正常工作数据从ndi进,从ndo出。在测试状态,可以挑选数据流淌的通道:对于输入引脚,可以挑选从ndi或从tdi输入数据;对于输出引脚,可以挑选从bsc输出数据至ndo或至tdo。芯片输入输出引脚上的边界扫描寄存器单元可以互相衔接起来,在芯片周围形成一个扫描链。利用边界扫描链就可以控制芯片的输入,观看芯片的输出。普通来说,芯片都提供了若干条扫描链来完成测试功能。例如7tdmi核提供了3条扫描链。

jtag控制器主要由3部分组成:测试端口控制器(testaccessport,tap)、命令寄存器和数据寄存器。其中,tap控制器是jtag的核心控制器,需要以下5个控制信号:tck(边界扫描时钟)、tms(jtag测试模式挑选)、tdi(串行边界扫描输入数据)、tdo(串行边界扫描输出数据)和trst(jtag测试规律复位)。正是通过tap控制器状态的不断变幻,jtag控制器得以控制cpu的运行。tap控制器的状态机1所示。

2系统设计与实现

2.1硬件设计与实现

本文采纳a1tera的fpga器件实现了图2所示的硬件结构。

上图列出了所需要的各类ipcore,其中大部分在altera的开发包中可以找到,主要包括:

niosii/fcpu,50mhz,altera提供的免费软核cpu。

avalon,用于数据通信。

flash控制器,用于控制和操作flash芯片。flash芯片中静态存放操作系统、1wip协议栈及其他调试代码。本系统中用法的flash芯片为am29lvl60d,容量为2mb。

sdram控制器,用于控制和操作sdram芯片。sdram芯片用于动态执行调试程序。本系统中用法的sdram芯片为三星公司的k4s640432,容量为8mb。

ethernet控制器,用于控制和操作网卡芯片。仿真器用法这个以太网口与pc部分的集成开发环境通信。本系统中用法的网卡芯片为lan91c111。

arm7tdmijtagipcore,仿真调试ipcore,需要自主开发。其内部规律用语言实现,然后根据alteraipcore的标准编写ipcore描述文件,最后挂在三态总线上,完成所有调试功能。

tck发生器,tck脉冲产生规律,需要自主开发。它利用nios的时钟生成tck信号,作为时钟来驱动arm7tdmijtagipcore。它被做成一个小的功能模块,通过pio与三态总线通信。

上述所介绍的ipcore用法altera公司的开发工具ii编译,最后下载到alterafpga中。本系统用法的cpga芯片是cyclone系列的eplcl2。该芯片包含12060个规律单元,具有239616位ram,片上集成2个锁相环,最大用户i/o引脚达到249个。

该硬件结构很好地体现了sopc的概念,全部的ipcore(包括altera公司发布和自主开发的)集成在一片fpga上。一个片上系统就基本包含了在线仿真器的绝大部分功能,任何硬件结构设计的变幻都在该片fpga上,这使得通用在线仿真器这个概念得以实现。对其他芯片在线仿真,只需更改arm7tdmijtagipcore模块,重新下载到fpga中,便可以对另一种处理器芯片举行在线仿真。该ipcore用verilog语言实现,保存为armjtag.v文件。通过quartusii里的sopcbuilder可以将该文件生成组件,再将其加入nios系统中。器件引脚分配好后,就在quartusii里全编译,最后生成ice.pof文件。将该文件通过编程器烧写到配置芯片epcs4里面。这样硬件系统就完成了。

2.2软件设计与实现

本系统的软件部分包括2个模块:一是pc端的开发调试界面,二是调试器里面的控制程序。2个模块通过tcp/ip协议通信。

pc端开发调试界面的主要功能是接收用户的调试指令,并显示调试结果。这是系统与用户举行交互的唯一方式。开发调试界面向上给用户提供统一的调试功能接口,对下给调试器提供统一的调试指令。本系统用法visualc++开发。

调试器里的控制程序主要功能是将上层用户调试指令转换成特定的jtag命令序列,并控制ipcore将其发送出去,同时接收jtag反馈信息并发送回用户界面。本系统用法nioside来开发。在nioside的工程属性中加入lwip和μc/os组件。主程序首先初始化μc/0s,初始化lwip协议栈,再启动μc/os。全部程序控制放在μc/os的osstart()任务里。该任务首先建立一个套接字,然后在死循环中等待数据到来。当收到来自pc端的调试指令后,从数据包中分别出指令字和参数,将指令字转换成ipcore需要的调试指令,通过avalon总线将其发送到ipcore,并等待ipcore工作完成。最后将ipcore传回的数据打包发回pc端。

目前提供的通用调试指令如表1所列。

在tcp/ip数据包中,有效数据为12字节。第1至4字节是指令代码,第5至8字节为指令参数1,第9到12字节为指令参数2。指令参数1和指令参数2是否有效取决于指令代码。主控制程序收到数据包后,将指令代码发往jtagipcore的命令端口地址,并按照指令代码向参数端口地址发送指令参数1。假如该指令代码需要指令参数2,则在下一个周期发送。

在sopc的硬件系统设计中,全部的外设都是统一编址。将jtagipcore的命令端口地址和参数端口地址分离设置成0x00910850和0x00910860,端口位宽为32位。因此在程序里,往ipcore发送命令只需要往地址0x00910850写32位数据;往ipcore发送参数只需要往地址ox00910860写32位数据。反馈数据端口地址设置成ox00910870,端口位宽为32位。因此在程序里,读取jtag反馈数据只需读取地址0x00910870的32位数据。

2.3jtagipcore的实现

jtagipcore是本调试器的核心,下面容易介绍一下该部分的实现。

ipcore的接口3所示。

该ipcore的对外接口由两部分组成:一是与avalon总线通信的接口部分,即图中的左边部分;二是与被调试cpu通信的接口部分,即图中的右边部分。另外,在囫囵实现中,定义了一些重要的寄存器。

“reg[3000:o]tms,tdo"分离用来存放完成当前操作的tms序列和tdo序列。像拜访存储器这样的操作需要很长的tms序列和tdo序列,因此用了3001位。ipcore每次从这2个寄存器读取1位后,就向对应的引脚发送数据。tdi寄存器只用了134位,由于不是每个tdi输入对jtag调试都实用。parmreg寄存器用来存放总线上传来的参数。tdidata寄存器用来存放从tdi引脚读取的有效数据,将被发送到avalon总线。tdicoljnter寄存器用来对tdi输入数据计数。

avalon总线上来的命令发送到ins[31:0]端口。在调试器主程序里推断命令,做出相应的动作。当ipcore读取到某个命令后,按照指令代码查找对应的tms指令序列,找到以后将指令序列送到tms寄存器。同时,通过parm[31:o]端口读取指令参数,按照指令参数生成对应的tdo序列,将其送到tdo寄存器。当两个寄存器的内容预备好后,在tck时钟的控制下,通过tms引脚和td0引脚分离串行输出。在tdo引脚输出的同时检测tdi引脚,并在适当初机将tdi引脚上的数据读入ipcore,经过处理后发送回总线。

因为tms序列长度较长且其对应于各个调试指令是固定不变的,因此在本设计中,将tms序列作成一个表,存放在ipcore里,而不是通过总线发送。需要时,按照不同的指令代码来读取。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论