FPGA经验谈系列文章——1、感悟和目录

本文是作者十年FPGA开发经验的总结,强调了FPGA开发的独特优势,如知识的稳定性、入门门槛、经验复制的难度以及在抗衰老方面的作用。作者通过四份工作经历,详细阐述了在不同阶段接触到的算法实现、高速接口等内容,积累了丰富的全栈解决能力。文章预告将分享verilog编码、静态时序分析、复位设计等主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列文章在2024年11月开始重新编辑,相对于原有文章在内容和质量上做了大量的扩充和改善,敬请各位读者关注。相信对于FPGA初学者而言,本系列文章的帮助将会很大。

后面可能会涨价,请尽早关注专栏

匆匆邂逅

并非每一次邂逅都能带来美好,至少笔者与 FPGA 的相遇便是如此。
在大学时期,笔者热衷于软件编程,学习了 C 语言、VB 以及 Java 语言等。笔者自认为在 Java 方面颇具实力,大学期间参加某大型比赛以及毕业设计均使用了 Java。那时,笔者对硬件毫无兴趣,从未设想过日后会与硬件打交道,甚至连 FPGA 是什么都未曾听闻。当时互联网行业正蓬勃发展,理论上若沿着软件编程的道路前行,很有可能赶上互联网和移动互联网的黄金时期。
然而,“可惜” 的是,在攻读研究生之后,笔者所接触的研究方向需要使用 FPGA 来实现卫星导航信号的接收处理,就这样,笔者第一次接触到了 FPGA。不幸的是,在笔者接手 FPGA 工程之时,负责交接工程的师姐很快就毕业了,甚至来不及给笔者讲解任何相关内容,而当时正值期末考试期间,笔者正在忙于准备考试。由于没有引路人,再加上笔者之前从未接触过此类语言,只能硬着头皮对着那套包含 DDS、FFT 等模块的 FPGA 的 Verilog 程序钻研了好几个月。对于大学数字信号处理学得不够扎实的笔者来说,理解这些内容相当困难。因此,与 FPGA 的这次匆匆相遇,并非笔者所期望的,只能被动接受。

懵懂混沌

刚开始接触 FPGA 的时候,是在 2009 年,当时网络上关于 FPGA 的资料十分稀缺,经验总结类的视频教程更是少之又少。由于当时的课题以及后续的第一份工作,都是围绕 FPGA 算法的实现展开的,该算法对主频要求不高,对资源的限制也不大。其难点主要在于算法的理解、性能的提升以及与软件的配合等方面。时钟频率也不高,大部分逻辑仅为 60 - 70MHz。使用的是 Xilinx Artix - 7 芯片,资源较为充足,无需考虑时序违例问题,甚至不存在跨时钟域的场景,基本可以随意编写代码。
因此,笔者一直没有意识到 Verilog 是一种硬件语言,仅仅将其当作一种特殊的、可并行执行的 C 语言。那时,笔者也从不研究 FPGA 的底层资源,因为基本上看不懂,始终不理解综合、布局布线等操作究竟意味着什么。当然,笔者并非是不爱学习的人,经常会去浏览 FPGA 相关的论坛,从众多帖子中看到过一些诸如 “verilog 是一个硬件描述语言,写代码的时候心中要知道其对应的电路是什么” 之类的论述。在工作的前几年,笔者完全不理解为什么会有这样的论述,因为笔者的代码能够正常运行,功能也能实现,根本无需在意电路相关的问题。

步入正轨

这种懵懂混沌的状态持续了大约五年时间。在第二份工作中,笔者在第二家公司初步接触到了高速接口的内容,但没有机会进行调试,此时时钟频率达到了 200MHz,资源也比较紧张,因此经常会出现时序不通过的情况,而当时笔者完全不知道该如何处理这些问题。幸运的是,在第二家公司有一位曾在华为工作了十来年的大牛,这位大佬向笔者提到了一个 “逻辑级数” 的概念,正是这一关键的提点,为笔者打开了一扇进阶的大门。从事 FPGA 开发多年,笔者一直觉得,自从心中有了 “逻辑级数” 这个概念,就仿佛学武功突然打通了任督二脉一般。
从 “逻辑级数” 这个切入点开始,笔者终于意识到理解 FPGA 的底层资源是至关重要的,尽管 FPGA 那些资源的用户手册对笔者来说理解起来相当困难,但笔者还是硬着头皮开始钻研,一遍不懂就看两遍,两遍不懂就看三遍,虽然看了很多遍,仍然有许多内容不理解,但也逐渐明白了部分知识。不要期望能够在短时间内读懂 FPGA 底层资源的用户手册,这需要长期阅读,随着自身阅历的增加才能逐步透彻理解,是不是有点像学习武功心法呢?呵呵。
至此,笔者终于开窍了,逐渐理解了 FPGA 的底层资源,在写代码时会注意逻辑级数,也终于开始理解 “verilog 是一个硬件描述语言,写代码的时候心中要知道其对应的电路是什么” 这类论述。果然,前辈们的总结确实是经验之谈,只是笔者之前功力不够,一直无法理解罢了。心中有了电路思想,逻辑设计优化便成了一件令人愉悦的事情,甚至在遇到一些时序问题时,通过自己一步一步地排查并最终解决问题,还能让人产生成就感,并且还会尝试去挑战如何提高时序性能。

