原创 【博客大赛】【原创】我对FPGA的理解

2012-3-19 09:02 1424 8 10 分类: FPGA/CPLD

    本人所在工作组主要跟FPGA平台打交道,但是某天突然被一个software的同事问道,FPGA是做什么的?可以跑操作系统吗?我楞了一下,一两句话不能表述清楚,就回答说,大概就像一堆74芯片的集合体吧,有反相器、与或非、触发器等等,我们写代码其实是在给这些东西连线,要跑操作系统就得连出一个CPU来。

    总有人纠结于C和Verilog的比较,其实这两者根本就不同。C写的是指令,最后被编译成二进制码交由CPU译码执行;Verilog是一种描述语言,写Verilog代码其实是在设计电路,只不过这个电路是在FPGA芯片内部实现的。所以,Verilog(或者VHDL)的“程序员”其实是硬件工程师。

    我个人喜欢将FPGA design类比于数字电路板的设计,verilog代码编写相当于原理图设计(早期的FPGA设计的确使用原理图方法),只不过这里的元件不是芯片和电阻电容了,而是触发器、与非门、反相器等逻辑器件(其实是LUT,这里只是类比),我们写verilog描述它们的互连关系并进行编译,相当于原理图打包输出,最后适配、布局布线相当于PCB Layout,只不过这些都由EDA软件(Quartus或者ISE)帮我们自动完成了。正因为后面这些事情都由智能的EDA软件帮我们做了,FPGA工程师才看起来像程序员一样。其实呢,FPGA design的难点在于如何优化你的设计,就像PCB一样,要考虑布局、信号走向、延时等长等问题,同样的功能同样的面积(或者资源),人家设计出来跑200M,你的跑50M,孰优孰劣昭然可见。

    在学校的时候,实验室的项目比较杂,单片机、DSP、FPGA都在用,有低年级的同学在接手一个项目或者面对一个竞赛题目的时候,并不是很清楚应该采用什么方案。我做了一个可能不太合适的比喻,从河里汲水。CPU(或者DSP)就像一个人,FPGA就像一堆材料,对于CPU,你只需要写张圣旨(C命令),告诉他去打水,他读了你的指令,自己拿着水桶(外设)就去干活了;而对于FPGA就麻烦了,你得想想怎么用一堆材料来取水呢?对了,造一架水车!你脑子里得有水车的架构,然后你将它画成工程图(verilog代码)交给一帮工人(EDA软件),他们帮你造好这架水车,一开动,水就源源不断地送上来了。这里可以看到,对于取水这种重复连续性的工作,水车的效率显然是高过人的,但如果在取水的过程中你又突然想捉个螃蟹采个莲藕什么的怎么办呢?给人下指令是很简单的,你只要描述清楚你的意图,让他在打水的时候如果发现螃蟹就捉住,看到莲藕就采回来;而对于已经造好的水车,它只能表示无能为力。你这时候想,能不能造一个既能打水又能捉螃蟹又能采莲藕的机器呢?这几乎是一个不可能完成的任务,除非你能用这堆材料造出一个人来(例如Altera的NIOS II)!

    简单地说,不包含CPU的FPGA设计是“非智能”的,拿它来干些“重活”比较合适,比如数据采集、并行处理;而CPU适合于多任务的、可能随时被中断的工作,比如人机对话。写过单片机又写过FPGA的同学都有体会,在C里面很简单的一些动作拿Verilog来实现可以让你挠破头皮,比如去配置某个IC的寄存器,一会儿要reset了,一会儿又要延时多久了,纯逻辑来实现就比C代码要复杂得多。

    以前看过一篇文章,把FPGA的应用分成了三大方向,一是高速I/O,二是SOC,三是DSP。个人表示赞同。IC企业用FPGA做原型验证,模拟部分分割出来,数字部分的代码改改就放进FPGA了。某些领域由于协议变化太快,研发ASIC不划算,干脆就直接用FPGA来做,比如通信设备公司,等到协议更新了,代码也更新再烧一遍就OK了,螺丝都不用拧一个。还有一些时效性的应用,比如我们的奥运会开幕式,据说用了几千片FPGA吧,向那些硬件工程师致敬!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户213742 2012-3-20 21:46

多谢关注!借博客平台与大家分享和交流,也是很好的自我总结,呵呵。

用户403664 2012-3-19 09:03

帮你修改一下参加博客大赛哇!
相关推荐阅读
用户213742 2012-03-12 08:40
【博客大赛】【原创】跨时钟域的信号传递
同频异相传递: 一种简单的解决办法是用两级寄存器pipe一下,第二级寄存器的输出Q基本上不会有亚稳态,但是这种办法并不能保证最后的输出结果一定是正确的,因为第一级可能发生亚稳态而产生了一个错误...
用户213742 2012-03-12 08:40
【博客大赛】【原创】Cyclone-II驱动2.4寸TFT液晶显示彩条
网上买来的21EDA的CycloneII开发板,拿到手的第一件事就是兴致勃勃地驱动TFT,哎,老本行,虽然现在的工作已经跟显示技术无关了,但是兴趣还在的。 本以为驱动接口是RGB的,结果...
我要评论
2
8
关闭 站长推荐上一条 /3 下一条