fpga学习心得

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA学习心得

学习fpga一个多月以来,完全从零开始学习,感觉自己学到的东西真不少,虽然还不是很熟练,不过也对fpga有了很好的了解。以前一直没有想过要来总结些什么,是感觉自己对于fpga根本就像是一无所知一样,虽然天天在学,不过确实没有一个总体观念,学的东西太混乱也没有一个总体的框架。到了今天终于觉得自己的学习已经小有成就了,虽然还是没有能够独立设计的自信。

在最初学习的时候最主要就是对于fpga结构的一个基本认识和对硬件描述语言verilog HDL语言的学习。之所以选择学习fpga是因为在这一学期找工作中发现,现在很多公司都需要会一点fpga方面的知识,在笔试的时候也会偶尔遇到一些用HDL语言编程的试题。现在很多硬件工程师已经不再是单纯的用传统的方法进行电路的设计,至少现在很多招聘的岗位当中不再是单纯的电路的设计了,很多都涉及到嵌入式和HDL语言。Fpga现在正在以异常的速度发展,在08年全球金融危机的时候大多数行业都呈现在下滑的趋势,而fpga的厂商如xilinx和altera等公司的收入却呈现出增长的态势。在我看来fpga必将是将来硬件工程师不可缺少的一项本领,这也就是我学习fpga的原因之一。

一、硬件描述语言:

对于硬件描述语言(HDL)语言我选择的是和C语言类似的verilog HDL语言,虽然VHDL语言在很多方面优于verilog HDL语言,但是作为初学,还是先学习一个简单一点的语言,尽量先将所需要学习的东西过一遍,将来等时间允许的时候再去学习VHDL语言,在网上有看到现在出来了一个叫system verilog的语言,据说融合了verilog 和VHDL语言各自的优点,可能将来会成为行业统一的语言吧。

verilog HDL现阶段主要接触的就是对组合逻辑电路和时序电路的描述了。所接触的程序中以always @ (*)模块居多,几乎是所见过模块的核心部分了,其实在学习这个语言

上面也没有花太多的时间,因为有对C语言的学习,所以就先入为主了。当了解了其基本语法过后就开始了实例的分析,在此过程中也有了解fpga的结构,不过感觉没有真正使用过fpga所以对于那些什么pll、sram 、sdram、norflash等都没有什么直观的感觉,所以对于程序也根本不知道这样些的原因和到底能实现什么功能,这也成为了我学习verilog HDL语言的一个障碍。

二、fpga的基本结构:

在这里还是得认识清楚fpga的结构,记得有一个在外面去面试的时候,别人就问了我一个问题——fpga和mcu的联系与区别?当时我根本都还没有接触过fpga,只知道fpga是属于硬件方面的开发板。后来通过自己对fpga的接触和网上的相关说明终于有了一个初步的认识。

接下来就具体说明一下:

MCU又称为单片机,它为8位的微控制器,主要用在工业控制,FPGA则为可编程逻辑器件的一种,拥有丰富的硬件资源,可实现强大的逻辑功能,由于其硬件重构的特性,适合各种领域的应用;MCU的编程语言主要为C语言,以软逻辑实现,它通过顺序执行指令来实现特定功能,避免不了低速的缺点,相比之下,FPGA它以V erilog或VHDL等硬件描述语言为编程语言,由于直接由硬件实现逻辑,所以它并行执行,从而使速度大大提高;MCU的这种同一时间只能处理一条指令的特点也影响了它的应用,它只能用于一些算法的设计及简单的控制,而FPGA由于并行执行的特性,大量应用于复杂逻辑控制以及大量的数据运算和处理。

FPGA是在PAL、GAL、CPLD等可编程器件的基础上一步一步发展起来的。PAL是与阵列可编程或阵列固定,它的缺点是:采用熔丝工艺,只能一次编程,并且它的输出是固定的,不能编程;也就是说芯片一旦选定,输出结构将不可改变。GAL是在PAL的基础上发

