原创 FPGA到底能做什么

2010-6-29 21:20 9302 7 19 分类: FPGA/CPLD

FPGA到底能做什么


         初学者爱问这个问题,我的新书中会告诉你:逻辑粘合是FPGA早期的任务,实时控制让FPGA变得有用武之地,FPGA实现的各种协议灵活度很高,信号处理让FPGA越来越高端,片上系统让FPGA取代一切……


         但是,这几天的特权很纠结,一直在问自己“FPGA到底能做什么”。事情源于马上要启动的DVR项目,视频搞定了,也显示了,下一步要存储,传输带宽和存储容量放出话来了“必须要压缩”。那么,图片要JPEG,视频要H.264。各种方案虽然只是初步的了解一些,但是发现这方面虽然有类似SOPC概念的海思和TI双核解决方案,而且是专门干这个的,不过发现这玩意是有门槛的,用我们经理的一句话是“一般人搞不定”,成本不仅仅是money的问题,还有工程师熟悉一个新的高复杂度的开发环境的时间和精力投入。那么退而求其次,貌似一个DSP也很难搞定,市场上常见的是DSP+FPGA,或者也有一些专用的ASIC能够胜任诸如H.264的编码,不过看看芯片价格只能用“死贵死贵”来形容了。


         折衷下来,上午我还寻思着就再来一个DSP吧,也看好了ADIblackfin,准备下一步慢慢筹备我的DSP之旅。但是,也许这几天一直萦绕在我脑子里的问题越发强烈起来“FPGA到底能做什么”。很显然,如果要在通用控制器或处理器和FPGA之间做一些比较,特权会很快的送上图1和图2(图3)。


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


201a63e0-07ad-4736-963b-edb476aa3eda.jpg


1 基于控制器或处理器的一般处理流程



0273c22e-01c1-448e-89a8-76d3d882aea7.jpg


2 基于FPGA的并行处理流程




95d3fef8-956f-435e-b82a-70a02d779340.jpg


3 基于FPGA的流水线处理流程


         很显然,图1中的一般控制器或处理器由于软件固有的顺序特性,决定了它的工作必须是按部就班,一个输出的4个步骤完成才能接着开始下一个输出的4个步骤,那么它完成4个输出就需要20个步骤单位时间(假定输出也算一个步骤,一个输出需要5个步骤)。虽然现在很多的DSP中也带有功能强大的硬件加速引擎,如简单搬运数据的DMA等,但是它所做的工作量,或者说和软件并行执行的工作量其实是很局限的,这里说的局限是指他的灵活性上很差,协调性不够好也会让处理速度大打折扣。


         而反观图2和图3FPGA处理,先说图2,并行处理方式很好很强大,是前面的软件处理速度的4倍。并行是FPGA最大的优势,只不过需要用大量的资源来换速度,通俗的说就是要用大量的money换性能,我想这并不是人人都能够承受的解决方案。而看图4,是一个不错的折衷方案,流水线处理是FPGA乃至整个信号处理领域最经典的一种方法。能够在基本不消减处理速度的前提下只用了并行处理方法的1/4资源就完成任务了。


         那么话题回到JPEGH.264的压缩上来,其实FPGA足以胜任,网络上一搜一箩筐这样的解决方案。其实退一万步来讲,算法再复杂,实时性要求再高,FPGA都是足以胜任的,尤其是采用流水线方法,也许第一个数据输出的时间需要很长(一般系统是许可的),但是这并不妨碍后续数据的实时输出。我想,这就是成本(器件资源)和性能最好的折衷办法。


         那么,这些复杂的算法中无外乎存储和运算。实时处理中的存储其实很大程度上是要依赖器件的片内存储器资源的,外扩的存储器无论从复杂度和速度上都会只会减低处理性能。加减乘除好办,内嵌的乘法器或是各种各样专用的DSP处理单元就能搞定;但是开方求幂等比较无奈的运算就只能靠查表来解决了。


         如此这般下来,其实FPGA就是要干这个的——算法,越是大家搞不定的问题我FPGA统统不在话下。话说到这,发现不对劲,有人要拍砖了。其实真没有FPGA干不了的活,但是有FPGA不适合干的活,个人认为那些顺序性很强的活,比如文件系统那种很折腾的活,就算简单的SD卡文件系统的管理也是要不停的折腾,数据这里读那里写的,FPGA代码就很难写,一个偌大的状态机也许能够解决问题,但是很容易让设计者深陷其中晕头转向。


 


 

