回复 34# shu_cgp
ESL和OPENCL在互联网公司非常常见,金融公司也非常多。 这是我书中的一段内容,请参考:
2.1.1
FPGA的应用方向
需要明确一点,FPGA是给设计电子系统的工程师使用的。这些工程师通常是使用已有的芯片搭配在一起完成一个电子设备,如基站、机顶盒、视频监控设备,甚至金融证券中的高频交易设备等。当现有芯片无法满足系统的需求时,就需要用FPGA来快速的定义一个能用的芯片。FPGA实质是一些“真值表”、触发器、各种连线以及一些硬件资源,电子系统工程师使用FPGA进行设计时,无非就是考虑如何将这些资源组合起来,实现一定的逻辑功能而已,而不必像IC设计工程师那样一直要关注到最后芯片是不是能够被制造出来。本质上和利用现有芯片组合成不同的电子系统没有区别,只是需要关注更底层的资源而已。要想把FPGA用起来还是简单的,因为无非就是那些资源,在理解清楚了FPGA为什么是可编程的以及HDL描述的本质后,搞个实验板,跑跑实验,做点简单的东西是可以的。例如,跑个马,点个灯什么的。但真正要把FPGA用好,仅仅了解Verilog和FPGA器件基础知识是远远不够的。因为最终要让FPGA里面的资源如何组合,实现何种功能才能满足系统的需要,那就需要懂得更多更广泛的FPGA基础知识。
前面介绍FPGA时已经给出了FPGA的各种应用场景,但归纳而言FPGA的应用主要包含三个方向,包括接口、信号处理和SOPC,具体内容如下。
2.1.1.1
接口应用与粘连逻辑
第一个方向(传统方向),主要用于通信设备的高速接口电路设计。这一方向主要是用FPGA处理高速接口的协议,并完成高速的数据收发和交换。这类应用通常要求采用具备高速收发接口的FPGA,同时要求设计者懂得高速接口电路设计和高速数字电路板级设计,具备EMC/EMI设计知识,以及较好的模拟电路基础,需要解决在高速收发过程中产生的信号完整性问题。FPGA从开始到现在,最广的应用就是在通信领域,一方面通信领域需要高速的通信协议处理方式,另一方面通信协议随时在修改,非常不适合做成专门的芯片。因此能够灵活改变功能的FPGA就成为首选。到目前为止FPGA一半以上的应用还是在通信行业。
2.1.1.2
信号处理应用
FPGA在信号处理的应用,可以称为数字信号处理方向或者数学计算方向,因为很大程度上这一方向已经大大超出了信号处理的范畴。例如目前美国市场60%以上的金融交易为高频交易与量化交易,这种交易的核心要求超高速实时处理(低于1ms,因为这意味着交易失败或被人抢单),同时交易策略不适合采用专用芯片或DSP处理分析。又如,现在的FPGA大量应用于医学数据分析和实时数据重建(例如高性能核磁共振)。数字信号处理方向要求FPGA设计者有一定的数学功底,能够理解并改进较为复杂的数学算法,并利用FPGA内部的各种资源使之变为实际的运算电路。
目前利用FPGA进行数学计算,主要在通信领域的无线信号处理、信道编解码以及图像信号处理等领域,其它领域的研究正在开展中,之所以没有大量实用的主要原因还是因为学金融的、学医学的对FPGA了解较少。不过最近欧美有很多电子工程、计算机类的博士转入到金融行业,开展金融信号处理,相信随着转入的人增加,FPGA在其它领域的数学计算功能会更好的发挥出来。在国内,金融与医学领域的FPGA应用相对较少,目前的成功案例包括:(1)国内少数几家大型基金公司采用FPGA进行量化基金的高频交易;(2)国内的比特币挖矿机产业。目前已经有开源FPGA代码公布,而且北京的多个小团队将挖矿算法转换为并行ASIC实现,从而实现了个人财务自由。
另外,利用FPGA进行数学计算在互联网公司也有较多的成功案例,例如国内的BAT三巨头采购了大量的FPGA进行在线实时处理,保证海量用户冲击访问某些数据时,不会造成服务器(云设备)崩溃。现在的深度学习、大数据处理已经无法离开FPGA的支持。例如2014年的HotChips年会,一个核心议题就是如何发挥FPGA在互联网应用的潜能。而在国外,Facebook利用FPGA开发人工智能与人脸识别,Google利用FPGA进行的搜索数据分析。所以,移动互联网时代的后台数据处理更多的需要FPGA,而不是传统的CPU或者GPU。
2.1.1.3
嵌入式处理方向
FPGA应用处理的第三个方向就是SOPC方向,在严格意义上讲,该方向已经在FPGA设计的范畴之外,只不过是利用FPGA这个平台搭建的一个嵌入式系统的底层硬件环境,然后设计者在上面进行嵌入式软件开发而已。目前Altera的NIOS,Xilinx的MicroBlaze以及现在的内嵌ARM Cortex-A9的Zynq系列均属于该方向。但如果涉及到需要在FPGA做专门的算法加速,实际上需要用到第二个方向的知识;而如果需要设计专用的接口电路,则需要用到第一个方向的知识。目前的SOPC方向发展其实远不如第一和第二个方向,其主要原因是因为SOPC以FPGA为主,或者是在FPGA内部的资源实现一个“软”的处理器,或者是在FPGA内部嵌入一个处理器核。但大多数的嵌入式设计却是以软件为核心,以现有的硬件发展情况来看,多数情况下的接口都已经标准化,并不需要那么大的FPGA逻辑资源去设计太过复杂的接口。而且目前的SOPC相关开发工具不是很完善,而以ARM为代表的各类嵌入式处理器开发工具却早已深入人心,大多数以ARM为核心的SOC芯片提供了大多数标准的接口,大量成系列的单片机/嵌入式处理器提供了相关行业所需要的硬件加速电路,需要专门定制硬件场合确实很少。通常是在一些特种行业才会在这方面有非常迫切的需求。即使目前Xilinx将ARM的硬核加入到FPGA里面,相信目前的情况不会有太大改观,不要忘了很多老掉牙的8位单片机还在嵌入式领域混呢,嵌入式主要不是靠硬件的差异而更多的是靠软件的差异来体现价值的。
|