打印

开贴,讲哪些人适合做FPGA

[复制链接]
楼主: drentsi
手机看帖
扫描二维码
随时随地手机跟帖
61
nir| | 2010-4-20 09:23 | 只看该作者 回帖奖励 |倒序浏览
本帖最后由 nir 于 2010-4-20 09:38 编辑
LZ太高看FPGA了,学FPGA和学单片机软件没什么区别。
FPGA写的是VHDL但基础是数字电路,而单片机软件玩的是C语言但基础是一样是数电逻辑。LZ研究的不是FPGA,而是逻辑分析。描述语言根本不是重点。
说句实话,先玩单 ...
zjp8683463 发表于 2010-3-19 08:59

本来不想说,看到zjp8683463 的留言,怕误导大家。我来说说自己的看法。我自认为对FPGA有较好的了解。
fgpa的设计输入方法有很多种,可以用VHDL/verilog硬件描述语言,也可以画电路的方法。没听说用C语言写。虽然有很多人一直在开发用类似C写的可以综合,运用在FPGA上的编译器。但目前还是不行。从画电路原理图的方式输入就可以知道,FPGA不是软件人员学的。是硬件人员学的。VHDL/verilog只是一个工具,要实现的是你的思想。你写了几行代码,你在头脑中要综合出这是个什么样的硬件电路。没有很深的硬件基础,数字电路基础。你不可能成为高手。
zjp8683463说的玩单片机的人应该是学硬件的人吧?不是学软件的人。学硬件的有几个不知道C,C是很好的底层编写语言。我感觉zjp8683463搞不清什么人是搞硬件的,什么人是搞软件的。
搞软件的不代表不可以做FPGA,但你要有好的电路基础,深刻的数字电路掌握。再加上点微电子知识。语言只是工具,实现的是你的思想。
脑中有电路,写出的就是电路。我见过太多人写出很多不可综合的电路。有机会我会写本书来说明如何写出可综合的实际的FPGA设计。国内这方面的书太少。
楼主说的做FPGA的至少是研究生,说出来刺耳,实际是事实。因为一个正常的本科毕业生。要深入了解数字电路都要花费大量时间。何谈FPGA。当然很多人也可以写,可以做,实际上是跳过了精通掌握硬件知识的阶段,效果肯定不好。
如果你要做FPGA,王侯将相,宁有种乎,本科和研究生没有绝对的界限。我建议你不要跳过深入掌握硬件知识的阶段。欲速则不达,你会在后面的fpga了解中发现这点。

使用特权

评论回复
62
sleepybear| | 2010-4-20 11:59 | 只看该作者
本帖最后由 sleepybear 于 2010-4-20 12:30 编辑

也许在zjp8683463看来,设计电路、画板子、调板子的是做硬件;而只要敲击键盘,用符号敲出某种语言的文件,经过软件折腾之后生成下载文件的,都是做软件吧。。。那做FPGA的也是做软件了。。。
没有什么绝对的适合不适合的,关键是基础,内功。
说说高级语言设计FPGA。现在的高级语言设计FPGA(C或者MATLAB工具),还不成熟。有人拿“C VS 汇编”来和“高级语言 VS HDL语言“做类比,其实是不恰当的。前者的编译器很成熟了,而且二者终归都是一般的基于寄存器的微机架构。而后者则不然,是两个不同的架构,而相应的编译软件也还远未成熟。举个切身体会的例子:以前用过Xilinx的AccelDSP,可以讲MATLAB写的算法转化成HDL语言(Altera对应的应该是DSP Builder吧?),可是这种转换来的代码,其资源使用(或者说效率)方面远不如用HDL自己写的理想。而且,由于是软件自动生成的,其必然会有很机械的模块划分、事先约定好的端口定义——要想放到自己的设计中,还需要做大量的数据、控制信号的操作(这背后就是硬件资源的消耗,甚至是很痛苦的调整);而一旦生成代码有问题,想要直接修改生成代码,哪怕增加一个小小的控制信号(生成代码是固定的端口,有些时候并不完全符合要求,需要修改),做起来也是非常费劲——而这一切,都需要有扎实的底层功底,做惯了高级语言设计的,是一时难以适应的。不会汇编可以开发单片机;但是不会HDL(不是简单的看基本语法书,弄块板子跑跑例程那么简单),是无法做FPGA设计的(至少目前是如此)。感觉,用HDL设计FPGA,是比汇编还要底层的东西。
算法是很重要的,但是从高级语言的算法,到FPGA实现,还是需要有很多工作要做的,这工作对FPGA设计人员要求一点也不低:首先要理解原算法,搞清楚算法的原理,评估可否实现、实现的难易度以及可能的技术难点、器件的选型、和电路板设计人员(如果是其他人做的话)一同确定板上资源(比如外扩RAM、时钟资源等等)的需求……;其次,要了解目标器件的特点,根据需求设计出一个实现架构——数据如何存储,数据流如何控制,接口和内部数据格式的调整、各个模块之间的接口定义、如何有效利用器件内部资源(比如内嵌的时钟资源、DSP块、BRAM块等等)、是否需要内嵌软核处理器(如需要,软核处理器如何设计)……所有这一切,对设计者的硬件系统设计能力有着很高的要求(说的是对合格的FPGA设计人员的要求,而不是说现在做FPGA的人本身有多强,事实上很多在做的人,包括我,都远没有达到合格的标准,要走的路还很长。),而设计之后写代码反而只是工作量的问题了;即使是工作量的问题,过程中要考虑的因素也是很多的,有时候要精细到某个时钟周期时刻某个比特的状态,或者某一条内部布线……有些算法,在软件看来很容易,可能在FPGA上实现的工作量就非常大,甚至是无法实现的。。FPGA设计绝对不是“写代码——编译——下载”那么简单的(当然,写个计数器、做个跑马灯什么的,可以很简单)。。。

使用特权

评论回复
63
zjp8683463| | 2010-4-20 14:48 | 只看该作者
本帖最后由 zjp8683463 于 2010-4-20 14:58 编辑

sleepybear说的其实是知识传递的问题。这个问题不是fpga独有,所有语言都一样有这个问题。单片机也要把逻辑算法变成C,这个也要一定的理解能力和知识水平。
dsp之类的C和fpga的HDL硬件描述语言在语言结构上不同,其实目的是一样的---把逻辑变成语言,无非是一个遵循C规则,一个遵循HDL规则。而硬件电路是把逻辑或语言变成电路原理。
fpga和其他可编程器件都一个顺序 知识传递---逻辑转语言----写代码——编译——下载。而前面2个才是最难的。

使用特权

评论回复
64
zjp8683463| | 2010-4-20 14:55 | 只看该作者
本帖最后由 zjp8683463 于 2010-4-20 15:49 编辑

回复62楼。
你没明白的意思,我说的单片机并不是硬件,而是基于C语言的可编程芯片,只是单片机更具代表性。逻辑不等于电路,不然还要硬件工程师干什么。你可能对fpga用的很多,但我觉得你对硬件电路了解太少。
我也不是说用C来写fpga,我是说逻辑是一样的,只不过语言不同罢了。就像中文和英文来表达“苹果”,难道苹果会变成梨?
fpga画的是电路?fpga画的是逻辑图,你看谁用protel画过这样的电路?你只知道逻辑的符号,你画个非门的电路给我看看。
你那一堆逻辑符号叫电路?麻烦你先搞清楚“面包板”与fpga的区别。

使用特权

评论回复
65
sleepybear| | 2010-4-20 18:38 | 只看该作者
本帖最后由 sleepybear 于 2010-4-20 19:23 编辑

那你理解的电路是什么?非得是一堆看得见摸得着的有源、无源器件堆在PCB或者面包板上,用铜线连在一起的才叫电路?
说说我的理解:一切电流流动的路径都叫电路。至于说这个路径上经过的是R/L/C/接插件这些无源器件,还是电路板上的芯片,或是芯片内部,其实都是一样的。什么VCC、GND,都不重要,无非都是电流流动的路径而已。而FPGA设计者所谓的“电路”,其实就是在芯片内部的。
同样是“程序”,但是单片机的“程序”跟FPGA的“程序”是不一样的。前者是基于一定的处理器架构(不管8为的还是32位的),程序是基于已有的架构(给你多少个寄存器,给你什么总线)的。而后者其实都是硬件电路(区别是在芯片内部,而非电路板上),如果你足够NB(或者说足够闲的蛋疼),完全用原理图输入也是可以的,可以没有“程序”什么事。(所谓的“硬件描述语言”,最初是用于仿真的,但是现在用于FPGA设计,其核心还是“硬件”,而“语言”只是载体,用于简化设计的载体——足够牛或者足够闲,且不考虑移植性等等,是可以完全用原理图的,而原理图的设计就是典型的电路设计方法,“描述”只是过程。)前者可以抛开“程序”吗?我才疏学浅,不知道,你给我答案吧,嘿嘿。

使用特权

评论回复
66
sleepybear| | 2010-4-20 18:52 | 只看该作者
本帖最后由 sleepybear 于 2010-4-20 19:02 编辑

举个可能不太恰当,但是还算形象的例子:处理器和FPGA都是大房子(现在房地产话题很热门),每个房子都有一些参数:比如房子外观多大,里边分几层,在哪里放楼梯,哪里放电梯,各层又分别有几个房间,每个房间多大,什么地方开个门,什么地方开个窗户……可能从外观上看,两座房子差不多,可是内部是不一样的:
处理器这座房子内部很多参数是定了的:分几层,每层多高,每层几个房间,每个房间多大,那些房间之间有门,哪里有窗户……这些给住户(芯片的用户)时就已经定了,用户可以在这已有的架构上决定每间房间的用途(做餐厅还是做卧室或者做卫生间……),而用户可以通过合理安排这些用途,来达到效率的最大化(如果是居住,那就是居住的舒适度最高;如果是办公,那就是办公效率最高;如果做厂房,那就是生产效率最高……),但是依然要遵循一些规则,受限于已有的架构(比如给你定的楼梯在什么地方,你不能随便改动)。
而FPGA这座房子,只是给了用户一个大壳子和基本的建筑材料。至于这个壳子里边分几层,每层多高,什么地方装楼梯,什么地方装电梯,每层分几个房间,每个房间做什么用,哪里开个门,哪里开个窗户……统统都交给用户自己去决定。当然,也是由一定限制的:给定的空间和建筑材料(基本的slice或者LE资源,布线资源以及其他嵌入模块)是有数的,不能超过。如果高兴,用户把这个大壳子做成一个只有一个坑位的卫生间也是可以的。。。。
前者的住户是不需要考虑建筑本身的问题的,因为都已经给你定了,住户只需考虑如何使用现有资源来高校的完成任务(管住不管盖)。而后者则还需要考虑建筑本身的问题,除了考虑住,还要考虑一部分的盖。

使用特权

评论回复
67
zjp8683463| | 2010-4-20 20:16 | 只看该作者
本帖最后由 zjp8683463 于 2010-4-20 20:38 编辑

fpga是把你的程序变成路电路,最后变成一个硬件芯片.但电路是怎么变的根本和你没关系,如果你把这个也算成电路设计,那么当我什么都没说.
我理解的电路设计就是fpga把程序变成硬件的那部分.刚好那部分和你没关系.你在fpga里面写句话就是一个非门,你知道非门到底是怎么构成的吗?你用面包板搭个和fpga一样功能的逻辑电路来试试(只要10几个门就行了).
按你说的造房子的例子,其实fpga就是设计院,MCU是开放商.真正造房子的是城建商,是我们的农民工.最后房子好不好,关键还是看农民工和建筑工程师.就像南京的那座桥一样,设计被评为优秀奖,几个月就开裂了.
打个不恰当的例子,现在所谓fpga硬件设计就是在一个电路上拨几个开关.然后,就说这个东西是我设计的.当然拨开关也是一门学问

使用特权

评论回复
68
sleepybear| | 2010-4-20 20:48 | 只看该作者
本帖最后由 sleepybear 于 2010-4-20 21:35 编辑

这一点恰恰是理解的分歧所在。在做FPGA设计时,工程师对生成的目标电路是应该胸中有数的:我写的代码,哪些可以变成电路(可综合),哪些不能变成电路(不可综合);变成什么样的电路,不同的电路之间连接关系是怎样的,这些都是要心中有数的。如果只管写代码,把一切都交给软件,那是做不好FPGA设计的。从代码到电路的转换,这确实是需要借助软件来做的,但是目标电路是什么样子,是在写代码之前就要清楚的。就好比学建筑的和土木工程的都不会去亲自搬砖和泥砌墙,可他们在房子还没盖起来之前就对房子盖起来之后的样子有数了,你说他们是做什么的?
举个简单的例子:
假如我要做一个I2S接口的音频接口,传输两声道数字音频。如果用MCU,这个MCU需要需要有片上的I2S接口(固定的给你的),用户操作一般来说是基于寄存器的:有状态寄存器、控制寄存器和数据寄存器(又细分为发送和接收,分别有一套。我是以我以前做过的一款DSP为例,具体到某一款MCU可能略有不同,但大同小异),用户软件需要做的就是对这些寄存器进行操作:什么时候查询状态寄存器、什么时候写控制寄存器、什么时候读写数据寄存器……可以扔到while()里做成轮询的;也可以做成中断的;如果是带操作系统的,又有其他方式。至于这个I2S接口底层的串并转换(其实就是个串并转换),那是硬件来做的,用户是不需要知道的(就好比给你房子住,你决定不了房子的一些参数)。用户只需要写好代码,交给编译器来生成二进制文件,烧进去运行就是了。
而FPGA要是做这个I2S接口,就需要关心MCU用户不必关心的底层硬件了,而实现方式也是多种多样的:我可以纯用逻辑来做,以发送为例(接收相反):就是一个并转串的移位寄存器,将并行数据转化成串行数据输出,并配上相应的左右声道指示信号lrck和时钟信号sclk。那我硬件上就以lrck信号切换(也就是左右声道切换)作为起始,将并行数据load进去,之后每周期做一个移位,输出一位串行数据,和相应的lrck稍作相位调整之后输出……在写代码之前,我这个模块用几个寄存器、大体是什么结构,心中已经有数了。而这只是一个实现思路,结合具体器件,我又有了不同的实现思路:这样的串并转换,消耗寄存器挺多的,而如果我做多路I2S的话,那就更多了。咦,我的器件里有富余内嵌DSP块,里边有很多不用白不用的寄存器,能不能做点**呢?所谓的并转串无非就相当于移位嘛,乘2就是了,那么我可以用DSP块来做,对相关数据做乘2运算,以实现移位,而又利用了DSP块内部的寄存器,节省了slice中的寄存器,本来用几十个寄存器的,这下只是输出端口上打那么一下用了一个……这又是一个思路。细想下去,还有其他的思路……而不管用什么思路来实现,用FPGA来做,一定是脑子里已经对目标硬件有了概念了才去写代码的。当然,你非要说:你的寄存器在什么地方,用了FPGA里的哪根连线资源……这些的确是交给软件来做的,但是理论上手工不是不能做,而有时候也确实有人为的干预:比如我用DSP来做,可芯片里那么多DSP块,具体用哪个?交给软件来分配,可能会带来时序问题,那么我就加约束,指定用某个DSP块。而如果布线结果总有时序不满足要求的,反过来工程师还需要通过加约束,甚至是修改代码(比如将延时分段)来加以修改,其实本质上跟用protel画电路板没什么区别,只是一个是在电路板上;而另一个是在FPGA内部,且一部分交给了软件,但软件输出的结果(不是指具体用了哪个LUT或者哪根连线)是要胸中有数的。而MCU用户用I2S接口,是不需要知道他用的I2S接口是移位实现的还是乘2实现的。
当然,因为I2S接口的速度很低(sclk也只有3.072MHz),用MCU的话,也可以用IO来模拟(无非都是变变化的高低电平嘛);而用FPGA的话,那并行数据从何而来,又是涉及到系统构架的问题。这些都不是讨论的重点。

使用特权

评论回复
69
drentsi|  楼主 | 2010-4-20 21:13 | 只看该作者
楼上应该对FPGA有深入了解了。
这个帖子的战火是我挑起来的,互相讨论才有进步嘛。
真正讨论FPGA具体的构建,确又非常简单,FPGA是由大量的基本单元组成,
实际上,盗版FPGA芯片比盗版单片机还要容易。
做FPGA,真正的核心不是FPGA芯片,而是FPGA上跑的逻辑,这些逻辑大多数是可以移植到ASIC领域的。
所以,用FPGA可以做单片机,51,AVR,ARM等,但反过来不行。
打个比方,FPGA就像屠龙刀,耍得好当盟主,否则只能用来劈柴。

使用特权

评论回复
70
liuchao114| | 2010-4-21 09:04 | 只看该作者
对楼主说的深度怀疑,s3上能跑200M,除非是逻辑非常简单,至于v5没有必要在内部跑到600M,估计它也跑不到那快,用serdes就行了,各位TX对FPGA也不要太抬举了,它也就是一门手艺而已,跟学历其实关系不大

使用特权

评论回复
71
zjp8683463| | 2010-4-21 10:48 | 只看该作者
本帖最后由 zjp8683463 于 2010-4-21 10:53 编辑

MCU如果是算法级,那么fpga只是到了门级,但还没到电路级。算法级过度到门级毕竟都是逻辑组合问题。从电路级到门级或门级到电路级,是从电路原理到逻辑组合,跨度更大点。

