很多人在学习FPGA或者数字IC设计时,首先面临的问题必定是编程语言的选择,目前常用的硬件描述语言有三种,即VHDL,Verilog HDL,system verilog。FPGA常用前两种,system verilog常常用于验证,是Verilog HDL的升级版,建议在学习Verilog HDL之后进行学习。由于VHDL是在军事背景下产生的,语法要求就比较严格,语法也比较多,出错的机率比较小。而Verilog HDL出生于商用,语法跟C语言长的比较相似。
现在的企业,已经基本都使用Verilog进行开发了,仅有极少数军工企业因为历史原因使用VHDL。
网络上教学资料全部使用Verilog了,学习Verilog学习资料充足,进步更快。遇到问题查找解决方案更容易。
现在芯片原厂开发例程和ip 都只用verilog 了。其他第三方厂家如adi ,开发他们的芯片基于fpga 的应用也只用verilog。
在企业,大部分人都使用Verilog进行开发,如果您使用VHDL开发,那么进行团队协同开发的时候就会有对接障碍,团队人员无法理解你的代码。
综合考虑,还是比较推荐学习Verilog HDL的,就像手机生态一样,vhdl 就像早年的windows phone 系统,即使做的再优秀。因为没有足够的应用生态,只能越来越往小众发展。
因此,推荐一些FPGA入门书籍,最后一本是进阶可以使用,里面包含时序约束,复位问题,快慢时钟域数据传输问题,面积与速度优化问题,可综合电路设计等等问题的解决方法。
不可能让初学者去通过阅读IEEE_Verilog_2001规则学习Verilog HDL,所以推荐一本Verilog HDL语法讲的比较全的书籍,在图书馆也比较容易找到,即夏宇闻老师的Verilog数字系统设计教程。
这本书Verilog HDL语法讲的比较完整,适合作为语法工具书使用,第一部分讲述了Verilog HDL的基本语法,Verilog HDL运算符大部分与C语言是相同的,需要注意的有拼接符和缩减符。选择语句与C含义基本一致,Verilog HDL含有四种循环语句,但是只有for循环可以综合成电路,for循环的含义与C语言有本质区别,具体可以查看之前写的一篇文章去理解Verilog中for循环的含义。而always,assign,begin…end这些是Verilog最常用的,也是比较简单的。对于系统函数只需要有印象即可,因为这些都只能用于测试文件的编写,都是不可以综合成电路的。
第二部分主讲数字电路中加法器,数据选择器,状态机等常用器件Verilog HDL的描述方法,以及对阻塞赋值与非阻塞赋值这些概念进行更加详细的讲解。最后会有对risc的CPU进行设计的介绍。
手把手教你学FPGA设计–基于大道至简的至简设计法
这本书是潘老师进行编写的,主要通过讲解以计数器、状态机、FIFO为架构去实现uart、SCCB、SPI、SDRAM、UDP等模块的设计,以及模块接口设计。
做过FPGA的都知道,80%左右的设计都可以通过计数器、状态机、FIFO或者RAM去实现,讲解这几种结构的设计的书有很多,之所以推荐这一本是因为本书的设计思想以及计数器和状态机与其他书都有所区别。关注计数器无非在于其初始值是多少,什么时候加一,什么时候计数结束这三个问题。状态机很多书上也都只是对传统的一段式,二段式,三段式进行对比讲解,而本书总结出四段式。后面两章通过从模块划分,到各个模块内部实现,调试,最终实现两个案例。
注意计数器,状态机,FIFO并不是我们最终目的,架构都是为输出信号服务。实现同一种功能往往可以使用不同架构,根据难度选择合适的架构,这是需要多加练习的。
手把手教你学FPGA设计–基于大道至简的至简设计法链接:
前面两本一本讲语法,一本讲计数器,状态机,FIFO这些架构的应用,这本书就是用来讲解FPGA的结构以及组成的,全书很少有代码。
这本书更像一本介绍FPGA原理的科普书,读着就像读小说,写的很好,而且与现在主流的FPGA技术有结合,非常适合初学者。对FPGA的基本结构详细了解是很有必要的,前期不想直接看数据手册时,可以看看这本书,这本书还对altera和xilinx设计流程,工具以及原理进行了介绍。
FPGA原理和结构的电子书目前还没有,扫描版获取链接:
这本书比较经典,全书的内容大致可以分为三块,第 1~5 部分主要是针对 FPGA 的开发流程,从基础知识入手,先介绍一些基本概念,然后针对开发流程中最重要的环节,从实践的角度带领读者逐步深入。第 6~7 部分,以特权同学自己的项目经历为基础,书写的经验和感悟,也有完整的项目实例,希望能够让读者与 FPGA 的开发与设计有更紧密的接触。第 8 部分是特权同学作为一个 FPGA 工程师的一些感悟杂文。
第三版与第一版中间历经了七年,相比第一版提升也不小,第一版在这七年时间里面,在当当上面的销量也是一直位于 FPGA 书籍销量的前 8,作为入门书籍还是不错的。
深入浅出玩转FPGA第三版及配套视频以及工程源码链接:
本书建议在进阶时使用,主要以quartus讲解时序约束,快慢时钟域下数据传输,全局复位,面积与速度优化,可综合设计讲解。
现代FPGA的结构越来越复杂,多时钟域的设计现在已是常态。对于功能电路来说,复位结构都必不可少。在同步逻辑设计中如何很好地处理异步复位,甚至在多时钟域之间传递(异步)复位信号也是逻辑工程师经常面临的挑战。本书除专门介绍了上述电路的设计方法外,还介绍了状态机的设计。在介绍这些通用电路结构的基础上,还介绍了代码优化以及如何对设计进行综合与布局布线优化方面的相关内容。但是不建议初学者阅读。
提供的链接还包括一本FPGA设计实战演练(逻辑篇),这本书相比前面几本会差那么一点,这两本书不是同一作者写的,有时间的可以看一下。
本次推荐了五本书,分别是夏宇闻老师的语法书,潘老师的至简设计法,以及FPGA结构与原理和高级技巧设计的书籍,前四本可以方便快速入门,最后一本建议有一定基础在进行阅读。后续还会推荐一些书籍以及电子书。