[转帖]FPGA在控制领域的应用(兼谈nios的用途)
- UID
- 19076
- 性别
- 男
|
[转帖]FPGA在控制领域的应用(兼谈nios的用途)
发起者: 在控制领域,如果从开发产品的角度来说,传统的mcu或者dsp处理器更加符合要求,技术成熟,开发进度可以保证。
采用fpga实现,相应难度提高,如果没有合适的人员,相应的开发周期较长,当然,对于科研院所,我肯定推荐用fpga实现,这样能够保证技术上的先进性,容易争取到经费的支持。
采用fpga,那么对于controller来说,有两个选择:
1)利用nios2实现控制器,这种方法的好处是自定义软核cpu后,开发过程和传统的mcu系统没有太大的分别,不必关心内部时序等问题,浮点也有现成的支持,基本上不存在太大的难度。但我个人不推荐使用nios2作为控制器,因为对于控制系统而言,硬实时(hard real-time)是第一要素,采用nios2这种相对还不太成熟的方案(包括开发环境等等),不容易保证整个系统的可靠性。至于nios2为什么不成熟,请参见后面的叙述。
2)采用vhdl来实现控制器,这种方法的缺点不言自明,开发难度较前面两种大了许多,对于浮点计算,即使采用商业IP(altera也提供加减乘等浮点megafunction),还有很多复杂工作,最简单来说,实现一个pi控制器,也需要对于fpga内部时序、流水线等有一定了解方可成功。当然好处也很明显,首先实时性问题自然不在话下,另外从申请纵向经费来说,也是一个很好的点。对于数据后处理、通讯等次要功能,可以采用nios2来实现,这样整个系统就可以比较完整。
总结一下我的意见:
1:如果是做产品,并打算把该产品推向市场**,用mcu或dsp处理器吧
2:如果是做项目,并打算在初期利用项目申请到相关经费的支持,那么可以考虑用fpga,利用vhdl做controller,用nios2去实现通讯、数据处理、人机交互等辅助功能。
3:至于浮点IP(控制领域难免涉及到浮点运算),用相关商业ip(一般来说有加减乘除,浮转整,整转浮等功能)或者altera的IP(只有加减乘)都可以,但最关键的问题是要有良好的技术支持,就国内来说,目前用fpga做运算还比较少,相关人员也比较缺乏,因此技术支持非常重要。
(意见1):所言及是,深有同感啊,目前FPGA上做应用,这速度不敢恭维,DSP几百上千的MIPS够FPGA赶的,象AVR等众多8位芯片以性价比占据了应用的半壁江山,但新事物刚出来时都是稚嫩的,FPGA的灵活性是不可比拟的,它可以集成众多的IP,其未来恐怕不是一个简单的开发用芯片,可能是一个完整的应用开发平台,所以需要盯着它的发展,跟踪技术进展。
(意见2):FPGA里的那么多DSP Block你不好好用,当然觉得还不如DSP芯片。
(意见3):NIOS的实时性不错的。灵活的结构可以让设计人员充分发挥。我用过普通级别的ARM9和PowerPC,在100m的IP网络接口的表现上都一般。实测传输速度都没超过45M的。而NIOS/S在50M的工作频率下可以超过70M。当然,开发环境不完善到是真的,有待改善。不过前途是光明的,否则为何XILINX和LATTICE都迫不及待的跟进推出类似的解决方案。
(意见4):控制领域设计的范围太广了,传感器,电机控制,汽车电子,人工智能等等。对于需要实时处理大量的采样数据并且进行数学模型运算的应用,fpga本身也难有应用之处,一般都是dsp或dsp阵列设计。至于真正的中国军工,我知道他们使用嵌入式的linux,且所有的代码是开发工程师重写的。vxworks太贵了。
(意见5):难用的主要原因是基于VHDL代码编写比较复杂,在用dsp处理器设计控制系统的时候,只需要用c语言等高级语言来编写相应的算法即可,不需要考虑这些算法在处理器中是如何具体执行的,用vhdl则不一样,每一步都需要有精确的考虑。我们前不久在fpga上移植了pc机上一段不超过100行的fortran程序,最终vhdl代码超过了10万行,这是fpga无法得到大量应用的根本原因。
至于nios,如果采用它来做系统的话,定制好cpu以后,和传统的dsp处理器或者mcu并没有太大的分别,无非就是多了一些自定义的指令(这个有点类似于dsp处理器中的专用指令的概念),我认为在控制领域,nios虽然大大简化了系统设计的难度(用c代替了vhdl),但就目前来讲,相比较于传统的mcu和dsp处理器,后者更加成熟了。
要想把fpga用到控制领域,我个人最看重的实际上还是前面提到的的硬实时部分,因为硬件才是fpga的根本,这方面,altera和xilinx实际上应该也有所考虑,dspbuilder和system generator的推出就是为了解决代码实现难度较大的问题,当然现在还都不是很完善,但这种基于G语言的代码自动生成的工具应该是硬实时模块实现的一个方向。具体可以看那篇sopc理解的帖子。
如果仅从性能上来考虑,fpga的实时性和处理能力与相应的dsp处理器不在一个档次上,前者是硬件的解决方案,前面说的那个fortran的例子,我们用fpga实现以后,相对于原有的主流pc平台,计算性能提高了2个数量级以上。
至于dsp阵列,那是没有办法的办法,实在是为了增加处理性能,不得已而为之,从系统设计的角度来说,肯定是不可取的,采用dsp阵列,会带来很多其他问题,比如通讯,比如协同工作,再比如硬件设计的复杂性。
最后说一点,据我所知,军工上好像大量采用的还是vxworks这样的商业系统,embedded linux目前应该还停留在实验阶段了,rtlinux可能会有一些应用
(意见6):分析的很有道理。fpga设计的好可以实现真正的实时运算。我们也曾将在DSP上实现的数字图像压缩预处理和部分算法移植到FPGA上,得到惊人的结果。但是也因为过程的艰难而没有继续下去。NIOS的乐趣是在当你进行上层软件设计的时候,可以随时根据需要去修改和添加新的硬件,多弄几个DMA,增加条总线,设计个新的单周期命令等等,很酷的。 |
|
|
|
|
|