利用Java良好的移植特性的FPGA可编程嵌入式系统
实现对硬件方法映射到的物理地址的访问。 尽管第一种方案的效率较高,并且没有引入额外开销,但是修改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)等。 使用上面给出的接口,则下面这段代码 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平台良好的移植性能,该平台完全能够满足我们的设计要求。当然,也有不足之处,比如对配置控制器的状态的获取,可以考虑使用中断的方式来实现,而不是采用本文中的循环查询机制。这将在以后的工作中加以改进。
Java应用程序通过类HWInterface提供的方法访问本地库。上面的代码中给出了setParam的具体实现。其中,CID是包括硬件方法映射到的缓存地址的一个对象,对应于每个硬件方法的CID都是唯一的,因此,该地址和缓存区大小都是事先已经确定了的。但是,由于系统中只有一个配置控制器,我们无法同时就两个或多个硬件方法向FPGA进行编程,也可以说同一时刻只能有一个硬件方法在使用配置控制器。为此,引入了一个静态变量ConfigStatus来反映配置控制器的当前状态。所以,访问配置控制器的函数configHW()是静态的同步的。
可编程 嵌入式 系统 FPGA 特性 Java 良好 移植 利用 相关文章:
- Reed Solomon编解码器的可编程逻辑实现(06-21)
- 基于VxWorks的MB系列智能可编程控制器设计(01-16)
- 在应用可编程测控网络设计(03-15)
- 基于AT89C51单片机的微型可编程控制器(04-23)
- 基于可编程DSP内核为通信和多媒体SoC提供出色功控(01-10)
- 可编程逻辑技术在数字信号处理系统中的应用(03-09)