1、一个简单方法告诉你:新手如何学习 FPGA 外围硬件电路设计在论坛里有人发帖子,问关于 FPGA 的硬件电路问题,我想涉及到这个问题的基本都是硬件工程师或者在读学生,所以我介绍一下我是怎么学习 FPGA 的硬件电路设计的吧!先介绍一下我自己,我是一个硬件工程师,搞 FPGA 也有些时间了。感觉 FPGA 领域是一个非常活跃的技术领域,这里不仅可以做 IC 设计的原型验证,同时可以应用到众多工程上去。尽管自己做了一些时间的 FPGA,但是 FPGA 涉及的东西确实很多,就是专门拿出一个部分都可以好好的研究一番。所以,我下面所说的,只是抛砖引玉,对于初学者来说不乏是一个捷径。其实我下面所要说的用两
2、个字就可以概括:参考。1。首先,xilinx 所发布的文档是你首要参考的。xilinx 针对每个系列的 FPGA 都提供了丰富而全面的文档,所以在你开始任何一个系列的 FPGA 设计前,到 xilinx 网站上,进入那个系列 FPGA 的页面上将所有的文档都下载下来,然后有针对性的做参考。(做好了这一步,你的 FPGA 设计不会出什么大的纰漏)2。参考勘误文档。xilinx 会发布一些勘误文档,但需要注意的是并不是任何一款 fpga 都有勘误,所以你可以在里面看,是否有你当前用的 fpga 的勘误文档,如果有,一定要仔细看。3。参考 xilinx 网上的开发板。这是做硬件最有价值的部分。xil
3、inx 在网上针对每个系列的 fpga 都有文档说明,大部分都给出了原理图,而且这些都是免费的。xilinx 开发板的文档说明比较详细,也很规范,有着很大的参考价值。在那些开发板里也有众多的外围接口电路,可以说含盖的比较全面了。因为针对 fpga 的应用几乎都有对应的开发板,所以参考 xilinx 网上的开发板是捷径中的捷径。4。参考你周围人的设计。这个最直接了。5。参考外围电路的 datasheet。如果你的 FPGA 外围又有 IC 或其他电路,那么认真阅读手册是必须的。作为硬件工程师,阅读手册是一项基本技能。6。参考你以前的积累。随着你工作的深入,你的积累也逐渐丰富。也许你现在需要的电路
4、就是你以前做过的,那么甚至可以照搬过来。平时注意积累,关键时刻领先一步。硬件设计,有时看起来简单,但又是蛮繁琐的工作,同时如果想深入的理解硬件设计,需要深厚的理论支持。硬件设计,是一条平坦但十分陡峭的路。我再说几句。随口说的,所以没有什么逻辑,不过大概的反映了我曾经走过的路,这段路其实是个弯路。如果当时我会经常的看 xilinx 的文档,会尝试更多的设计,上这样的论坛,有人指导,我想会少走不少弯路,那么我也会比现在更强。在 FPGA 领域,我还是一个初学者,因为我也有很多不懂的地方,我的方法不一定对,所以希望大家都来讨论,让初学者成长的更快。确实,从我上面所写来看,确实都是一个方向性的指导。当
5、一个初学者拿一个实际问题来我上面所说的当中寻找帮助,是一时找不到解决办法的。我不是资深者,但是也有过刚开始接触 FPGA 那时的困惑。甚至学习了很长时间 VHDL 语言,连仿真、配置、FPGA 怎么把语言变成实际的动作,都不清楚。何况我当时上网很不方便,所以,没有更多的文档和现成的例子可供参考,更没有上过这些论坛。不过,当我将自己的第一段代码下载到 FPGA 当中(确切的说是原理图与语言的混合,那时用的还是 foundation) ,看到电路真正跑起来后,我才算明白一些怎样将代码变成实际的电路动作。当时跑我的代码的第一块板子是 xilinx 的一个很简单的开发板,是 spartan 2 的。那
6、个时候只知道把电缆连接好,怎么下载 bit文件,里面具体原理还是不怎么清楚,电路也不清楚。后来,带我的一个同事做了一个基于 PCI 的数据采集板,上面有 3 颗 FPGA。当时除了要写代码外,还要调试电路板,也就是那个时候我才真正的结合 xilinx 的文档来学习 FPGA 的外围硬件电路。因为我们那块板上没有太复杂的外围电路,也就是电源,sram,lvds 芯片,ADC。但是,在调试过程中以及工程实际应用中,遇到问题是千差万别的,所以在实际中还是学习了不少。这个电路板从我手中调试出的不少于 80 块。这期间也看了一些 xilinx 的文档,但都是东一头西一头,根本没有仔细的好好的把一个芯片的
7、 datasheet 或者 user guide 看完。那个时候虽然也知道加约束,但是几乎没有怎么用过,也知道 fpga 的结构,但根本没有什么体会,甚至连一些基本的时序概念都没有。那个时候感觉最深的就是知道 FPGA 的配置电路是怎么回事,以及在实际中出现问题该怎么解决(其实只要连接正确,这个电路被烧坏的可能性极小) 。后来,我自己设计了一个 FPGA 板子,上面有网口、 RTC、SRAM 、硬盘接口、 EEPROM、7segment LED、UART 等,上面除了 UART 没有调试外,其余都通过。UART 我用的是一个 16c550(好像是这个名字) ,所以,实现串口就不怎么难了。在这块
8、板子上,其实没有什么难度,一次做板成功,无飞线。后来看到 xilinx 的开发板,再与我那块板子比起来,我那板子简直太差了。不过,这样一个过程确实还是锻炼了自己用 FPGA 设计整个系统的能力。又在另外一个公司工作,接触了规模更大的 FPGA,要求的性能也高了,代码也复杂了。但这个时候上网也方便了,因此可以在网上找到很多自己需要的东西,遇到问题了,用搜索引擎也可以很快找到答案(当然也有找不到答案的时候) 。这个时候能加一些比较复杂的约束(个人觉得加约束一定要有实际的设计让你练,否则根本体会不到加约束的效果) ,涉及除 lvttl 外的电平,也涉及到了一些新的外围电路,比如 sdram、flas
9、h、iic、usb 等。但是,说实话,就是让我现在写这些代码,还是很困难的。毕竟自己不是专门写代码的。加上自己以前的积累的一点 FPGA 知识,再结合现在的实践,所以就有了我最开始的总结。对,在这个阶段自己可以用 FPGA editor 来修改逻辑或引线。也知道了一些时序上的东西。如果对于一个初学者,你手头没有一块带 fpga 的板子,那么你学习起来将是非常困难而且进展缓慢的。所以,如果你是初学者,你一定要想办法弄块 fpga 的板子,很简单都可以,哪怕只有电源和 fpga,只要引出了 io 脚,就可以做很多实验。有了板子后,就可以在上面跑你的代码了。在这个过程里,你要尽快的明白 FPGA 开
10、发是怎样一个流程。这个时候你可以尝试读报告、做仿真、加约束。随着你学习的深入,你就可以理解一些比较复杂的约束、理解约束背后的原理、理解时序、理解 FPGA 结构。 。FPGA 还有很多更高级的应用,比如 dsp、GBit 收发等。因为我没有涉及这个领域的应用,所以没有这方面的经验。现在看 xilinx 网上很多文档都是很有价值的,有时就想假如自己早去参考这些文档,也许会少走很多弯路。我发现现在很多刚毕业的学生懂的 FPGA 的概念都比我多,理解的也比我深入,所以你们以后会很厉害的。自己做了几年 FPGA,但是还没有做过基于 FPGA 的嵌入式系统,因此现在我正在准备做这样一个小的基于 FPGA 的嵌入式系统。同样 xilinx 有很成熟的开发板,如果买来用,那是很快的。但是我还是要亲手做一块,可能费时间,费精力,但是这个过程一定会让我有所收获。我会把整个过程做笔记,如果成功了,我会把整个过程以及文档贡献出来。千里之行始于足下。不要怕麻烦,不要厌倦简单、一步一个脚印,若干时间后你会发现其实你已收获很多。