基于FPGA 以及数字电路设计相关高级技巧介绍_第1页
基于FPGA 以及数字电路设计相关高级技巧介绍_第2页
基于FPGA 以及数字电路设计相关高级技巧介绍_第3页
基于FPGA 以及数字电路设计相关高级技巧介绍_第4页
基于FPGA 以及数字电路设计相关高级技巧介绍_第5页
已阅读5页,还剩1页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于FPGA以及数字电路设计相关高级技巧介绍在这篇文章里,我们就继续来讨论一下FPGA的进阶学习路线。和入门路线不同,我想从入行和职业发展的角度,分析一下专业的FPGA开发者需要具备哪些技术能力,以及如何进一步的提升自己这些方面的能力。所以如果你有兴趣从事FPGA这个行业、亦或是正在寻找这方面的工作,或者已经入行一段时间,并且希望明确今后今年的发展方向,那么这篇文章应该会对你有所帮助。和初学者相比,专业的FPGA工程师需要掌握更多的技能和知识。对此我归纳了四个方面,分别是FPGA相关的高级技巧、领域相关的知识、以及职业芯片工程师必须具备的硬实力和软实力。我也会介绍一些书籍和学习资料,希望能对你的学习有所帮助。RTL设计的高级开发技巧掌握基础知识之后,就需要继续学习FPGA以及数字电路设计相关的一些高级技巧。这部分的内容有很多,主要包含设计、验证、以及一些FPGA约束和优化的技巧和方法。这里的设计指的是逻辑设计,也就是使用RTL语言实现一些相对复杂一点的模块或者系统,以及在这个实现过程中使用到的一些技巧。在本文也暂时不讨论高层次综合(HLS)的内容,也就是使用C语言或者Python等高级语言对FPGA进行编程。关于HLS的相关内容,可以看我之前的文章《高层次综合:解锁FPGA广阔应用的最后一块拼图》。对于RTL设计,一个在面试中非常常见的问题,就是信号的跨时钟域处理。比如在跨时钟域的时候,怎么处理一位信号、怎么处理多位不相关的信号、怎么处理多位的总线信号、怎么处理复位、怎么处理脉冲,从快时钟域到慢时钟域怎么办,反过来怎么办等等一大堆。这类问题的集大成者就是FIFO的设计,特别是异步FIFO的设计,以及它的一系列变种问题。一种异步FIFO的架构框图关于跨时钟域和FIFO的问题,推荐读者朋友们仔细研究一下CliffordCummings这位大神的几篇文章,他的文章非常全面的讨论了上面说的所有问题,我也会把其中的代表作分享到知识星球里。

CliffordCummings事实上,Cummings作为Verilog语言的协议制定参与者,他还写了很多文章,详细探讨了各种和数字电路相关的问题,比如如何写出好的可综合的RTL代码、状态机怎么写、UVM和验证相关的问题、还有很多SystemVerilog和Verilog的细节讨论。对于进阶的朋友,我觉得这本书也有一定借鉴价值,名叫《FPGA设计实战演练–高级技巧篇》。这里面介绍了一些常见的FPGA设计的技巧和方法,比如前面说的时钟域处理、还有如何进行速度和面积的互换和优化等等。

值得注意的是,虽然在面试时常问跨时钟域处理这类的问题,但在实际的工程项目中是基本不可能让你从头写一个跨时钟处理模块或者FIFO的,这些功能早就被封装成一个个现成的模块了,直接调用就可以。但这并不是所谓的“面试造火箭,工作拧螺丝”,前面介绍的这些高级技巧,更多的是在锻炼我们的思维方式和设计习惯。只有知道这些,才有可能在面对一个实际问题的时候,知道怎么根据需求去分析、设计和实现,并且得到最优化的结果。验证的高级技巧再来简单说一下验证。之前的文章里提到过,验证是一个非常复杂的领域。比如在下面的这张Mentor的图片里就显示,在一个芯片项目里,平均而言至少会有超过一半的时间花在验证上,有的甚至占60%~70%。以我自己的经验来说,这个比例会更高。

验证之所以复杂而且耗时,是因为我们必须尽可能多的检查到所有可能的设计功能和状态。验证里有一个“功能覆盖率”的概念,就是用来量化这个过程的。比如对于一个加法电路,a+b=c,我们肯定希望验证到:a和b取所有值的时候,结果c的值都正确。如果a和b都是一位十进制数,也就是从0到9之间随机选取,那么就有10x10=100种可能。但是如果a和b都是四位十进制数,那么就有10000x10000=1亿种可能,当然这还是非常简单的情况。对于更加复杂的设计,比如多个数相加、相乘,或者在一些特定领域的逻辑功能、比如AI或者网络应用等等,我们很难通过仿真验证到所有可能的状态,甚至不可能覆盖所有可能的设计状态。为了解决这个问题,就需要科学的制定验证计划,同时使用一些进阶的验证方法学,比如业界常用的随机约束、UVM或者形式化方法,来帮助我们构建更加高效的验证环境。