功力提升

虽然已经理解了通用逻辑设计部分,但笔者在 FPGA 的能力上还存在一个缺陷,那就是高速收发器。笔者一直以来都没有接触过高速收发器,而高速收发器以及基于它的一些协议是 FPGA 中非常重要的一部分内容,可以说是 FPGA 的精华所在,这部分内容怎能不去接触呢?
之后,在笔者重新换工作之后,调试高速收发器的机会终于来了。JESD204B 调试是笔者进入一家新公司的第一个任务,而且是一个全新的射频器件,由于之前从未接触过高速接口,所以接到这样的任务对笔者来说是一个巨大的考验。首先,笔者通过查阅资料,自学大致了解了 JESD204B 相关协议,设计好各项参数,并画出框图。然后,理解 JESD204B IP 核的使用方法,进行功能仿真,并借鉴了一些之前项目的设计经验,请教了有经验的同事。
调试过程可谓一波三折。一开始,笔者以为很顺利地调通了,但由于没有充分进行测试,导致一周之后又发现链路不稳定的问题。通过排查各种可能的情况,经过几天的折腾,最终发现是 JESD204B 的复位流程有问题,这个器件必须先复位发端,再复位收端。
这是笔者针对高速收发器的第一次实战,从完全没有接触过高速接口、JESD204B 协议到完全调通并确认,积累了宝贵的经验。尽管一开始并非一帆风顺,但在历练中笔者也快速地成长,适当的 “折腾” 才能真正学到东西。在调试过程中,笔者逐渐了解到了更多的知识,对整个系统也有了更深的理解。
当然,也正是这次调试,激发了笔者对高速收发器的兴趣。通过不断阅读手册,学习官方参考用例,研究收发器底层原语,并结合项目中收发器遇到的问题进行总结,逐渐基本完全理解了高速收发器的整个功能,这对后面学习其他收发器协议起到了很大的帮助作用。
除了高速收发器,笔者还主动研究关于 FPGA 资源高效利用、信号处理算法的实现等方面的内容,以使自己的知识更加全面。

坚守热爱

如今,已经是笔者从事 FPGA 开发的第十三个年头了。回首 FPGA 的学习历程,真是充满了坎坷。笔者的学习过程基本上是自己一路摸索、自我感悟,因此学习速度相对较慢。笔者十分羡慕那些一开始就有一位好师傅引领的初学者,他们的成长速度非常快。
如今,从事 FPGA 开发的人员越来越多,互联网上关于 FPGA 技术的资料也越来越丰富,各种技术专题、教学视频以及各类开发板资源应有尽有,只要有学习的意愿,就不愁找不到相关的资源和教程。
笔者秉持着 “以此为生,精于此道” 的理念,不断学习,尽可能地提升自己的 FPGA 技术能力,以免被淘汰。同时,笔者也开始在博客中分享自己的经验,在精力允许的范围内,尽量帮助更多的初学者尽快入门,少走弯路。
前段时间同学聚会,大家一起聊聊各自的职业,大部分同学都已经转行,或者不再从事最初所学的技能工作。当得知笔者仍然在从事 FPGA 调试工作时,同学们都说笔者真是不忘初心。笔者依然坚守在 FPGA 开发这个赛道上,也算是做到了干一行爱一行吧。

经验谈系列文章目录

笔者关于逻辑设计的一些经验、技巧和感悟。笔者曾经经历过的坎也许也是你所经历过的或者正在经历的或者即将经历的
1、写代码心中要有电路?
2、逻辑级数
3、常用代码的逻辑级数预估(加法器)
4、常用代码的逻辑级数预估(比较器)
5、常用代码的逻辑级数预估(条件语句)
6、逻辑层级拆分
7、复位的设计
8、块储存器的高效使用
9、DSP48E1的高效利用
10、DSP48E1的高效利用(另一个实例)
11、常见跨时钟域问题
12、单比特信号的跨时钟域同步
13、多比特信号的跨时钟域同步
14、跨时钟域的约束
15、FPGA与ASIC RTL的差异
16、IO专用逻辑资源(接收部分)
17、高速LVDS信号的接收
18、时序分析场景
19、单周期时序分析模型
20、输入端口处时序分析模型
21、输出端口处时序分析模型
22、时序报表解读(单周期时序模型)
23、输出端口时序约束和报表解读)
24、输入端口时序约束和报表解读

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA十年老鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值