FPGA工程师自述:实践中获得经验 多动手才是王道

原文链接:http://www.sohu.com/a/260250093_416090

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。而且FPGA开发工程师是一个相对高薪的工作,学习的人也不少。然而对于刚入门的初学者来说,总有一种无从下手的感觉。本文是来自一个资深FPGA工程师的自述,他从FPGA的的基础知识开始介绍,提出学习FGPA需要注重的要点,并用自己的亲身经历验证和告诫广大爱好者,经验都是从实践中获得,多动手才是王道。

深入了解FPGA厂商并掌握FPGA编程语言

谈FPGA之前,先说说生产厂商吧。全球知名的FPGA生产厂商有:

1.Altera,开发平台是Quartus II

2.Xilinx 开发平台是ISE

3.Actel ,开发平台是Libero

4.Lattice

5.Atmel

其中Altera作为世界老牌可编程逻辑器件的厂家,是可编程逻辑器件的发明者,开发软件MAX+PLUSII和QuartusII。记得上学的时候用的用的就是altera的芯片,当时的工具也是MAX,现在感觉当时的软件很强大了,现在感觉比较弱智了,下载FPGA就是用串口,当时的时钟速率也就是25M左右,用的是试验箱,就是一个大箱子,里面有板子和说明,板子上还有8位数码管和跳线,当时感觉好神奇啊,现在感觉那是个垃圾、废物,忘记是那个厂家了。

Xilinx是FPGA的发明者,拥有世界一半以上的市场,提供90%的高端65nmFPGA产品,开发软件为ISE,其产品主要用于军用和宇航。毕业后就是xilinx的,altera的很少用,大家一定问为什么,我也毕业的时候也是这样问老大的,老大说altera的不好用,我也有点气不忿儿,现在看来确实是这样,总结几点:

1:xilinx的资源丰富,新手会说很杂不容易用,但是如果上手之后,里面的资源确实会为你处理带来方便,比如BUFG,IODELAY,ODDR,OBUFT等等这些小的资源,还有一些IPcore,altera的好像要少些。

2:xilinx逻辑量比较大,一些大容量的FPGA好像altera没有这么大的,比如V5,V6,V7,K7,这些altera是远远没有的。不过也带来了隐患,比如说散热。不过有一点xilinx好像没有altera的做的好,那就是高速查分线,xilinx叫GTP,GTX,GTH,现在好像也区别不大了。

Altera和Xilinx主要生产一般用途FPGA,其主要产品采用RAM工艺。Actel主要提供非易失性FPGA,产品主要基于反熔丝工艺和FLASH工艺。

讲到FPGA语言就不得不讲verilog 和VHDL,本人大学学的是VHDL,工作就一直在用VHDL。我觉得veilog更接近底层,关键是更接近C,所以被FPGA工程师所喜欢。HDL特别是Verilog HDL得到在第一线工作的设计工程师的特别青睐,不仅因为HDL与C语言很相似,学习和掌握它并不困难,更重要的是它在复杂的SOC的设计上所显示的非凡性能和可扩展能力。 在学习HDL语言时,笔者认为先学习VerilogHDL比较好:一是容易入门;二是接受Verilog HDL代码做后端芯片的集成电路厂家比较多,现成的硬核、固核和软核比较多。

实现起来,veilog更容易实现。比如说要例化多个模块,我们就可以用for语句,并且这个是可综合的。我们在申明总线时,由于比较繁琐的语句的时候,稍不注意还会有书写错误。

我们都知道FPGA一般作为主控芯片,I2C也一般是做主设备。但是大家有没有遇到过做从设备的情况,从设备稳定吗?一般情况下,I2C做从设备是不好做的,特别是做大容量的从设备。I2C看起来简单,但是里面还有很多问题,如果我们只考虑简单的7为device address,8 bit register address,数据读写位也是简单的8bit的话,另外读写只是简单的I2C interface的话,还简单些。

如果要考虑大容量的,如16bit的设备地址,读的情形考虑到简单的接口外还要考虑有restart的情况,就不好做了,如果要考虑的再细一点,特别是做图像处理的话,读写EDID的时候有个搜索device设备的过程,这种情形恐怕做好的就不容易了。

如果你是大厂商,像一些AT的ROM,Flash等公司,做的也是巨烂,我们用他们的芯片,用ARM访问也是会有一些问题,就是他们考虑的不太周全。像一些图像驱动的厂商,做的I2C相对来说还好些;通信设备的I2C写的也是很差,控制起来比较麻烦,像一些光纤收发器的厂商,也就是光模块的厂商,有的时候你用ARM等标准设备访问的时候,也会有一些问题。所以你如果要做个I2C的从设备的话,要考虑的周全一些,这样我们的芯片健壮性就会比较高。

做FPGA代码,其中一个最重要的步骤,那就是仿真。仿真简单的说,就是验证代码是否正确。里面就包含了很多仿真的东西,测试平台的搭建,库的建立等等。最让我们忽略的恐怕就是线延时了。有的时候我们仿真正确,但是加载到FPGA里面就不正确了,这是为什么呢?你忽略了一个问题,那就是线延时。你的接口从FPGA到接口芯片肯定铺铜线过去了,中间这段走线是有延时。所以在我们仿真的时候,测试平台要在库和顶层之间加上一定的延时。这样来保证我们代码的正确。

