一个合格的FPGA工程师需要掌握哪些知识?这里根据自己的一些心得总结一下,其他朋友可以补充啊。
1.Verilog语言及其于硬件电路之间的关系。
2.器件结构(最好熟练掌握Spartan3,Vertix4系列的器件结构,及其资源于Verilog行为描述方法的关系。)。
3.开发工具(熟练掌握Synplify,Quartus,ISE,Modelsim)。
4.数字电路(组合电路,触发器,特别是D触发器构成分频器,奇数倍分频占空比为50%,时序电路,并且能用Verilog语言描叙。)。
5.熟悉FPGA设计流程(仿真,综合,布局布线,时序分析)。
6.熟练掌握资源估算(特别是slice,lut,ram等资源的估算)。
7.同步设计原理。
8.熟练掌握基本概念(如建立时间,保持时间,流量(即所做FPGA设计的波特率)计算,延迟时间计算(所做FPGA设计),竞争冒险,消除毛刺的方法等等)。
9.具备具体设计经验(对应届生而言如毕业设计)。
10.良好的设计思路(流水线设计即熟称打拍子,在速率资源功耗之间的折中考虑)。
一个合格的FPGA工程师至少在以下三个方面的一个非常熟悉:
1.嵌入式应用
2.DSP应用
3.高速收发器应用
将自己的走过的弯路和总结的经验与大家分享一下,希望对您有一点点的参考价值。
首先从先从如何成为一个合格的设计者说起吧!初学者觉得一切都是挑战,一切都新鲜,不知从何处下手。我总结了学习EDA逻辑设计的4个步骤,请拍砖!
1。 首先,应该好好学习一下FPGA/CPLD的设计设计流程。
不要简单的以为就是设计输入-》仿真-》综合-》实现那么一回事,要抠细,要学精,要多问每个步骤的注意事项,区分相关步骤的联系和区别。比如要搞清楚功能仿真、综合后仿真、Translate后仿真、Map后的仿真、布局布线后仿真的作用都是什么,什么时候应该做,什么时候可以不做这些仿真!学习清楚了设计流程最大的好处就是有利于培养良好的EDA设计习惯,日后会受益非浅!
2。 关于设计输入和Coding Style。
设计输入最好学习HDL语言,Verilog、VHDL都可以,可以把状态机输入和原理图输入作为补充内容,但不是重点。我在前面的帖子已经反复强调了 Coding Style的重要性。因为它是逻辑设计人员的一个基本业务素质。而且Coding Style不是看几篇文章,学几条原则就能够成为高手的,他需要您在工作中不断的体会和积累,在学习的最初,有Coding Style的意识,设计者就会有意的积累,对日后发展很有好处。反之则后患无穷。
3。 培养硬件的意识,培养系统的观念。
我也在交流和授课的时候很强调硬件意识,如果从形式上看,逻辑设计随着智能化和优化手段的不断发展最后会越来越灵活,越来越简单。比如我们现在在使用大型 FPGA时就很少谈如何用Floorplanner优化,手动布线,如果用手动方式,其工作量太大了啊!一个设计的优劣,关键看其设计者的硬件意识,和系统意识。硬件意识就是要求先做到对设计的硬件胸有成竹,HDL代码仅仅是一个表述心中硬件的工具。系统意识要求设计者有宏观的观念,对设计的全局有个合适的安排,比如时钟域,模块复用,约束,面积,速度等问题。要知道在系统上复用模块节省的面积远比在代码上小打小闹来的实惠得多。
4。 最后才是工具软件的使用。
现在EDA软件都越来越友好,越来越“傻瓜化”,如果您费了1年还没有基本摸清软件的使用,我敢说,那是一个比较烂的软件(起码在用户接口上),因为这是和EDA这种方式的理念背道而驰的。但是作为设计者,软件是工具,应该熟练掌握各个步骤不同方面的软件,这样才能最大程度地发挥您的聪明才智,才能使您如虎添翼!
需要对相关器件的要有一定的了解,对和这些器件之间的控制、数据交换等通信要清晰,对性能和功能清楚。而且作为基本的素质要求要能看懂原理图,和PCB要不没法调试,呵呵。
另外比较重要的一点是对FPGA设计的一些基本原则要有一个清晰的认识,比如:
“面积和速度的互换”,“流水线设计方式”,“乒乓操作”。
对最基本和最常用的模块要非常熟悉,比如单口/双口RAM,同步/异步FIFO等等。
除了问题要多想想自己的设计。虽然综合,布线工具的性能有差异,但是一个设计的优劣根本还是设计者的思路是否巧妙。当我们的设计达不到要求或者性能太差的时候,请不要埋怨综合工具太滥,布线结果太差,因为工具不会想人那么聪明。这时候,我们应该静下心,想一下自己的设计是不是有什么问题,结构是否合理,代码的风格是否符合工具的要求。系统结构的改进带来的优化远远超过最好的优化工具所能达到的结果