当前位置:首页 > 新闻资讯 > FPGA之家动态 >

FPGA工程师详解,教你如何入门FPGA(上篇)

时间:2024-07-09      来源:网络搜集 关于我们 0

大同学吧岗位专栏

职位介绍之FPGA工程师

什么是FPGA?

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;

反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。从而实现了用面积复制换取速度的提高。

FPGA基本知识

1、硬件设计基本原则

(1)速度与面积平衡和互换原则:

一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。从而实现了用面积复制换取速度的提高。

(2)硬件原则:理解HDL本质

(3)系统原则:整体把握

(4)同步设计原则:设计时序稳定的基本原则

2、Verilog作为一种HDL语言,对系统行为的建模方式是分层次的。比较重要的层次有系统级、算法级、寄存器传输级、逻辑级、门级、电路开关级。

3、实际工作中,除了描述仿真测试激励时使用for循环语句外,极少在RTL级编码中使用for循环,这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。一般常用case语句代替。

4、if…else…和case在嵌套描述时是有很大区别的,if…else…是有优先级的,一般来说,第一个if的优先级最高,最后一个else的优先级最低。而case语句是平行语句,它是没有优先级的,而建立优先级结构需要耗费大量的逻辑资源,所以能用case的地方就不要用if…else…语句。

补充:1.也可以用if…; if…; if…;描述不带优先级的“平行”语句。

5、FPGA一般触发器资源比较丰富,而CPLD组合逻辑资源更丰富。

6、FPGA和CPLD的组成:

FPGA基本有可编程I/O单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等6部分组成。

CPLD的结构相对比较简单,主要由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块组成。

FPGA工程师两大类

FPGA工程师大致分两类:FPGA作为产品的工程师和IC原型验证工程师

先说前者,不管是RTL design还是做simulation的、上板测试的都算FPGA工程师,并且往往一个工程师者随着项目进度会从头做到尾,项目的输出就是FPGA bitfile作为产品的一部分正常工作,所以导向就是最终上板的结果。从项目时间来看,前面coding和simulation占据一部分时间,很多代码还是复用之前项目的,而debug就分单独模块验证、整块FPGA验证、软硬件跨部门验证、整体系统验证等,调试占用的比重越来越大。

而FPGA的特点决定了调试不太容易,相比simulation来说困难多了,出现一个issue先定位是软件的问题、硬件的问题,还是FPGA的问题?如果是FPGA的问题,容易复现不?如何判断是哪一部分模块的问题?大致的问题在哪里?如何设置debug点,使用identify/chipscope/逻辑分析仪去抓?

出一个版本往往按小时算,一次设置trigger信号可能还找不到想找的点,需要多次去抓信号和出版本。这过程中,没经验的工程师是赶急赶忙地去出调试版本,或不知从何下手,忙很久却劳而无功;有经验的先分析推测问题可能出现的地方,分步骤去验证问题的原因,能较快地定位在issue所在。这就是核心竞争力!当然要做到这步需要很多的积累,比如对产品架构有整体了解,对具体模块、FPGA技能很熟悉,对常见协议如AMBA、DDR有一定经验,要不然你又不是跳大神靠掐指一算就算出问题所在了。

什么是射频芯片?

IC原型验证工程师,如另一答案所说,有的公司就是工程师兼一下把活干了就行,有的则是正规的team专门做原型验证,尤其是涉及到多块大容量FPGA分割方案的。这里FPGA与simulation相比优点就是在真实的物理环境中运行、运行速度快、能run大量的case进行回归测试,缺点也很明显,介入时间晚,移植到FPGA平台花的时间很长、需要处理大量的硬件相关问题如时钟外围器件管脚连接、debug困难等。

随着芯片规模扩大,二者各自的优缺点越来越明显,越来越多公司开始使用Emulator,Emulator更偏向simulator的硬件化,离simulator更近,离FPGA远多了。

如何学习FPGA?

学习FPGA,和学大多数的微处理器一样。

第一,首先得学会其语言。个人比较推荐学习Verilog HDL,VHDL不是太推荐,因为学VHDL的人相对少一些,如果你硬是要学习VHDL的话,可能要走的路会更崎岖一点,当你遇到困难,你能求助的人会比较有限,如果你对VHDL特别有情怀的话,也可以先学习Verilog HDL再学VHDL,先入门(Verilog HDL)再锦上添花(VHDL)。

第二,学会了编程语言,接下来最好再预习或者复习一下数电这本书,对数字电路有一个清晰的理解。

第三,学了那么久的语法书,是不是想小试牛刀一下,现在你需要一本FPGA工具使用书籍,先理解FPGA工具的使用,试着自己不看书去编写简单代码,并在集成开发环境(比如赛灵思的Vivado和ISE)中编译通过,如果遇到报错,看看是不是语法上是不是出错了,比如少个标点或者使用了中文字符,这个阶段你只需要按照你的逻辑去编写代码,编译通过即可。

第四,提升自己的过程都是有一些难度的,懂得求助别人是一个非常重要的品质,期间你可以在很多论坛都可以发帖求助,比如电子创新网,DIGILENT中文技术论坛等。

我比较赞成循序渐进的学习FPGA,只有掌握了FPGA的基础——编程语言和数字电路,你才能继续往下走,如果连语法都不懂,就直接板上调试,复杂的代码估计看都看不懂,更何况修改代码和纠错了,而且写出的代码也是C语言风格代码。

再补充一点,如果资金充裕的话,可以参加学校的FPGA培训班,这种培训班都有老师手把手教学,入门会快很多,也容易纠正你的错误,但是,师傅领进门,修行在个人,你能达到什么样的境界最终还是看你自己的努力以及天赋。

本文部分内容整理自知乎的Evan172,电子工业专辑、电子发烧友网

今天是FPGA工程师上篇

了解FPGA工程师的必备技能、薪资发展

工作环境和企业介绍等内容

请关注FPGA工程师下篇

敬请期待……


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言