精品来自于于千锤百炼 要不断的发现问题才能解决问题

如果我们用FPGA只是做个小程序实验实验我们的功能,应该说还是比较容易的;如果我们用FPGA作产品,那么你要考虑的要很多,有的时候你觉得你的代码很完美,实验也没啥问题,那么你有没有让你的程序跑一年甚至是更远时间,你有没有把你的程序放在各种环境下实验。如果说你认为这是芯片的问题和你的程序没有关系,这就大错特错了。这些最终考究的就是你的代码的健壮性,也就是说的精品来自于千锤百炼。

这里我们谈谈FPGA需要注意的两点:

1:调试各类驱动芯片;如果做通信的话,有各种通信芯片,主要包括PHY芯片,通信交换芯片,光纤驱动芯片等,各类芯片。另外还有各种通信接口。这些接口和芯片需要时间去调试和积累,这些不是在论坛上能完成的,这个过程是要在实验室来完成的。

2:定位FPGA的位置,FPGA要了解的大部分不是FPGA知识,而是硬件知识和软件知识,这是因为FPGA的位置是FPGA的硬件和软件的桥梁。 首先要了解硬件,大部分做FPGA不太关注硬件问题,都认为硬件不是FPGA的问题,这就大错特错了,硬件设计的好坏直接影响到FPGA工作的质量。

亲身经历验证对任何问题要有怀疑自我的精神

先描述下逻辑:FPGA实现一个逻辑,每按下一个按钮(逻辑做了消抖),出现10个200ns的脉冲,然后通过示波器抓输出波形,示波器出发条件,设置自动触发(上升沿)或者条件触发<1ms都试过。

问题出现:每次按下按钮,不是每次都能在示波器看到脉冲波形,大概按下10次会有1-2次示波器抓不到波形!首先我怀疑是我做的逻辑问题,这个楼主一贯的风格,先怀疑自己,验证自己没有问题了再怀疑相关,而不是想当然说自己这个没问题那个没问题,我觉得这点很重要,就是怀疑精神,我发现设计工程师都想把自己推的一干二净,说自己的没有问题,我觉得出现问题任何地方都是值得怀疑的,先去检查自己,不是说自己没问题就没有问题的,如果后来证明是自己的问题,这不相当于自己打自己的脸吗!总结一点:要有怀疑精神,所有相关的都是值得怀疑的。

回归正题,然后我用chipesope抓到是输出逻辑有波形,但是示波器上看不到,出现这种情况大家会怎么做?我输出逻辑没有问题后,我就想是不是IO的驱动能力,因为我外面直接用示波器测量的,是不是没有负载,所有输出不正常,基于这点,然后我把输出的逻辑再接入到FPGA某一输入管脚,然后又写着一段程序,检测输入是不是有信号过来,然后做了计数之类,结果发现,当示波器没有波形的时候,输入的信号也有,计数也正常。出现这种情况大家会怎么做?

是不是同一芯片的问题,然后我把这个输出的管脚飞线到另外一个芯片,当示波器没有波形的时候,另外一个芯片输入的信号也有!

基于以上测试,我大胆预测是示波器的问题,也不能说是示波器的问题吧,估计是没有这种的应用场景。然后我有试了另外一家的芯片,写上同样的逻辑,测试结果一样。做了这么多试验,也证明了,就是示波器没有这样的场景。用的示波器是泰克的2032等,试了他的两款表,都是如此,不是黑他的表,我估计所有的表也都是如此。

经验是从实践中获得 多动手才是王道

FPGA新手总是觉得FPGA无从下手,也不知道该如何下手。包括刚开始做FPGA开发时候的我,也是如此。针对这种情况,我还是劝新手们,多做点试验,多有点想法,然后试着写些小的程序,然后再FPGA上验证功能,如果不是你想要的,那就再调试,慢慢的你就学习到一些实践的东西。因为最终FPGA不是理论,他要靠实践来完成,你才知道哪些是对的哪些是错的。光靠书本不去试验肯定是不行的,所以劝大家多动动手。

目前觉得fpga的发展方向:1:接口统一化,类似于AXI系接口;2:硬件语言软件化;3:系统化。以后fpga开发难度会越来越下降,也是技术开发的方向。搁在几年前,硬件很吃香,现在几乎不需要硬件工程师。其实也不是不需要,而是硬件越来越标准化,一个行业越来越标准,说明开发的难度也随之降低。

做开发,心态问题很重要,什么人适合做研发,什么人适合做销售。我觉得这个是勉强不来的。有的人做销售,不需要什么技术和技巧,因为他从小就能说会道,周边的人都比较喜欢,和别人沟通,交际这方面比较擅长。如果是这样的人,就适合做销售和行政之类,和别人打交道的工作。如果你让这些人做技术,他坐不住,处处感觉别扭。有的人做研究,我觉得同样也不需要太多的技术,因为他从小就沉默寡言,喜欢发呆思考问题,数理化总能不怎么学都能考试高分,但是如果家里来了亲戚,确害羞的不爱说话,也就是人们常说的木讷,这些人适合做技术。如果你让这些人做销售,单子估计一个也接不到。所以我觉得不管做什么,根绝自己的性格找到合适的工作,这样身心愉悦!

猜你喜欢

转载自blog.csdn.net/weixin_37182342/article/details/89812855