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

发布者:BlissfulWhisper最新更新时间:2012-07-13 来源: 21ic 关键字:ava  移植特性  FPGA  嵌入式系统 手机看文章 扫描二维码
随时随地手机看文章

  传统的嵌入式产品只能实现某种特定的功能,不能满足用户可变的丰富多彩的应用需求。为解决这个问题,本文设计并实现了一种使用Java作为软件平台的基于FPGA的可编程嵌入式系统,以实现系统对多种本地应用和网络的支持。

  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函数(Java method)用FPGA可编程硬件来实现,称之为硬件方法(HW method)。

  2. 系统设计

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

  

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

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

  

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

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

  

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

  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)等。

[page]

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平台良好的移植性能,该平台完全能够满足我们的设计要求。当然,也有不足之处,比如对配置控制器的状态的获取,可以考虑使用中断的方式来实现,而不是采用本文中的循环查询机制。这将在以后的工作中加以改进。

关键字:ava  移植特性  FPGA  嵌入式系统 引用地址:利用Java良好的移植特性的FPGA可编程嵌入式系统

上一篇:采用上位机与FPGA开发板的光纤通道接口适配器设计
下一篇:FPGA全局时钟资源相关Xilinx器件原语及使用

推荐阅读最新更新时间:2024-03-16 13:03

基于FPGA的AMLCD控制器的设计
飞机座舱图形显示系统已发展到第六代,即采用有源矩阵彩色液晶显示器AMLCD(ActiveMatrixLiquidCrystalDisplay)。当前高分辨率的军用AMLCD显示模块还只能依靠进口,且控制电路板须安装在该显示模块提供的机箱内。这种安装方式对AMLCD控制电路板的尺寸要求高,要求尽可能减少所设计电路板的尺寸。在笔者设计的新一代飞机座舱图形显示系统中使用了大规模现场可编程门阵列FPGA(FieldProgrammableGataArray),这种设计方式可以将以前需要多块集成芯片的电路设计到一块大模块可编程逻辑器件中,大大减少了电路板的尺寸,增强了系统的可靠性和设计的灵活性。本文详细介绍了已在实际项目中应用的基于FPGA
[电源管理]
基于<font color='red'>FPGA</font>的AMLCD控制器的设计
基于嵌入式系统的USB(HID)设备设计
  0 引言   目前嵌入式系统在数字化电子产品领域应用越来越广泛。随着其成本的降低,大有取代单片机的趋势。USB 设备以其小巧、便携、即插即用、成本低廉等优势在当前的桌面应用中有相当的比重,尤其是HID(人机接口)设备,其免驱的特点(不用安装驱动程序)更是给用户带来极大方便。现在市场上USB 设备多是由专门的USB 控制芯片来实现其应用控制,芯片内集成了USB 协议,成本较高。PCB 板的面积较大。本文提出了仅用一片MCU(微处器-单片机)或嵌入式系统芯片来实现其与PC 机的通讯的方法。就单片机而言,多数单片机速度较慢,对事件的响应能力较弱,对全速USB 应用不是很好的选择。而嵌入式系统,由于其速度较之单片机快很多,内部RA