展起来的,可以重复编程。与PAL的最大区别是:输出结构可以由用户自己定义。但它结构简单,I/O数目有限。CPLD是在GAL的基础上发展起来的。它主要由输入输出控制单元、宏单元和互连矩阵等组成。随着电子市场对功能要求的不断提高,CPLD越来越不能满足市场的需求。它最大只有512个宏单元,大部分是组合逻辑,难以实现复杂的时序逻辑设计,并且功耗很大。随着工艺的发展,FPGA登上了历史舞台并成为主角,它内部资源丰富,不管是时序逻辑还是组合逻辑都很多。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

三、altera公司的软件使用:

其实真正对fpga有一个整体了解是在其软件的使用过程中。我在实验室里使用的是altera公司的sycloneII系列的EP2C35F484C8,所以使用的软件就是altera公司提供的quartusII和nios EDS。在quartus的使用中其他的没什么说的,只是有几点需要注意:一就是顶层文件名一定要和工程名一致;二就是工程一定不能放在含中文的目录下,否者编译会出错。

在最初使用quartus的时候就涉及到仿真和引脚分配的问题。关于引脚分配,最开始没人提示所以我以为只要弄上去不报错就行了,后来在下载到实验板上的时候,发觉根本就达不到预期的效果,于是在网上找了很多相关的技巧,也尝试过通过tcl脚本配置,网上还特推荐这种方法。后来在handbook里面终于找到了相应的治疗,发觉还是我一个一个的敲进去方彪。然后就是仿真了,在最初使用的quartusII 9.0版本中还自带仿真工具,所以就没有借用第三方的modelsim,因为感觉编写testbench也是一个很麻烦的事情,但是自从quartusII10版本以后altera公司就取消了仿真工具,而推荐大家使用第三方的modersim,哎没办法只有再去研究一下modersim破解了方法和testbench的书写了。

其实quartusII 里面还有很多实用的工具,比如说像signaltap II、timeQuest、sopc builder

等。现在我还欠缺的就是使用timeQuest进行时序收敛,这个在特权同学的视频教程中有,还需要好好去学习,而对于signaltap II 和sopc builder已经有了一定的了解。

其实sopc builder 就是以前的nios 和niosII的一个后继者,它主要就是调用别人已经写好了的一些程序来控制fpga的各个组件,当然也可以根据自己的需要进行自定义组件以达到自己的设计要求。在配置sopc的时候一定要根据自己所使用的fpga型号就行参数的设置,所以阅读开发板使用手册就显得至关重要了。

而我在配置sopc的过程中也遇到过很多的问题,现在也还有很多技巧没有学会,我在这个方面花费的时间也是特别的多的,几乎用去了我2/3的时间。刚开始配置的时候还是感觉自己学到了很多东西,也作出了很多实际的效果,给自己带来了不少的信心,可是到后面发觉自己好像只是在做一个简单的模仿的工作,于是越来越觉得自己偏离了学习的重心,而且在这个过程中也遇到了很多没有解决的问题,于是学习就有点停滞不前了。很多器件为什么需要,为什么不需要?成了困扰我的主要问题,而《Nios_II_嵌入式软核SOPC设计原理及应用》、《Nios II的那些事儿》以及用户手册和网友博客给了我很大的帮助,也补充了自己在这方面的理论知识。

在学习sopc过程中到现在也还有很多难题没有得到解决,当然不一定就是sopc的问题,也有HDL语言的问题:

第一、在配置锁相环的时候遇到一个很奇怪的问题。首先来说说锁相环的功能,锁相环主要的功能是能够进行倍频和分频并且能够产生相移。而一般的niosII软核能够工作在

100MHz的频率下,而sycloneII系列的晶振时钟是50MHz,所以一般在配置sopc的时候都需要用到锁相环,当然也可以不用。然而如果要用到SDRAM组件的时候就一定要用PLL 了,因为SDRAM的时钟和系统时钟之间有一个相移,必须通过PLL来实现相移。而PLL 的使用有两种方法,一种就是在quartusII里面添加,一种就是在sopc里面添加PLL control

相关文档
最新文档