FPGA经验浅谈

因为现在学习FPGA也有半年多的时间了,从简单的流水灯入门,使用modelsim仿真第一个模块开始,跟着项目需求开始一边做一边学,现在项目上的问题不大了。回顾自己的学习历程,将在学习FPGA中所学到的东西,总结出来,算是对自己的一个总结把。

 

1:FPGA(现场可编程门阵列)属与可编程逻辑器件的一种,是数字系统的主要平台之一。FPGA是在已有的PAL(可编程阵列逻辑)GAL(通用阵列逻辑)CPLD(复杂可编程逻辑器件)等可编程器件的基础上进一步发展出来了,它属于一种半定制电路。由用户通过编译环境进行配置和编程,来完成某种特定的功能,可反复擦写。

因为我原来是学习开发的单片机,单片机就是一种定制电路,其内部芯片已经决定了所能实现的功能,我们的开发也只是通过用软件编程语言来描述软件指令在硬件芯片上的执行。简单来说,就是单片机出厂时有自己的指令系统,不同单片机指令系统不同。为使单片机实现特定的功能,就需要相应的一系列指令操作,既程序。单片机中的程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行。

而FPGA则是一种半定制电路,它是可以用来设计芯片的芯片,区别于单片机,可以说“单片机”是定制的FPGA,比如说单片机上的串口,我们在应用时,只是通过指令调用出来。而FPGA则是需要自己完整的写出一个串口。这也时FPGA比较难的一个地方,依据时序写代码。

FPGA很明显的特点就是掉电擦除,就是说我们一般开发时所写的程序都会使用JTAG下载模式,将程序写到内部的静态存储器中。断电后在上电自动恢复到出厂时所带的DEMO,而我们想要改变这个DEMO时则需要在软件中用仿真器,擦除在编写。相对于我们用户来说,掉电恢复的下载对我们的开发很方便。

FPGA还有很重要的一点就是并行操作,以往我们在使用单片机时已经熟悉了顺序操作,初学FPGA时可能感觉不出什么,但是后面并行操作这一思想很重要。

以流水灯为例:

 

顺序操作

点亮第一个灯,延时一段时间

点亮第二个灯,延时一段时间

重复点亮第一个灯

 

并行操作

首先写功能模块点灯,然后配置扫描频,在顶层在特定的时间内将模块拉高。

 

结:一些容易理解和重要的特点,主要是FPGA我们可以随心的去编程,受限制少,掉电擦除,并行操作。与单片机相比,在开发上,单片机偏与软件,而FPGA则是偏于硬件。

 

2:FPGA的设计

设计流程:功能描述,电路设计与输入,功能仿真,综合优化,综合后仿真,实现布局布线,时序仿真,板级验证与仿真,下载调试。

在实际中,我们需要安装相应的开发环境,目前我接触过3款开发环境,Altera的QuartusⅡ,Xilinx的ISE14.7和Vivado,后面我会给出相应的开发第一个程序文档的链接。

在开发环境中的流程,是首先建立一个工程,编写相应的代码,代码编写完后,写测试代码进行功能仿真,约束引脚,综合工程,时序仿真,下载调试。在我刚开始学习时并没有进行时序仿真,测试平台在编写小工程时,也没有写,因为手边有板子,直接下载调试。

(1):FPGA开发均使用HDL语言(Verilog HDL或者VHDL)作为设计的输入方式,要注意区分硬件描述语言和C的区别,两者的编程思路不同。HDL语言的目的是描述和设计电路结构和功能,而C语言描述的是CPU能够识别和执行的指令,而CPU的电路结构在程序执行时是不会发生改变的。例如一个简单的‘与’运算,Verilog的描述(c<=a and b)将被综合成一个与门,输入为a,b,输出为c;C语言的描述(c=a&b)将被编译成指令,然后交给CPU去执行,进而输出c的值;入门学习FPGA的用户,可以在熟悉了环境和简单语言之后,可以把数字电路中的一些组合逻辑电路(门电路,编码译码器,选择器,加法器等)和简单时序电路(各类触发器,计数器,移位寄存器,分频器等)这些电路相对来说比较简单可以让我们在设计中体会FPGA的设计流程和它们是如何在硬件上实现的。

Verilog和VHDL语言我们都需要掌握,对于初学者并原来学习过单片机的来说,Verilog上手难度低,Verilog语言与C语言相似处较多,所以建议初学者使用Verilog入门。

(2):FPGA基于模块化和层次化的思想

FPGA的模块化,可以这么理解,模块可以由子模块来构成,子模块可以用更底层的模块来组成。模块的大小和复杂程度都是不确定的。比如一个模块,你给它进行封装好,只留出输入输出接口,与别的模块的输入输出连接,就可以组成一个大模块。最简单的流水灯,你把一个灯作为一个模块,在写一个比它高一层的模块。在高模块中调用大于两个的灯模块让它在不同的时间区域内拉高或拉低。进而显示出流水灯,在比如说spi接口,你可以依照时序,描述其协议功能,将其封装,在别的项目时完全可以将这个模块加到里面去。可以看出这区别于单片机,单片机如果要实现spi的话,首先就得需要有SPI接口。FPGA就像是一堆积木,需要自己一点一点的构造出自己需要的东西。模块简单可以到一个逻辑门,可以复杂到一个cpu。

IP核是一种具有知识产权的集成电路芯核的总称,是经过反复验证的,在开发中我们常使用的是软核,由于IP核我基本没有使用过,所以理解的不是很好。IP核可以在网上下载或者是买入,IP核你需要了解其中接口和说明文档进而来结合自己的工程使用。软核就是综合之前的RTL(寄存器传输级)模型,具体在FPGA中就是对电路的硬件语言描述,包括逻辑描述,网表和帮助文档等,软核只经过功能仿真,需要综合以及布局布线才能使用。它的优点是灵活性高,可移植性强,允许用户自配置,缺点对模块的预测性低,在实际应用中可能会发生错误。

结:FPGA中还有重要的一点就是仿真,简单的功能仿真可以在软件上进行,涉及到时序仿真,还是需要专用的仿真软件 如Modelsim。

一些简单教程(引用网上大佬的)

Quartus建立一个工程:https://www.cnblogs.com/ninghechuan/p/6763686.html

ISE建立一个工程https://blog.csdn.net/su1041168096/article/details/81449564

Vivado建立一个工程:https://www.cnblogs.com/wangchaoyuana/p/7507374.html

 

你可能感兴趣的:(FPGA经验浅谈)