[嵌入式]
FPGA灵活性与ASIC性能 Achronix Speedster7t一个都不能少
近年来人工智能技术发展迅速,在金融、交通、制造、安保等众多领域的应用已经让人们见识到人工智能社会到来可能带来的巨大变革。世界各国也高度重视人工智能发展,纷纷出台相关战略和政策,并加大研发投入。根据中国电子学会统计,2018年全年,全球人工智能核心产业市场规模超过555.7亿美元,相较于2017年同比增长50.2%。目前中国人工智能行业的企业总数达到670家,占全球的11.2%。 面对人工智能市场持续升温,人们对于这些系统应如何建构仍十分分歧。随着人工智能与机器学习的应用场景快速发展演进,新的解决方案都要去应对在高性能、灵活和上市时间等方面的不同需求。根据市场调研公司Semico Research的预测,人工智能应用中FPGA的市场
[机器人]
英特尔® FPGA Vision线上研讨会亮点抢先看
英特尔成立独立FPGA公司,加速行业创新 继宣布将可编程解决方案事业部 (PSG) 作为独立业务部门运营后, 英特尔将于3月1日举行FPGA Vision线上研讨会 。届时,首席执行官Sandra Rivera和首席运营官Shannon Poulin将分享有关全新企业品牌、公司愿景与战略,以及市场增长机会的更多信息。 英特尔PSG团队诚邀您参加本次线上研讨会,深入了解独立运营的全新FPGA公司,持续增长的市场及客户需求,以及我们旨在助力行业创新加速的产品路线图。与此同时,线上研讨会还将重点介绍FPGA在AI领域的布局,即如何使AI在数据中心、网络和边缘易于访问及扩展。此外,Rivera和Poulin将重磅发布全新支持工具
[嵌入式]
为第10代器件而生,论Altera Spectra-Q引擎的技战术
由于集成了ARM核,Arria10和Stratix10 SoC的复杂度明显比一般的FPGA要高得多,再加上它们其他一些诸如高性能DSP、快速DDR4等特点,利用Arria10和Stratix10进行设计的难度自然倍增。 论软硬件战术 工欲善其事,必先利其器,想要把高性能的SoC用好,设计工具很重要。Altera近日推出了专为Arria10和Stratix10等Altera 第10代 及后续产品而设计的强劲引擎Spectra-Q,其在Quartus II软件中使用,以提高Altera下一代可编程器件的设计效能,缩短产品面市时间。 Altera专门请Altera软件和DSP产品市场经理Albe
[嵌入式]
为第10代器件而生,论Altera Spectra-Q引擎的技战术
基于多种EDA工具的FPGA设计
    摘要: 介绍了利用多种EDA工具进行FPGA设计的实现原理及方法,其中包括设计输入、综合、功能仿真、实现、时序仿真、配置下载等具体内容。并以实际操作介绍了整个FPGA的设计流程。     关键词: FPGA 仿真 综合 EDA 在数字系统设计的今天,片上系统(SoC)技术的出现已经在设计领域引起深刻变革。为适应产品尽快上市的要求,设计者必须合理选择各EDA厂家提供的加速设计的工具软件,以使其产品在本领域良性发展。FPGA设计是当前数字系统设计领域中的重要方式之一。本文以多种EDA厂家工具为基础,系统介绍FPGA设计的流程。 1 数字逻辑划分与FPGA内部结构 图1所示为数字逻辑权状分类图,由其可
[半导体设计/制造]
大规模现场可编程门阵列FPGA)开发系统电源设计研究
摘要:以Xilinx的FPGA为例,介绍了FPGA开发系统的电源要求和功耗,并给出了采用线性低压降(LDO)稳压器,DC/DC调整器,DC/DC控制器和电源模块等几种电源解决方案。 关键词:现场可编程门阵列;电源设计;DC/DC变换器   1    引言     现场可编程门阵列(FPGA)的出现给电路设计带来了极大的方便,目前,在芯片设计领域也采用FPGA来开发仿真验证平台。这种开发系统的FPGA一般规模较大,功耗也相对较高,因此,其供电系统的好坏直接影响到整个开发系统的稳定性。所以,设计出高效率、高性能的FPGA供电系统具有极其重要的意义。 2    FPGA电源指标要求     我们以Xi
[电源管理]
大规模<font color='red'>现场可编程门阵列</font>(<font color='red'>FPGA</font>)开发系统电源设计研究
FPGA软件无线电
软件无线电 技术给正在开发无线电架构的工程师带来力量。编程中频(IF)带宽、调制、编码模式和其他无线电功能的能力广泛引起注意的。除了提供所有这些灵活性外,软件无线电必须改善灵敏度,动态范围和邻信道抑制性能。软件无线电仍然是无线电,但它必须被比正在替代的通常无线电执行的更好。 现场可编程阵列( FPGA )技术先进之处在于紧凑的占位空间能够高速处理,同时也保持软件无线电技术的灵活性和可编程性。FPGA在高速、计算密集、可重新配置应用(FFT、FIR和其他乘法—累加运算)中是受欢迎的。从FPGA和板供应商可得到可重新配置核,在FPGA中能够实现调制器,解调器和CODEC功能。系统设计人员期待着带集成FPGA的前端采
[嵌入式]
<font color='red'>FPGA</font>软件无线电
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved