说下本人情况先,我是做PCBLayout的,接触FPGA的机会不多。现在公司内正在研发高清相机的项目,因此Zing开发板很具有参考价值。有幸评选上后,心情很鸡冻,在这里衷心祝愿电子发烧友越办越好、科通集团生意越来越红火。
! }+ N% `+ U' o: M1 X! S) @4 w 4月7日,在期待科通公司电话中,不知不觉开发板就送到了,够爽快。大家这一段时间对开发板试用活动的关注,应该对Zing开发板强大的硬件(HW) 和软件(SW)开发功能有了一定的了解,我就不再多说了。正如JY-Wang贴中所述,共有开发板一块、数据线一根、6V-3A开关电源一个。板子很强大,再加上FMC模块,就如虎添翼了,随后询问了红色飓风选配模块的情况,售价不菲,暂且考虑其它办法,呵呵。
! p2 Q5 y% G. U5 X( f5 N 4月8日,对Zing开发板的开发硬件手册及实验教程大致看了下。我以前是以PCB Layout为主,ISE软件安装后也打开的次数不多,对FPGA的了解还不够深入。
* ]6 N$ X1 _5 H( E1 {
" o% e0 d% w! b9 y- ^ 此帖主题为“FPGA设计的那些事儿”,如果你是刚入门者,那你来对了,下面的内容可以让你在FPGA设计的茫茫大海中找到扬帆的方向。如果你是大师级,就请您直接跳到倒数第二段,给些意见。小生在此谢过。
1 D# a) P# D# A2 c
我曾收集了多位资深FPGA工程师的FPGA应用心得,我进行了总结,以下是各位前辈经过风风雨雨,留下的印记。
9 ~/ `5 `/ p G+ f+ {
前 言
, G& s+ h _1 e) c
先说一点最重要的:掌握FPGA可以找到一份很好的工作。^_^
3 K; Q- \/ R+ V: G 一个时期,确定一个主题,确立的主题,搞通了,就再下一个。
% s. p* i) v4 x" l h
要从基础开始做,基础牢,才有成为高手的可能。
/ Q3 y: l8 n3 O8 |; q$ G4 i FPGA用的是硬件语言,不要把verilog和c语言等同起来,是根本不同的东西,没有可比性。
6 g( g* z0 B* G7 J: K# W
一个软件,学习3个月,可以入手搞些小东西,但是3年之后,进步就慢了。. B5 Y& M4 \/ e+ T {3 P+ c
一种硬件,学习3个月,可能什么都不会,但是3年之后,就是日进千里。
* t& ` r, r" P: {# q' F; v" V正 文
6 [, ^- F6 V+ t1 |& Q2 x
学习步骤:
! T9 c- E, |+ y) d7 w$ y- r. t
第一步:了解FPGA结构,FPGA到底是什么东西,只有了解了FPGA内部的结构才能明白为什么写HDL。
1 Q \ p% Z: W& B1 _, V' Q& H6 P
第二步:掌握FPGA设计的流程。了解每一步在做什么,为什么要那么做。了解了设计流程才有可能知道怎么提高速度,减少资源,怎么去优化设计。
8 v; i! f _% g- V4 c4 l- } 第三步:开始学习代码。建议去Altera或Xilinx的网站上下原厂工程师的代码学习。
$ H# \% k6 l# {. w
学习代码步骤:
* t: m9 B! m6 j% g ^ 1.软硬件的准备,软件选quartusII或者ISE ,硬件需要下载器、目标板,虽然没有下载器和目标板通过仿真也可学习fpga,但那总是纸上谈兵。有了目标板仿真同样很重要,不要写完程序就去往FPGA中去加载。
8 `/ B( |; C. y, L; U5 U3 ]/ S+ N
2. 熟悉verilog语言或者vhdl语言,熟练使用quartusII或者ISE软件。
. n% @, y1 M& s# ]3 Z
3. 设计一个最简答的程序,譬如点灯,下载到目标板看看结果。
4 P7 t6 X7 i, V1 Q0 E. T3 i
4. 设计稍微复杂的代码,如UART程序,下载到目标板看看结果。
! H3 {/ J, p' J$ A; ] 5、设计复杂的代码,如sdram的程序,下载到目标板看看结果。
! z( n6 e" s6 `1 i
6、设计高速接口,譬如ddr2或者高速串行接口。
! y4 d) w3 O" u+ W. W9 l
7、设计一个复杂的协议,譬如USB、PCIexpress、图像编解码等。
# m6 K5 w& h6 G, j- a; z$ d3 |1 J1 o 8、学习再学习,学到老,活到老。
: d* O6 M- g& l
第四步:template很重要。能不能高效利用FPGA资源,一是了解fpga结构,二是了解欲实现的逻辑功能和基本机构,三是使用正确的模板。
' z0 H: N$ c6 `: ]% W
. b" a9 W) V# j5 x9 ^1 z% Z [
古语有云“学而不思则罔 思而不学则殆”,以做逻辑为例,并不是一上来就开始写代码,而是要先写总体设计方案和逻辑详细设计方案,要等这些方案评审通过,认为可行了,才能进行编码,一般来说这部分工作所占的时间要远大于编码的时间。
6 N- N' Z( \: z# G0 d/ q/ T 时序很重要,时序是设计出来的,不是仿出来的,更不是湊出来的。不懂得时序的设计,会因一处的信号时序不满足,而不得不将其它模块信号的时序也改一下。
; a7 M! c" I4 i. s 仿真很重要,上面提到仿真的重要性,这里再唐僧下,在国外,花在仿真验证上的时间和人力大概是花在RTL级代码上的两倍,现在仿真验证才是百万门级芯片设计的关键路径。但国内的一些知名公司做FPGA的设计时是不做时序仿真的,因为做时序仿真很花时间,且效果也不见得比看静态时序分析报告好。
9 P5 c2 Q3 O5 V% e
仿真验证的难点在于怎么建模才能完全和准确地去验证设计的正确性(主要是提高代码覆盖),仿真验证中最基本就是要做到验证的自动化。
' g6 y2 Z2 L1 Q: ?5 Q
数字电路在时钟同步的设计原则下,通过simulation就可以验证。simulation的结果和PAR后产生的FPGA-image等价,寄存器之间的path必须在一个时钟周期内完成。同时要满足FPGA器件的setup和hold要求。一旦出现timing-error必须通过各种途径消除error,因为error的存在,意味着时钟同步的大前提已经被破坏,这时,simulation取得的结果和FPGA是不等价的,继续测试也毫无意义了。
' T( I6 M h N+ V1 z% r
规范很重要,1.设计必须文档化。要将设计思路,详细实现等写入文档,然后经过严格评审通过后才能进行下一步的工作。2.代码规范。a.设计要参数化。b.信号命名要规范化。
* R8 p b' V& m& u
基于模型设计
( z$ ~4 v5 f. a" R; K9 N
基于模型的设计是21世纪的新技术,是创造新生事物的技术源泉,老美的F-35、GM的混合动力车、到X系列空天飞机,以及欧洲的空格A380,再到G4的开发都采用了基于模型设。
# [8 T1 H5 l1 _
想成为一个有创造力的工程师,不懂基于模型的设计几乎是没啥希望的,因为目前一台中高档汽车的软件控制代码就超过了500万行、F-35的控制软件更是高达1500万行,一艘航母绝对超过一亿行控制代码,大家想想您自己的编程经历,就是让您写100行软件代码,如果您不山寨别人的,也许几个月都搞不定,如果让您写10000行代码,呵呵,或许是500万,可能几万人N年都搞不定,那还谈什么科技创新啊,所以现在中国山寨大爆发,也许这也是一个重要原因!
2 S1 B6 ~; U& V 参考书籍:《基于模型的设计及其嵌入式实现》、《基于模型的设计for MCU》、《基于模型的设计及其MSP430TMS320 /F28335实现》,这些是针对MCU的,FPGA的设计也需要基于模型设计,还希望前辈们给些意见。
v; e( H( t* {6 I. g% X& B* p结 尾
) `! f9 Q# _/ K5 ?7 M
以上是我看了多篇前辈们的网上真迹,并添加了部分自己的看法进行整理的,感谢前辈们的不吝赐教,使我找到了北的方向,您的播种将花开中国大地。我们总有一天,对于FPGA的那些事儿,不再是事儿。
. i m! d; @- W# k; s