使用特权

评论回复
72
sleepybear| | 2010-4-21 11:48 | 只看该作者
你太学术派了。。。非要这么抠,那玩面包板就更算不上“电路”了,搭积木而已……
而事实上,按照我之前对电路的理解(电流流动的路径),其实这些都是电路,只不过观察的层次和尺度不同而已。。。
仁兄你到底有没有实际做过FPGA开发?俺虽才疏学浅,没做过单片机,但起码接触过一款DSP,ARM什么的虽然没实际做过,但是当初实验室组里有人在做,每周例会也有交流;而FPGA设计也是一直在做,对两方的设计方式和使用体验上的区别,还是有点感受的……

使用特权

评论回复
73
drentsi|  楼主 | 2010-4-21 12:15 | 只看该作者
70楼的,
spartan-3-5000,资源占用89%,跑200M有什么问题吗?
V5逻辑跑600M是我们一直在用的,V5实际上是可以跑700M的
serdes跑3G,6G,也在用。

对于极限性能的测试,我们自己设计了最优代表性的异步fifo,深度16~128,宽度可配置,不用BRAM,
spartan-3A,报告最高速度在416MHz,这个没测试,低成本方案,速度控制在200MHz以内足够。
V4-636MHz,已测试500MHz
V5-770MHz,已测试700MHz
V6-1007MHz,没芯片测试

使用特权

评论回复
74
钻研的鱼| | 2010-4-21 12:37 | 只看该作者
嗯,比较厉害。spartan3跑200M,说明逻辑设计非常优秀

使用特权

评论回复
75
liuchao114| | 2010-4-21 12:58 | 只看该作者
回73楼,资源用89%不能说明你的200M时钟这一部分的逻辑复杂,对于厂商提供的最大时钟能力我一直有点怀疑,如果你能让一个复杂的状态机跑到700M说明你不光是代码写的好,对芯片的资源分配也比较有心得,能不能把你的设计的par结果给我瞻仰一下,如果真的能跑这么快对我以后的设计也有重要参考作用,谢谢

使用特权

评论回复
76
jiamingz| | 2010-4-21 13:05 | 只看该作者
我们公司FPGA组的都是本科生,没感觉有什么不行,一样做产品。应该是说需要掌握数电模电等技术才对吧?

使用特权

评论回复
77
liuchao114| | 2010-4-21 19:53 | 只看该作者
继续回73楼,如果觉得布线结果涉及你们公司机密的话,大概说说你的设计里面时钟的fanout和对底层资源规划使用了那些工具或者约束手段也行:)否则我真的很难想象s3也能跑到4百多M,另外为什么你们公司只用fifo来测试芯片的性能,是做ASIC的FPGA验证吗,别怪我问题多,只是好奇心比较强,嘿嘿

使用特权

评论回复
78
beachprint| | 2010-4-21 23:23 | 只看该作者
我现在还不是很清楚FPGA到底可以干什么,总是一个狭隘的概念。FPGA有强势的逻辑功能。当然我们大多都是用的,不是设计FPGA芯片,可以看做工具。但是每个工具都有自己的优势 ,像逻辑功能,嵌入式内核(如nios),dsp算法,还是有不太同的方面。 可是,像通信,视频,信号处理等,有一定的优势,但是dsp也有一定的优势,可是,以后会怎么样,还是不太了解啊,  但是FPGA还是很热的

使用特权

评论回复
79
patrick007| | 2010-4-22 01:19 | 只看该作者
没发现在“全定制 专用 高性能” 和 “全可编程 通用 普通性能” 之间有很多类型的器件么。

数字系统中已有的全定制电路,基于cell的,基于处理器的,和正在崛起的可编程器件 以后会更加融合,界限更加模糊。
在这几个山头之间,还有一些模糊地带,也有一些器件,不过规模都不大

目前在做的提高性能,降低功耗,减少和竞争目标之间的鸿沟,同时通过自身的设计灵活性来吸引客户。
我估计这个鸿沟很难完全填满,各方只能是尽量扬长避短。而且硅的性能也快到头了。
以后会有新的材料,新的工艺。

不过“全定制 专用 高性能” 和 “全可编程 通用 普通性能” 这个理念上的竞争,恐怕还会继续下去。

使用特权

评论回复
80
fpga-dsp-arm| | 2010-4-22 11:04 | 只看该作者
凡事无绝对,术业有专攻。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则