您的位置 首页 培训

使用FPGA的可编程性和Java渠道杰出的移植性的嵌入式体系渠道

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

1. 概述

传统的嵌入式体系规划的首要方针是找到一种优化的体系结构来完结单一的,特定的功用。对这样的体系来说,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所示。

运用FPGA的可编程性和Java渠道杰出的移植性的嵌入式体系渠道

输入缓存和输出缓存别离用来接纳输入参数和存储输出成果。操控缓存用于对硬件办法的操控和检测,比方向硬件办法宣布发动指令,查看其所在的状况并判别操作是否完结等。该模块中的一切缓存都映射到处理器物理地址空间中,处理器能够运用正常的读写指令完结对这些缓存的拜访。

图2是该嵌入式体系的硬件渠道,由一个规范处理器,一个FPGA和一个体系存储单元构成。它们之间经过同享的体系总线衔接在一起。

运用FPGA的可编程性和Java渠道杰出的移植性的嵌入式体系渠道

当 处理器向一个硬件办法宣布读写操作指令时,该硬件办法在其自己的地址解码器的协助下向数据总线上发送对应的呼应信号。在这里,咱们能够认为是处理器建议的 硬件/软件通讯指令,而FPGA则是作为一个隶属单元做出回应。因为在处理器建议初始指令后,就由可装备办理器来担任办理FPGA编程。这样一来,就完结 了处理器和FPGA的并行运转。

如图3所示,咱们挑选Java作为软件渠道,而且装载了一个嵌入式操作体系为Java实时运用程序供给根本的服务,比方线程和其它硬件办理等。

运用FPGA的可编程性和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:

运用FPGA的可编程性和Java渠道杰出的移植性的嵌入式体系渠道

4. 总结

本 文用一种全新的思路,对传统的嵌入式体系进行了改善,完结了一种能够支撑多种运用的嵌入式体系渠道。运用FPGA的可编程性和Java渠道杰出的移植性 能,该渠道彻底能够满意咱们的规划要求。当然,也有不足之处,比方对装备操控器的状况的获取,能够考虑运用中止的方法来完结,而不是选用本文中的循环查询 机制。这将在今后的作业中加以改善。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/338403.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部