利用FPGA的可编程性和Java平台良好的移植性的嵌入式系统平台

时间:2025-11-02  作者:Diven  阅读:0

1. 概述

利用FPGA的可编程性和Java平台良好的移植性的嵌入式系统平台

传统的嵌入式系统设计的主要目标是找到优化的体系结构来完成单一的,特定的功能。对这样的系统来说,ASIC和核心处理器是作为特别的构件模块加以考虑 的:设计者根据应用的要求选择适当的ASIC,根据给定的性能要求比如处理器主频,系统稳定性,以及对功耗的要求等选用适当的处理器内核。

在当今移动通信已经进入每个人的生活的今天,现在的嵌入式系统比如PDA等已经不同于传统意义上的嵌入式系统了,有自己的独特特点。客观需要要求能够支持多种应用功能如网页浏览,播放音频/视频文件,以及进行无线网络通信等。

这样看来,传统的设计思路因为只面向单一的应用,无法满足多应用嵌入式系统的需求。而解决这一问题的良好途径便是向嵌入式系统引入可编程能力,以使得系统能够根据用户的不同要求实现对不同应用的支持。

为了向系统中引入可编程能力,我们考虑在系统中嵌入FPGA,因为FPGA具有下列特点,使得成为我们的首选:

1.现在的FPGA的处理能力和逻辑容量已经接近于专用ASIC,功耗也比较低,能够满足我们系统设计的要求;

2.由于FPGA具有的可重编程能力,使用了FPGA的嵌入式系统能够满足各种不同的应用要求;

从 嵌入式系统管理的角度来说,对网络通信的支持也是很有必要的,也是很有特色的一个应用,因为使得从远端服务器下载新的应用程序并在本地运行成为可能。为 实现对这个功能的支持,我们采用Java作为软件平台。因为Java运行在Java虚拟机之上,能够下载并执行新的应用程序代码,并且无需在下载后重新 启动系统。

这个新的嵌入式系统是基于Java的,有一个FPGA和标准处理器相连。我们通过网络下载Java代码和可以对 FPGA进行编程的比特流。该系统也支持对FPGA的动态重新配置。为了实现硬件(FPGA)和软件(Java应用程序代码)之间的通信,又定义了一组本 地API,以使得从Java应用层能够访问到底层的硬件。为了调用这些本地API,采用了Java本地接口(JNI)。在本文中,将一些Java函数 (Javamethod)用FPGA可编程硬件来实现,称之为硬件方法(HW method)。

2. 系统设计

实现一个Java函数功能的对应的硬件方法实现的逻辑结构图如图1所示。

输入缓存和输出缓存分别用来接收输入参数和存储输出结果。控制缓存用于对硬件方法的控制和检测,比如向硬件方法发出启动指令,检查其所处的状态并判断操作是否完成等。该模块中的所有缓存都映射到处理器物理地址空间中,处理器可以使用正常的读写指令完成对这些缓存的访问。

图2是该嵌入式系统的硬件平台,由一个标准处理器,一个FPGA和一个系统存储单元构成。之间通过共享的系统总线连接在一起。

当 处理器向一个硬件方法发出读写操作指令时,该硬件方法在其自己的地址解码器的帮助下向数据总线上发送对应的响应信号。在这里,我们可以认为是处理器发起的 硬件/软件通信指令,而FPGA则是作为一个从属单元做出回应。因为在处理器发起初始指令后,就由可配置管理器来负责管理FPGA编程。这样一来,就实现 了处理器和FPGA的并行运行。

如图3所示,我们选择Java作为软件平台,并且装载了一个嵌入式操作系统为Java实时应用程序提供基本的服务,比如线程和其硬件管理等。

通过系统管理器,可以从远程服务器下载Java应用程序。系统管理器主要实现了下面3种协议:

1. 应用程序代码(包括可对FPGA进行编程的比特流)下载协议;

2. 用于远程管理的系统维护相关的协议;

3. 控制对嵌入式系统访问权限的认证协议。

系统管理器包括基于socket连接的客户端类加载器。远端应用程序可以下载到本地并按照下面的过程执行:

1. 完成认证过程,系统进入管理模式;

2. 下载应用程序代码,完成系统初始化,比如加载FPGA可编程比特流到相应的存储单元;

3. 执行新的应用程序。

在该系统中,为了简化起见,预先映射硬件方法地址到确定的系统物理存储区,目的是为了寻址操作的方便快捷。

由于我们使用了Java软件平台,应用程序就无法直接访问底层的硬件。这就是说,运行在处理器Java虚拟机上的应用程序不能直接访问映射到FPGA中硬件方法的缓存区域。为解决这个问题,理论上可以采用下面两种方法:

1. 修改Java虚拟机,使其具有对处理器物理地址的直接访问能力;

2. 单独设计Java本地接口(JNI),使得应用程序通过该接口提供的功能实现对硬件方法映射到的物理地址的访问。

尽 管第方案的效率较高,并且没有引入额外开销,但是修改Java虚拟机内核是相当繁杂的工作,同时也可能会引起潜在的系统不稳定。第二种方案虽然引入了 一定的额外开销,但便于移植和实现。我们采用方案二,在Java虚拟机和Java本地接口之外又设计了一个本地通信库。

本地通信库API形式如下:

int hwWriteXXX(int addr, XXX p);

int hwWriteArrayXXX(int addr, XXX[] p);

XXX hwReadXXX(int addr);

