摘要:有多种方式可以在系统中加入智能化功能,其中一种常见的技术就是现场可编程门阵列(FPGA)。将算法编入FPGA中可为最终产品在成本、尺寸和性能方面带来很多好处。本文主要介绍在要求测量和控制功能的系统中使用FPGA可得到的好处和面临的挑战。
测量和控制用FPGA
FPGA是一种具有可重配置逻辑门的芯片,与供应商提供功能定义的ASIC芯片不同,FPGA可根据每个应用的不同需要而进行配置和重新配置。由于FPGA允许在硬件中实现自定义算法,因此它具有精确时序和同步、快速决策及并行任务同时执行等优点。在PC或带有RTOS和微处理器的平台上,处理器必须对多个任务进行分时处理,而FPGA则可以配置为多个独立的并行计算资源,简言之,就像芯片上有多个微处理器一样,且这些微处理器都针对特定的任务进行了优化。
FPGA的性能和灵活性使得它们成为处理输入输出非常有效的技术。假如想计算那些比计数器处理的简单上升或下降沿更有趣的模拟或数字事件,或者要确认一个基于特定事件顺序或自定义通信协议的输入模式,然后在几纳秒后触发一个模拟操作,这时就可以利用FPGA监视输入信号,快速决定并做出反应。另外可以创建一个系统读取脉宽调制信号并迅速计算占空比,更进一步,还可以对FPGA进行配置以利用自定义数字协议进行通信,如对输入信息进行解码,然后将信息组合编码作为输出数据包再发送出去,这种快速解码在与非标准编码器连接时有助于读取和解读出位置和速度信息。你可能甚至希望同时进行上述所有操作,并使得这些操作互相同步,且和其它输入和输出任务同步。
那么输出的情况是怎样的呢?通过自定义数字协议进行通信和生成PWM信号是这种类型很好的例子,也可以模拟一个连接到物理系统的电子器件或传感器。如果是用一个基于软件的系统完成此项工作,即使使用RTOS,输出的性能也可能不一定够。对于主控制算法,或许只需运行在几千赫兹频率上,这会造成CPU资源闲置,而且它只是告诉输出做什么以及何时做,并没有指明该怎样做。具体来说,假定你的嵌入式系统是一个客户用来测试引擎控制模块的引擎模拟器,对汽车引擎建立了模型并且系统基于该模型进行实时模拟,通过模拟和数字I/O与控制器进行通信。如果在某个特定测试里模型按照控制器的指示进行操作,引擎开始运转,但是不断实时调整汽缸压力传感器模拟输出以使控制器相信它是与一个真实运转的引擎相连是非常困难的,输出信号必须在运转过程中形成以便对控制器的命令做出响应。但如果使用的是FPGA,就可以通过对其进行配置使其生成基于模拟模型的高级输出信号。
面临的挑战
将FPGA集成到嵌入式系统最大的挑战是如何配置FPGA的逻辑,以及将传感器输入和控制输出与它连接起来。许多嵌入式系统设计人员对于在实时操作系统下运行的微处理器上编程非常熟练,但他们不喜欢在芯片级对硬件进行定义,这需要有设计工具和语言如VHDL方面的知识。当然,冒昧进入芯片级领域还意味着需要设计和构建芯片周边的电路板,虽然这对于一些嵌入式系统设计人员来说已经过时了,但仍然有许多设计人员宁愿尽可能地使用现成的硬件,特别是当硬件必须精确地测量出传感器数据并对其作数字化处理时。
目前有许多FPGA配置工具,有些工具需要VHDL或其它语言编码完成硬件定义,有些工具提供了图形配置环境,还有的工具允许你使用熟悉的工具编写软件,然后将代码下载到FPGA中。在选择哪种方式适合时需要考虑几个问题,其中一个考虑因素是你的背景。你是否是一个富有经验的硬件开发人员并对FPGA的基本操作有深入的认识?如果是,就可以利用低级工具充分发挥你的经验并深入实地进行配置。也许你不是硬件工程师,但你是一位优秀的程序员并且能很容易掌握新的编程语言,那么你可能需要选择一个能够让你充分运用数据结构和程序细节进行编程的工具。另外一个可能是你既不是硬件专家也不是软件专家,但由于你对整个系统内在的理论或系统所投入的应用非常熟悉而来设计系统,如果是这种情况,那么应该选择一个可以让你以自己的语言进行设计的工具,而不必学习复杂的FPGA或硬件描述语言。
另一个很重要的考虑因素是你计划设计的系统所要求达到的功能是什么。如果正在设计多个不同类型的系统,可能通用硬件设计工具最为适合。有许多人花费很多时间成为使用这些工具的专家,你也可以加入其中。如果想将涉及面缩小一些,那么也有工具去处理那些“常规”事务,而让你专注于可以增值的地方。举个例子,有许多工具可以帮助你很快开发出信号处理系统并将其配置到FPGA中去,也有一些经优化的工具专门用来增加测量和控制功能。
还需要考虑系统配置希望怎样设置的问题。要有怎样的尺寸?与PC连接吗?有的FPGA开发工具要求你开发FPGA周边所有硬件,另一些则要求使用一种特殊的内建有FPGA的电路板。对于后者,很多和板上其它资源如I/O与总线连接的工作都已做好,这样可以大大加快开发的进度,因为你无须关注诸如抗噪性、稳定时间和串扰之类的事项。对于此类系统,你应该确保与I/O的连接只有一些简单功能。如果系统需要大量与运行Windows或RTOS的PC连接,那么应选择那些能够跨平台的设计工具。如果用于开发PC端接口的API很有限的话,设计效率将受到一定的影响。
设计系统
设计一个完整系统的第一步是确定你的算法哪一部分需要放到FPGA中并执行,有以下几种可能性。第一,整个应用都可以在FPGA上执行,你无须通过键盘、显示器或鼠标等用户交互方式,在这种情况下,用软件开发就可以完成所有工作。第二,也可能将应用嵌入到FPGA中去,但你想有一个在PC上运行的Windows用户界面,这就意味着需要开发一个在Windows下运行的程序来和FPGA进行通信。这要看你的开发工具是否按照这种思路开发,可能很棘手,也可能很简单。第三,另一个常见的情况是,你希望在FPGA和一个微处理器平台如单板机或运行RTOS的嵌入式PC之间分配你的应用程序,在这种情况下可能也需要一个Windows用户界面。
有几个原因你可能无法将整个应用程序嵌入到FPGA中去。应用程序大小是其中之一,FPGA的逻辑门数量有限,并且最终放入FPGA中的代码因编程人员以及生成代码的自动系统不同而效率可能很高也可能很低,另外FPGA上供用户使用的RAM容量也很有限,而基于PC的平台一般都带有相对较大的内存和硬盘空间。另外一个需要考虑的问题是FPGA设计常常无法进行浮点运算,市面上有在FPGA上执行浮点运算的工具,但它们可能可以也可能无法与你正在使用的开发工具兼容,如果无法全部以整型算法运行整个计算,可以放一部分在PC上执行。PC还可以提供一些其它好处,而这些好处在FPGA上无法容易地实现,包括文件I/O、网络操作、打印能力和基于PC的测量和控制能力,如图形识别/处理、GPIB/VXI工具控制以及与工业总线如CAN、RS-232和RS-485的接口等。
本文小结
FPGA为嵌入式系统带来了在尺寸、成本和性能上的优点,特别对I/O处理加入智能特性非常有帮助,利用FPGA可以实现基于软件且运行RTOS的系统无法实现的时序和同步。你可以通过微处理器和RTOS平台如嵌入式PC执行大多数应用程序,但需要芯片级解决方案进行信号解码和编码或生成输出信息;同样,你也可以在FPGA上执行大多数应用程序,但需要另一个平台来完成更高级的任务。使用FPGA有一些挑战,但有许多工具可以帮助你解决这些问题。最主要的考虑因素是你的技术特点,系统需要完成什么任务以及系统如何设置。
作者:Geoff Hoekstra
National Instruments
Email: geoff.hoekstra@ni.com