文章评论12条评论)

登录后参与讨论

用户1637227 2016-3-14 08:50

倒数第4段,编写错误,应该是图3,不是图4。。

用户313189 2011-3-6 23:48

设计出一款倒车辅助装置,帮助开车人停车入库。目前市面上的同类产品大部分采用超声测距技术,分辨率差,响应速度慢,希望通过采用无线电波的方式改善这些不足,详细要求如下: 1、采用2.4GHz无线电波收发模块; 2、2个检测通道; 3、测量精度10厘米;响应速度0.5秒 4、LCD屏显示; 5、核心电路采用FPGA/CPLD和其他专用集成电路设计。 ------------------------------ 请问能指点一下怎么设计吗?

ilove314_323192455 2011-1-17 13:02

呵呵,谢谢,目前这个方向没有继续做下去

用户424825 2011-1-14 23:20

用FPGA做JPEG的话 opencores 上面似乎有开源的RTL,不过纯粹用FPGA做264不辅以CPU的确有难度,光是码流协议就比较麻烦了。用DSP的话,可以考虑X264开源代码的裁剪,数据结构在片内存储器的规划挺重要的,执行密度较高的算法的汇编级优化也挺重要,newsmth.net 有一个videocoding版面专门有人讨论DSP的264优化。另外还有一条路比较方便,如果不要求必须自主知识产权,可以用三星的S3C6410,ARM CortexA8+264硬核目前友善之臂的开发板能做到¥1000以内。愿主赐福给你特权同学,向那标杆直跑,荣耀神的名

用户575829 2010-12-6 16:19

学习!

用户273345 2010-8-31 11:07

怎么这里回复的时候,不排版的!

用户273345 2010-8-31 11:06

timescale 1ns / 1ps //////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: // Design Name: // Module Name: // Project Name: // Target Device: // Tool versi**: // Description: // // Dependencies: // // Revision: // Revision 0.01 - File Created // Additional Comments: // //////////////////////////////////////////////////////////////////////////////// module fm_ctrl( clk,rst_n,fm ); input clk; //25MHz input rst_n; //低电平复位信号 output fm; //分频信号,连接到蜂鸣器,0--发声 //--------------------------------------------------- reg[19:0] cnt; //分频计数器 always @ (posedge clk or negedge rst_n) //异步复位 if(!rst_n) cnt <= 20'd0; else cnt <= cnt+1'b1; //寄存器cnt 40ms循环计数 //---------------------------------------------------- reg clk_div_r; //clk_div信号值寄存器 always @ (posedge clk or negedge rst_n) if(!rst_n) clk_div_r <= 1'b0; else if(cnt == 20'hfffff) clk_div_r <= ~clk_div_r; //每40ms让clk_div_r值翻转一次 assign fm = clk_div_r; endmodule 以上特权同学《深入浅出玩转FPGA》书中的一个实验例程! 看完之后发现寄存器cnt 的赋值一直很奇怪! 比如第一个always里出现 if(!rst_n) cnt <= 20'd0; else cnt <= cnt+1'b1; //寄存器cnt 40ms循环计数 这样的语句,cnt赋值是20位的十进制数 else里面加的时候又是1位的二进制数 第二always里面又出现 else if(cnt == 20'hfffff) 这样的语句,cnt判断是否是20位的十六进制数!!而且一直不明白后面 20'hfffff这是多少?

ilove314_323192455 2010-7-28 19:30

只要知道是先执行的先出来就行,只是个示意图,可能有点歧义

nneverli_217963090 2010-7-28 13:13

最后一个图应该是DCBA不是ABCD吧

用户1353244 2010-7-8 11:11

学习了!
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
12
7
关闭 站长推荐上一条 /2 下一条