XXX[] hwReadArrayXXX(int addr);

int hwConfig(int cf_mem_addr, int bitstr_size);

Java本地接口层接口的形式如下:

class HWInterface{

static int ConfigStatus;

public static native int setParam(CID hw_cid, object P)

{

if(type_of_P == XXX)

err = hwWriteXXX(hw_cid.addr, (XXX)P);

return err;

}

public static native int getResult(CID hw_cid, object R);

public static native int setCMD(CID hw_cid, int cmd);

public static native int getStatus(CID hw_cid);

public synchronized static native int configHW( CID hw_cid);

}

在上面代码中,XXX表示基本的Java数据类型如整型(integer)、浮点型(float)、双精度型(double)等。

Java 应用程序通过类HWInterface提供的方法访问本地库。上面的代码中给出了setParam的具体实现。其中,CID是包括硬件方法映射到的缓存地 址的一个对象,对应于每个硬件方法的CID都是唯一的,该地址和缓存区大小都是事先已经确定了的。但是,由于系统中只有一个配置控制器,我们无法同 时就两个或多个硬件方法向FPGA进行编程,也可以说同一时刻只能有一个硬件方法在使用配置控制器。为此,引入了一个静态变量ConfigStatus来 反映配置控制器的当前状态。所以,访问配置控制器的函数configHW()是静态的同步的。

使用上面给出的接口,则下面这段代码

methodA()

{

…;

int a = objA.m1(2); //SW method

int b = objB.m2(3); //HW method

int c = a + b;

…;

}

就应该写成下面的形式:

methodA()

{

…;

1 HWInterface.configHW(cid2); // cid2 is the ID of HW method m2

2 Object P = new Integer(3);

3 HWInterface.SetParam(cid2,P);

4 HWInterface.startHW(cid2);

5 int a = objA.m1(2);

6 Object R = new Integer();

7 While(HWInterface.getResult(cid2, R) == 0)

; //wait until HW method finished

8 HWInterface.getResult(cid2, R);

9 int b = ((Integer)R.getValue());

10 int c = a + b;

…;

}

在 上例中,为了执行FPGA中的函数objB.m2(),首先对FPGA进行编程(Line1)。然后,将参数拷贝到硬件方法的输 入缓存中 (Line3),并对硬件方法进行初始化(Line4)。采用了一个循环函数持续检查硬件方法缓存的状态(Line7,8),直至计算完成,然后拷 贝得到结果(Line9)。

3. 系统实现

使用ARM710T处理器和Virtex的FPGA,根据上文给出的设计方案,我们实现了一个嵌入式系统开发平台。该平台包括一个网络接口,两个调试接口,一个PCI主机接口和一个串行口。并移植了一个嵌入式操作系统和一个小巧的Java实时运行环境。如图4:

4.

本 文用全新的思路,对传统的嵌入式系统进行了改进,实现了能够支持多种应用的嵌入式系统平台。利用FPGA的可编程性和Java平台良好的移植性 能,该平台完全能够满足我们的设计要求。当然,也有不足之处,比如对配置控制器的状态的获取,可以考虑使用中断的方式来实现,而不是采用本文中的循环查询 机制。这将在以后的工作中加以改进。

猜您喜欢

贴片电阻体积小巧,上面的标识也让人摸不着头脑?别担心,解读5.1k贴片电阻标识其实很简单!通常,你会看到类似512或5102这样的数字标识在电阻表面。 512代...
2024-11-29 10:25:53

焊接烟雾净化设备在工业生产中是重要配件,能够有效去除焊接过程中产生的有害烟雾,保护工人的健康。为了确保设备的高效运作,其配件的分类显得尤为重要。过滤器是焊接烟雾...
2021-12-23 00:00:00


0 引言与H.264/AVC相比,新一代视频压缩标准H.265/HEVC能够在相同的图像质量下实现更低的码率,即更高的压缩比 。由于人眼的视觉特性,在动态码率...
2018-07-24 17:28:00

晶闸管(可控硅)是重要的半导体器件,应用于电力电子领域。其主要功能是控制电流的通断,能够在高压和大电流的环境中稳定工作。晶闸管的结构由四层半导体材料构成,使其具...
2023-08-05 00:00:00

贴片电阻8061并非直接代表阻值,而是表示封装尺寸。8061指的是英制代码,对应公制尺寸为0806,即长0.08英寸,宽0.06英寸,约等于2.0mm x 1....
2024-11-29 10:26:22

十字圆头平尾割尾自攻钉是应用的紧固件,因其独特的设计和优良的性能,在多个领域中有着着重要作用。在建筑行业中,这种自攻钉常用于木材与金属的连接,确保结构的稳固与安...
2021-11-24 00:00:00

贴片电阻R220代表阻值为220欧姆。电阻值是电子元件电阻器的一个重要参数,表示其对电流的阻碍作用大小。贴片电阻上的标识通常采用数字字母组合的方式来表示阻值,例...
2024-11-29 10:26:29

贴片电阻的封装尺寸通常用四位数字表示,例如0402、0603、0805、1206等。这些数字代表电阻的长和宽,单位是英寸的1/100。例如,0402表示电阻的尺...
2024-11-26 11:29:41

贴片电阻,作为电子电路中不可或缺的元器件,其封装材料的选择至关重要,直接影响着电阻的性能和可靠性。市面上常见的贴片电阻封装材料主要有陶瓷和环氧树脂两种。陶瓷材料...
2024-11-26 11:29:38