微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于Java的FPGA可编程嵌入式系统

基于Java的FPGA可编程嵌入式系统

时间:09-19 来源:互联网 点击:

实现对硬件方法映射到的物理地址的访问。

尽管第一种方案的效率较高,并且没有引入额外开销,但是修改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平台良好的移植性能,该平台完全能够满足我们的设计要求。当然,也有不足之处,比如对配置控制器的状态的获取,可以考虑使用中断的方式来实现,而不是采用本文中的循环查询机制。这将在以后的工作中加以改进。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top