您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > FPGA培训学习总结
FPGA培训学习总结一、概述我是一名毕业不久的研究生,专业是通信工程,接触EDA这个行业已经有大约4年了。这几年中主要是通过参加科研项目学习FPGA的,虽然能够实现一些东西,但是总是感觉自己对于FPGA的掌握始终不够全面和系统。中电网于去年启动了“国家信息技术紧缺人才培养工程”,其中在电子工程与集成电路技术培训项目中中电网与清华大学和ALTERA公司共同举办了FPGA技术培训,如同及时雨一般,给了我一个对FPGA技术进行系统学习的机会。通过利用业余时间在网上在线听孟教授的讲课,使我对FPGA技术有了一个较为全面和更加深入的认识和理解。使我在工作中运用FPGA技术实现信号处理算法方面更加得心应手了。基本上掌握了从MATLAB的Simulink浮点算法仿真到AlteraDspBuilder的面向实现的定点仿真,再到VHDL语言实现和时序仿真,最后到板级的SignalTap的时序检查,这一系列的通信算法开发流程。下面我就分几方面把我这一年来的学习作一个总结。二、学习总结(一)基本概念和基本知识方面以前我对于FPGA的一些基本和基本知识了解的很少,只知道它是一种现场可编程的逻辑器件。通过学习,我了解到FPGA是随着可编程技术和逻辑器件的发展而发展的。当可编程技术发展到一定阶段,同时逻辑器件的规模达到一定水平的时候,就相继出现了PAL、GAL、EEPROM、CPLD和现在的FPGA。其中最为相近的是CPLD和FPGA了,它们都是现场可编程的逻辑器件,但由于CPLD和FPGA结构上的差异,具有各自的特点:①CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。⑦在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。⑧CPLD保密性好,FPGA保密性差。⑨一般情况下,CPLD的功耗要比FPGA低,且集成度越高越明显而作为FPGA自身来说,必须具备三种可编程资源的特点:1)I/O是可编程的,用户可以设置引腿是输入还是输出,是什么电平,是CMOS电平还是TTL电平,可以决定我是有没有上拉或者是信号激变的情况,或者是速率的快慢等等,这是一个资源,可编程资源,IO就是用户可编程的。2)逻辑是可编程的,也就是说它中间的排成行和列的这些逻辑单元是可编程的,可以实现我们在第一讲的组合逻辑电路和时序逻辑电路,也就是说在这个逻辑块里头有实现组合逻辑的块和集成的元件触发器,下面我们讲到这样的东西怎么样构成可编程逻辑单元,这是第二个可编程的逻辑资源,也就是说逻辑是可编程的,那么包括了组合的逻辑和触发器的时序电路;3)可编程的互连线资源,在贯穿了行和列的逻辑块之间,分布了很多的互连线,这些互连线是可编程的,你用哪些用什么方式来把各种的功能连接起来完成我所要做的设计。那么具有这三种可编程资源以后呢,就构成了FPGA。我们又根据FPGA的逻辑实现的方式和它可编程的方式分为两类,一类它的逻辑是用查找表来实现的,编程是通过SRAM方式来实现的,把这个类叫做SRAM查找表结构,主要的代表厂商有ALTERA、XILINX和LATTICE;还有一类逻辑是通过多路开关来实现的,编程是通过熔丝的通断来实现的,我们称它为多路开关反熔丝结构,或者说是反熔丝的多路开关结构,主要的代表厂商一个是Actel,另外一个是Quicklogic。这两种结构最大的区别是基于SRAM查找表结构的FPGA能够反复的对器件进行编程,而基于多路开关反熔丝结构的FPGA只能一次性的对FPGA上的资源进行编程;另外就是基于SRAM查找表结构的FPGA的功耗略高于基于多路开关反熔丝结构的FPGA,所以当对功耗有严格要求的时候,可以考虑采用基于多路开关反熔丝结构的FPGA。(二)时序设计的一些基本原则在学习工程中,我感到对我帮助最大的是第五章所讲的时序设计工程中所应遵循的一些基本原则。因为我在以前的设计中基本上不知道这些原则,所以设计的一些时序很难稳定,逻辑也显得特别凌乱,没有章法。而学习了这几个基本的原则以后,给我的设计提供了一个基本的遵循依据,而且遇到一些问题的时候,能够正确地把握住大的设计方向。这几个原则分别是:1)面积和速度的平衡与互换原则所谓“面积”是指一个设计师所消耗的FPGA/CPLD的逻辑资源数量。所谓“速度”是指涉及在芯片上稳定运行时所能够达到的最高频率。面积和速度是一对对立统一的矛盾体,要求一个设计同时具备设计面积最小,运行频率最高是不现实的。科学的设计目标应该是在满足设计时序要求(包含对设计最高频率要求)的前提下,占用最小的芯片面积;或者在所规定的面积下,使设计的时序余量更大,频率更高。面积与速度互换的原则是设计的一个重要思想。从理论上讲,一个设计如果时序余量较大,所能跑得频率远远高于设计要求,那么就能通过功能模块复用减少整个设计消耗的芯片面积,这就是用速度的优势换面积的节约;反之,如果一个设计的时序余量要求很高,普通方法达不到设计频率,那么一般可以通过数据流串并转换,并行复制多个操作模块,对整个设计采取“乒乓操作”和“串并转换”的思想进行处理,在芯片的输出模块处再对数据进行“并串转换”,这就是用面积换速度的思想。2)硬件原则硬件原则主要是针对HDL代码编写而言的。FPGA的逻辑设计所采用的硬件描述语言,VHDL或者Verilog跟软件语言里面的C和C++是有着本质区别的,以Verilog语言为例,虽然它的很多语法规则和C语言相似,但是Verilog作为硬件描述语言,它的本质作用在于描述硬件,其最终实现结果是芯片内部的实际电路。所以评判一段HDL代码优劣的最终标准是其描述并实现的硬件电路的性能(包括速度和面积两个方面)。因此片面追求代码的整洁、简洁是错误的,是与评价HDL的标准背道而驰的。正确的编码方法是,首先要做到对所需实现的硬件电路“胸有成竹”,对该部分硬件的结构与连接十分清楚,然后再用适当的HDL语句表达出来即可。3)系统原则系统原则包含两个层次的含义:更高层面上看,是一个硬件系统,一块单板如何进行模块划分与任务分配,什么样的算法和功能适合放在FPGA里面实现,什么样的算法和功能适合放在DSP、CPU里面实现,或者在使用内嵌CPU和DSPBlock的FPGA中如何划分软硬件功能,以及FPGA的规模估算数据接口设计等;具体到FPGA设计就要求对设计的全局有个宏观上的合理安排。要知道在系统上复用模块节省的面积远比在代码上小打小闹来的实惠的多。4)同步设计原则同步时序设计是FPGA/CPLD设计的最重要原则之一。在时序设计时,应尽可能的采用同步设计的原则设计。由于同步时序电路的核心逻辑用各种各样的触发器实现的,而异步时序电路的核心逻辑则使用组合逻辑实现的;并且同步时序电路的主要信号、输出信号等都是由某个时钟沿驱动触发产生的,而异步时序电路的主要信号、输出信号等并不依赖于任何一个时钟信号而产生。这样就使得同步时序电路能够很好的避免毛刺,而异步时序电路则很容易产生大量的毛刺,导致系统不稳定;而且同步设计还有利于器件移植,静态时序分析和验证设计时序性能。这使得我在时序设计的时候,严格采用同步设计的思想,设计的时序电路比以往的设计在稳定性方面有了较大的提高。(三)其它方面的收获这次的培训,从内容上来讲包括了有关FPGA设计的方方面面,以上我主要总结了在学习过程中感觉对自己帮助最大的一些方面,对于其它的一些收获我在这里简要的作一个总结:首先,在VHDL语言的学习中,使我掌握了一些语言运用的细节技巧,并对以前的一些出错和不稳定现象有了一个较为深入的认识和理解。例如:在Process的使用过程中,敏感信号的清单一定要给全,否则在逻辑综合的时候就会自动产生不必要的锁存器,导致实际时序与所设计的时序不相符的现象出现;还有,在编写时序的时候,应尽量避免if语句的嵌套,这是因为嵌套的if-then-else可能增加硬件的实现面积和信号的延时,如果可能的话,应该尽量用case语句来描述相同的功能,其优点是紧凑和延时能够优化地在单个逻辑单元中实现;又如,在使用if和case语句的时候,所有的分支中所有的输出必须定义,在组合的进程中把所有的分支都定义,才能防止出现锁存,才能保证所设计的时序与实际相符;再比如,在异步时钟域的转换设计中所产生的“亚稳态”,也有了一个比较深入的了解,包括“亚稳态”的产生,所产生的现象,以及如何采取措施避免“亚稳态”的产生等;另外,学会了可编程逻辑常用的一些思想与技巧,即“乒乓操作”技巧、“串并的转换”技巧、“流水线操作”技巧等;所有这些都给我在工作中进行时序逻辑设计的时候带来了较大的帮助,加深了对FPGA时序逻辑的理解,同时使我对故障的判断也较以前更加快速准确了,大大提高了我硬件调试的经验和水平。其次,在学习中我对时序逻辑的功能仿真和后仿真、软件设计的综合、布局布线以及时序分析和设计优化等有关FPGA设计流程的几个重要环节有了进一步的理解,掌握了一些基本的设计技巧;还有,就是对于LogicLock模块化设计、基于FPGA的DSP嵌入系统开发工具DspBuilder以及基于FPGA的嵌入式处理器的系统开发工具NiosII及SOPCBuilder等设计工具的用途和开发流程有了一些基本的了解,扩展了FPGA设计的知识面,也拓宽了我对一些设计的思路,具体的运用技巧将在今后进一步阅读相关文档加以提高。(四)对培训工作和课程讲授的意见和建议总的来说,我认为这次的培训举办的还是不错的,培训的内容包含广泛,几乎把所有有关FPGA设计的知识点都包含在内了,其中的一些内容对于一些刚入门的设计者来说的确具有十分重要的指导意义,可以使他们在设计中少走很多的弯路。但是我觉得美中不足的是对于一些较复杂的设计工具的讲解过于肤浅了,好像仅仅停留在介绍的层面,这对于想通过该培训全面掌握FPGA的设计者来说似乎是不够的。因此我建议,在讲解LogicLock、DspBuilder以及NiosII和SOPCBuilder等设计工具的时候,多加进一些设计的例子,通过讲解一个中等复杂度的例子,能够更好的使学员掌握一个工具的使用,并且更加加深印象。(五)本人所设计的两个课件针对这次培训,本人利用业余时间做了两个较为简单的课件设计,在这篇总结的最后一一加以介绍。课件一:利用DspBuilder设计的一个简单的信号处理流程。系统的大致组成如下:首先用两个数字频率综合器DDS产生两个不同频率的正弦波相加,然后设计一个FIR低通滤波器将较高的频率分量滤掉,将较低频率的正弦波输出。其中DDS由累加器和LUT组成,通过累加不同的常量,可以为LUT提供不同频率的锯齿波,而在LUT中存储了一个周期的正弦样点值,共32个。那么在最高时钟50MHz的作用下,当累加器的步进为128,输出的位宽为10时,DDS所输出的正弦波频率
本文标题:FPGA培训学习总结
链接地址:https://www.777doc.com/doc-958158 .html