在线仿真子系统是一个针对不同类型嵌入式处理芯片的高扩展性嵌入式系统。它包括硬件部分和软件部分。硬件部分采用SOPC技术加载Altera公司的IP core形成一个以NiosII CPU为核心的,TCP/IP和JTAG IP core端口为通信模块的硬件平台。软件部分包括网络传输处理和JTAG IP core接口程序部分。
JTAG IP core是业务信号处理逻辑模块,可以是ARM、PowerPC、MIPS等不同架构的嵌入式处理器。
1.1 核心子系统设计
JTAG IP core是系统的核心部分。它负责目标机调试命令的格式转换、传送逻辑控制,以及JTAG状态机状态转换的控制。JTAG IP core子系统划分为5个模块,每个模块又由子模块所构成。模块的执行次序不同,或并发,或顺序执行。JTAG IP core子系统结构图如图2所示。
在线仿真子系统中,JTAG IP core接口为JTAG IPcore子系统与NiosII CPU硬件环境之间提供数据交互服务。接口程序分成宏定义、写数据、读数据3个部分。
宏定义部分,JTAG IP core中的操作指令包括:进入调试状态、获取CPU IDCODE、读/写寄存器、读/写内存、设置断点、设置观察点、跳出调试状态等。
写数据部分,目标机的内存地址和寄存器号作为参数数据传递到JTAG IP core子系统中,调试指令(即宏定义中的指令)与参数一起被写入JTAG IP core子系统中。部分程序代码如下:
其中,pi表示参数数据(i=0,…,3),ir表示指令。IOWR_32DIRECT(JTAGTEST_0_BASE,ADDR(i),pi)表示将pi或ir的值写入JTAG IP core。
读数据部分的功能是从JTAG IP core子系统中读取目标机传回的数据。当在线仿真子系统的Nios II CPU准备从JTAG IP core子系统中读取数据时,JTAG IP core子系统中的寄存器数据不一定是有效数据,因而需设置一个寄存器(命名为read_ready)来循环检测数据是否有效。如果寄存器的值不为0,则允许读取数据。
2 JTAG IP core子系统仿真验证
JTAG IP core子系统设计完成后,为了验证逻辑的正确性,在QuartusII环境下对该IP core模块进行了仿真验证。在仿真中,将NiosII CPU给出的触发信号cLK修改为2分频,以便能较直观地看清触发子系统允许的TCK信号的产生。当JTAG IP core接口程序被启动时,总线读写模块开始从Avalon总线上读取参数和指令(如图4所示,writedata、address、inst∣reg_in[0,1,4]及ir寄存器中出现数据)。当参数指令传递模块中的palm和ir寄存器中出现数据后,主控模块开始工作;同时,主控模块的busy_flag信号触发状态机模块工作。从图中可看到,TMS序列出现数据,TDI端口开始送出数据。JTAG IP core模块能按照预定设计输出TMS和TDI调试序列,说明该IPcore在逻辑上是正确的。