随着通信技术的发展,出现越来越多的无线接入技术,为了解决不同标准间的互通和兼容,人们提出了软件无线电(Software Defined Radio,SDR)技术[1]。SDR技术要求通信终端具有可重配置能力,根据特定通信网络情况,动态地改变调制/解调、编解码、交织/解交织等方案。 SDR终端的实现往往都是基于可重配置的硬件环境,如现场可编程逻辑阵列(Field Programmable Gate Array,FPGA)、数字信号处理器(Digital Signal Processor,DSP),而不是专用集成电路(Application Specific Integrated Circuit,ASIC)等特定的硬件电路和芯片。在线配置(In System Programming,ISP)或者动态配置FPGA就是一种重要的SDR实现技术。本文介绍作者开发实现的一种基于ARM的嵌入式Linux下通过 JTAG接口动态配置FPGA的方法。
在嵌入式Linux环境中,使用JTAG接口配置FPGA,必须使用标准测试与编程语言(Standard Test And Programming Language,STAPL)标准[5]。STAPL是一种专门用于描述可编程逻辑设备(Programmable Logic Device,PLD)配置文件的编程语言,由EIA/JEDEC组织制定标准。使用STAPL描述的配置文件具有通用性,独立于PLD生产厂商。
Jam STAPL是Altera公司提供的支持STAPL的套件[6]。使用Jam STAPL进行配置包含两部分,Jam Player(Jam解释器或者称为Jam虚拟机)和Jam配置文件。Jam Player运行在微处理器中,读取Jam文件并解析Jam文件表达的内容,在JTAG接口上产生用于配置的二进制数据流并读取反馈数据。
Jam STAPL的工作方式如图1所示。利用PLD厂商提供的集成开发环境Jam Composer,可以产生Jam配置文件(该文件包含目标设备、应用数据等完整配置信息,与厂商和配置平台无关)。然后使用Jam Player解释并产生JTAG配置数据,对JTAG链中的各个设备进行配置。
① ASCII文本格式文件,也就是用STAPL描述的配置源文件,文件后缀名是.jam。该格式便于阅读和理解,但由于采用ASCII文本编码,体积较大。
② 字节码(ByteCode)格式文件,STAPL源文件编译好之后的字节码文件,文件后缀名是“.jbc”。对于同样的配置信息,该格式比.jam格式体积小,节省存储空间;其缺点是,无法直接阅读其中的配置信息。
Jam Player中调用该驱动时,在buffer中只提供TMS和tdI信号,如图5(a)所示。根据硬件设计,系统使用的是S3C2410的GPB端口的 7、8、9、10引脚,GPB数据寄存器(GPBDAT)的结构如图5(b)所示。所以将buffer[0]的内容写到GPBDAT寄存器时,需要左移7 位;读取tdO信号时,仅需返回第10位数据。
[1] Joe mitola. The Software Radio Architecture[J]. IEEE Communications Magazine, 1995(5):2638.
[2] 王诚,吴继华,等. Altera FPGA/CPLD设计(基础篇)[M]. 北京: 人民邮电出版社,2005.
[3] IEEE Std. 1149.12001, Test Access Port and BoundaryScan Architecture, IEEE, 2001.
[4] Altera Corporation. Altera Configuration Handbook,200710.
[5] EIA/JEDEC standard JESD71, Standard Test and Programming Language(STAPL),
199908.
[6] Jam STAPL[OL]. www.jamisp.com.
[7] Altera Corporation. Altera Application Note 122 Using Jam STAPL for ISP & ICR via an Embedded Processor, 200306.
[8] Altera Corporation. Altera Application Note 111 Embedded Programming Using the 8051 & Jam ByteCode, 200510.