一个基本的UVM验证环境示意图很多芯片公司其实都有设计工程师和验证工程师的分工,但这并不代表做芯片设计的人不需要知道验证。事实上,那些优秀的芯片设计者同时也是优秀的验证者,他们可能不会用UVM或者形式化验证方法,但肯定会熟练掌握随机约束、参考模型建模、自动化测试、还有断言等等常用的验证技术,这也应该是我们应该努力的方向。FPGA的约束和优化设计除了设计和验证之外,FPGA相关的优化和约束也是进阶学习的重要内容。这里主要包括对时序、面积、功耗的约束和优化。比如,存在多个时钟的时候怎么写时序约束,怎么进行时序分析,怎么划分固定的设计区域,怎么预估设计的功耗等等。这个过程可能会贯穿整个FPGA项目的开发周期,而且一些常见的ASIC约束方法并不一定会适用于FPGA设计。拿FPGA低功耗设计举例,门控时钟就不一定适合于FPGA。这是由于FPGA里的时钟网络是固定的,因此只能关闭固定的时钟树或者分支。如果需要做门控时钟,就必须控制某些特定的clockbuffer,且要同时确定这些clockbuffer可以被逻辑控制。更重要的是,我们还需要确保这个时钟驱动的逻辑都位于这个时钟树的“势力范围”之内,这就需要在布局布线时设置想要的位置约束。由此可见,门控时钟这个在ASIC设计里常见的低功耗设计方法,在FPGA设计里是困难且繁琐的。FPGA时钟树示意图领域相关的知识进阶学习路线的第二部分内容,就是领域专用的知识,也就是DomainSpecificKnowledge。我们之所以要学习这部分内容,是因为FPGA并不是单独存在的,它需要被应用在某些具体的领域和场景里。比如,FPGA目前的一个很火的应用领域就是数据中心里的智能网卡。关于智能网卡的内容在之前已经说过很多了,包括微软、阿里、腾讯、京东、字节等等很多互联网公司都在布局这方面的技术。智能网卡的本质,就是使用把一些原本在CPU里运行的应用,卸载到FPGA里执行,这可以是网络协议栈、一些虚拟化的功能、或者是和AI相关的功能等等。

这里面就涉及到了很多领域专用的知识,比如计算机网络、网络功能虚拟化NFV、软件定义网络SDN,还有一些其他的虚拟化技术比如Virtio、OVS等。此外,领域相关的知识还包括各种高速接口协议和总线相关的内容。比如PCIe、DDR、HBM、以太网、收发器等,还有各种各样的总线协议。这些和FPGA也有非常密切的关系,在实际的求职应聘时也是重要的加分项。在学习这些内容的时候,我个人建议还是结合目标职位或者项目的需求来,有目的的去学习,而不是想着一上来就一口吃个胖子。比如我就对使用FPGA进行高清视频处理相关的内容不太了解,因为我并不做这个方向,但我大概知道怎么构建知识图谱,并由此去一步步学习,这样其实就可以了。职业技能相关的能力FPGA进阶学习路线的第三点,就是职业工程师需要具备的一些硬实力。比如,企业里几乎全部的开发环境都是在Linux系统里完成的,而且大部分时候没有图形界面。所以除了常用的那些EDA工具之外,还特别需要我们熟练掌握Linux的一些基本命令。此外还应该掌握至少一种脚本语言,比如Tcl、Perl、Makefile、Python等等。这能极大的提升我们的工作效率,这也是芯片工程师必备的技能。此外,作为FPGA工程师,硬件调试的能力也是不可或缺的。一个在职业工程师日常工作中非常常见的场景,就是使用和调试各种各样的FPGA板卡,比如拿来一个全新的板卡,从头开始用它进行开发。这就要求我们会看板卡的原理图、知道怎么写各种约束,怎么使用板子上的各种资源等等。此外,当设计出错时,怎么去进行硬件调试,还有怎么设计一些有用的逻辑功能来方便硬件测试,比如各种状态寄存器等等。那么对于某些专业领域,比如在网络领域,可能还需要知道怎么进行流量测试,比如DPDK的使用、配置,还有一些测试仪器的使用、一些常见的网络分析工具(如wireshark)的使用等等。总体来说,这些职业工程师需要具备的硬实力,可能在上学期间不一定都能接触到。这就需要我们在工作中不断实践和总结,才能把这些技能一点一点积累起来。职业人士的软实力除了硬实力之外,软实力的培养也至关重要,这包括沟通、时间管理、团队协作、领导力,还有不断学习的能力等等。不管是芯片还是其他工程领域,绝大部分项目都是由很多团队一起协作完成的,因此如何与不同团队的成员沟通项目内容,如何制定项目规划、把握项目进度,以及遇到难题应该如何着手去解决,都是职业工程师几乎天天遇到的问题。事实上,不管你从事或者打算从事什么职业,我们都应该从现在开始培养自己的各种软实力。比如多与人沟通,积极参加各种活动,或者像我在之前的文章《分享是程序员的必备素质》里提到的,不断分享自己学习和工作中的各种心得体会。这些肯定都会对我们今后的职业生涯大有帮助。小结在今天的文章里,我们梳理了一下作为一个职业的FPGA工程师需要具备哪些能力,一共有四个部分,分别是和FPGA相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论