1 导言
在嵌入式体系里除了嵌入式处理器外还会常常运用到可编程逻辑器材,有些可编程逻辑器材在被焊接到印制电路板上之后还能够对其程序进行更新,这种特性称之为“在体系可重编程才能”(In SystemReprogrammability,ISR)。在单板开发阶段,一般运用下载电缆经过IEEE Standard 1149.1 JTAG接口对可编程逻辑器材重编程。在产品原型及制作阶段,单板上的JTAG接口很可能出于产品外形及内部结构设计的考虑现已无法与下载电缆相衔接,此刻将无法经过下载电缆对可编程逻辑器材重编程。依据嵌入式体系的产品一般对外供给串行接口或以太网接口,这些接口由嵌入式处理器来操控[1] ,因而能够经过这些接口将可编程逻辑器材的更新程序发送到处理器,由处理器对可编程逻辑器材重编程。
2 完结办法
2.1 软件方面
串行接口因为协议完结简略、占用资源少而被嵌入式体系广泛运用,只需求运用串行接口衔接线将主机的串行接口与产品的串行接口相衔接,经过主机上的串行接口通讯软件将更新程序发送给处理器即可,文件传输协议一般选用Xmodem协议;而关于依据嵌入式体系的网络产品而言,因为本身供给以太网接口,并且操作体系内嵌TCP/IP协议栈,因而能够运用以太网接口将更新程序发送给处理器,文件传输协议一般选用TFTP协议,嵌入式体系运转TFTP服务器程序,主机上运转TFTP客户端程序[2] 。
嵌入式处理器经过串行接口或以太网接口接纳到的可编程逻辑器材的更新程序是一种Jam文件,运用类似于Altera公司Quartus II development tool的开发工具依据Jam规范和测试言语(Jam Standard Test andProgramming Language 以下简称Jam言语)的要求由Programmer Object File (*.pof,文件后缀名为pof)一类的方针文件转化生成[3] 。Jam文件是一个ASCII文件,文件中包括了对可编程逻辑器材进行编程的一切信息,包括编程算法和数据,具体介绍如下:
(1)“注解字段”部分存储了Jam文件的相关信息,包括可编程逻辑器材的称号,Jam文件的创立时刻,运用的Jam言语的版别等等。
(2)“变量声明/初始化”部分由编程/校验的数据和Jam文件用到的一些变量声明组成。
(3)“算法部分”包括了对可编程逻辑器材编程需求用到的指令和代码,包括空白查看、擦除、编程和校验等等一切能够在可编程逻辑器材上履行的功用。在代码中能够运用分支或循环结构。
嵌入式处理器在接纳到Jam文件之后经过运转一个Jam Player程序来解析这个Jam文件,翻译文件中每一条指令,并对JTAG端口进行数据的读写操作,然后完结对ISR可编程逻辑器材程序的更新作业。Jam Player是一个C言语程序,其main主程序履行一切的基本功用,包括对Jam文件内容的解析,指令的翻译等,这部分内容关于一切的嵌入式体系和Jam文件来说都是相同的。而Jam Player的I/O功用,包括I/O管脚的寻址、延时程序、文件的I/O以及操作体系相关的功用都包括在jamstub.c文件里,经过修正这个文件Jam Player能够适用于任何体系结构。当Jam Player接纳数据的时分,jamstub.c能够从Jam文件取回数据,或许从TDO管脚移位读取数据。jamstub.c也能将处理过的JTAG数据发送到3个JTAG管脚(TDI、TMS和TCK),将犯错音讯和相关信息回来给调用程序。晋级ISR可编程逻辑器材的程序只需求改动Jam文件。
Jam Player经过一个jam_jtag_io函数(int jam_jtag_io(int tms_tdi))来操控对JTAG接口的读写操作。每次调用这个函数的时分,JTAG的TMS和TDI输出信号将被设定为需求的值,而TDO输入信号将被采样,值将被回来,之后TCK时钟信号将发生一个下降沿。tms_tdi参数包括3比特信息,别离指示TMS信号和TDI信号的状况以及是否需求读取TDO的输出(假如不需求用到TDO的值则能够越过对TDO的读取操作)。最低位比特代表TMS的值,第2位比特代表TDI的值,第3位比特指示是否读取TDO:假如置位,则有必要读取TDO的值,不然不需求。假如TDO为低电平,回来零值,高电平则回来非零值。假如没有对TDO进行读取也将回来零值。
2.2 硬件方面
嵌入式处理器与JTAG 器材衔接的办法有两种,一种是直接将嵌入式处理器与JTAG 器材衔接起来,这种办法处理器需求有专门四个管脚用于JTAG 接口,节约了电路板空间的一起却占用了处理器的四个管脚;另一种办法经过一个接口逻辑将JTAG 器材衔接到处理器的总线,处理器经过JTAG 器材对应的地址来对其进行读写操作[4] 。
图1 给出了接口逻辑的一个典范。当接口逻辑收到正确的地址和操控信号,它将对TDI、TCK 和TMS信号进行同步,并经过多路复用器驱动输出管脚,下载电缆也能够经过多路复用器对JTAG 链进行编程或验证[5] 。TDI、TCK 和TMS 信号的同步经过嵌入式处理器的时钟信号和寄存器来完结,TDO 的缓冲区能够避免总线竞赛,TDI、TCK 和TMS 的缓冲区在调试的时分还能够用来读回寄存器的值。图中的与门经过R/W 信号来操控履行读或写操作,而AS 和DS 信号则能够在另一个级别上对电路进行挑选和去挑选。
▲图1 接口逻辑
2.3 内存运用状况
下面评论运用嵌入式处理器对可编程逻辑器材重编程时内存的运用状况。为了能够兼容没有内存分配服务的嵌入式处理器,Jam Player 不只需求程序存储空间并且需求动态内存。程序存储空间(如硬盘驱动器或ROM)用于存储Jam Player 可履行二进制文件和Jam 文件;动态内存(如RAM)将在调用Jam Player的时分运用。
Jam Player 依照下面的过程来运用内存:
(1)嵌入式处理器从ROM 中调用Jam Player;
(2)Jam Player 从ROM 中读取Jam 文件,然后把它存入RAM;
(3)Jam Player 对Jam 文件中包括的紧缩程序数据解压,并将解压后的数据存入RAM;
(4)Jam Player 在RAM 中初始化符号表(symbol table)、仓库(stack)和堆(heap)。
符号表包括Jam 文件的符号(labels)和变量(variables);仓库用于FOR 循环,CALL 和PUSH 句子;堆作为暂时内存用于数学表达式的求值以及填充数据的存储。在处理Jam 文件时每碰到一个指令仓库和堆巨细都将添加,可用动态内存越来越少,而Jam 文件、解紧缩后的数据以及符号表需求的动态内存空间在整个过程中则坚持不变。
Jam Player 的内存运用状况如图2 所示。
▲图2 Jam Player 的内存运用状况
2.3.1 程序存储空间(ROM)运用状况
所需程序存储空间为:
Jam Player的巨细由运用的嵌入式处理器以及接口逻辑的复杂度决议,Jam文件总的程序存储空间由JTAG链上正在被编程的器材数量决议。假如JTAG链上只要一个器材,该器材对应Jam文件的巨细即为所需程序存储空间的巨细。Jam文件的巨细还取决于方针器材,在紧缩后一般在26K字节到30K字节。假定JTAG链中有3个器材,一切3个器材都即将编程,所需Jam文件存储空间将为3个Jam文件巨细的总和。表1给出了单器材所需求程序存储空间的状况。
▲表1 单器材需求的程序存储空间
2.3.2 动态内存(RAM)的运用状况
所需RAM 空间为:
Jam 文件需求的RAM 空间与ROM 空间巨细相同,在程序存储空间运用状况里现已评论过了。在Jam Player从ROM 读出Jam 文件存储到RAM 之后,Jam Player 对Jam 文件里的紧缩数据解压并将解压后的数据存储到RAM。解压后的数据占用RAM 空间的巨细能够经过Jam 文件里的ACA 变量来得到。每个ACA 变量都在“变量声明/初始化”部分列出,每个数组的巨细由变量声明方括号里的数值决议。例如:
阐明解压后的ACA变量巨细为434460比特,也便是大约53K字节。
符号表的巨细由下式给出:
一个变量或符号称号的巨细为48字节,JAM_C_MAX_SYMBOL_COUNT在jamdefs.h文件里界说,默认值为1021。实际上大多数Jam文件最多运用400个变量和符号称号。将JAM_C_MAX_SYMBOL_COUNT修正为400能节约一部分动态内存,
相比较Jam Player运用的总RAM空间巨细而言仓库和堆需求很少的RAM,jamdefs.h文件里的JAMC_MAX_NESTING_DEPTH常量界说仓库的最大深度。表2给出了单器材所需求RAM空间的状况。
▲表2 单器材需求的RAM 空间
3 定论
本文经过软件、硬件以及内存的运用状况等方面的介绍,具体描述了一种经过嵌入式处理器运用Jam编程与测试言语对ISR器材重编程的新办法,为在产品原型及制作阶段对可编程逻辑器材重编程供给了参阅,具有很强的有用含义。
本文作者立异点:因为在产品原型及制作阶段,单板上的JTAG接口很可能出于产品外形及内部结构设计的考虑现已无法与下载电缆相衔接,此刻将无法经过下载电缆对可编程逻辑器材重编程。而经过串行接口或以太网接口将可编程逻辑器材的更新程序发送到处理器,由处理器对可编程逻辑器材重编程,处理了这个难题。