FPGA只要逻辑资源允许,它内部也可以构建n处理模块,n个软核cpu。数字信号处理应用是目前科技创新的一个前沿阵地,现在FPGA以其并行性和高DSP处理性能进入到信号处理领域。目前mathworks公司的MatLab开发工具就是一个很好选择,拥有算法仿真到RTLCOREGENERATE,使得FPGA的DSP应用开发流程得以完整的实现,各个FPGA厂商也提供了各自的MatLabsimulink下的工具套件,比如Altea的DSPBuilder,这些软件完成了算法描述到硬件状态逻辑处理机的转换。这种开发方式现在还处于初始阶段,软件工具、开发习惯等都需要我们有一个学习积累过程。
现在越来越多的模块被集成到FPGA芯片上,微处理器、高速收发器、以太网控制器、PCIE端点控制器、DSP处理单元、片内RAM等等,FPGA不再是一个单纯的编程逻辑器件,而是一个弹性很好的系统集成的平台,走出了IC原型验证的范畴。是一个很现实并且有前途的选择。
2.学习和进阶
FPGA在电子开发工作中已经上升到数字系统核心处理器,尽快掌握FPGA开发技术显得非常迫切。我们来自五湖四海,为着一个共同的目标走到一起来了,我们中间可能有学生,学好一门技术追求好的发展,也可能已经是工程师,要寻求好的解决方案。
FPGA开发对学习者的要求相对是比较高的,我们上一节所说的,FPGA是一个可以实现软硬件协同设计的平台,即需要硬件也需要软件,而且软件开发也比较多,不同FPGA提供商提供各自的开发环境,还有第三方的软件工具。我们可以按下面的几个方面开始
HDL语言的学习
VHDL和VerilogHDL都可以,HDL语言是FPGA开发的基础,先掌握一门,以后根据需要去理解掌握另一门会比较方便,两门都会是最好的,因为提供有关代码资源的可能是你不熟悉的HDL,有时我们还需要把这个语言实现的翻译成另一个语言,以便在开发环境上统一实现。如果你有C语言基础,推荐学VerilogHDL,因为语法上类似,需要注意的点是
a、Verilog是描述,而不是运行代码。代码综合以后是逻辑网表,而不是指令,
所以需要注意我们写的代码是否正确描述了需要实现的逻辑电路。
b、除了逻辑功能,还要把描述中的时序给看出来,一开始的时候,可以根据代码尝试着把波形画出来,尽管仿真软件也能做到这个,还是建议自己画以加强对语言的理解,可以用仿真软件来验证你画的波形
c、注意区分哪些是可综合的,哪些是不可综合的代码,这个对出学Verilog的人会比较困惑,因为C只要语法正确,可以编译就能运行,而Verilog一些代码只能在仿真环境中用,不能综合成实际的电路
d、要多关注描述代码综合后的电路,不能象C语言那样写好了就行,Verilog写好代码只能算做了一半工作,还要做仿真,如果时序不满足还可能调整程序代码。
e、多写多试,这个方法对学习任何事物都一样,如果有环境,即使没有老师指导照样可以试出来。
f、多看代码,特别是原厂提供的代码,这些代码应该代表了比较高的FPGA设计水平,从中我们可以学习两个方面的知识:一是相对比较大规模的逻辑设计如何组织模块结构,二是局部应用处理,可以照搬,作为我们开发时的模板。熟读唐诗三百首,不会作诗也会吟,看多了,就会习惯的学会他们的开发模式,我有这样的体会,看多了,很多东西思想上已经把它当作是自己的理所当然的东西了,实际一做,手生的很,遇到很多问题,解决这些问题,这个过程就通过了,学习就需要这么个过程
Modelsim仿真环境的使用
学习HDL需要有一个编译、验证环境,首推的就是Modelsim,Modelsim在各家FPGA厂商的开发工具中都提供内置或外挂,这种共性的工具自然是越多越好。有很多数据介绍Modelsim的使用,网上有很多介绍资料,在此不在赘述。
选择合适的开发板,熟悉一种器件
一款合适的开发板是学习进步的捷径。现在原厂和国内很多公司都提供FPGA学习开发板,可以根据需要选购。在使用开发板前可以先看安装使用说明,明确开发选用的芯片型号,以及外围配置,然后根据芯片型号去相关厂商公司下载该芯片的数据手册,详细阅读一遍很有好处,现在FPGA芯片更新换代比较快,一般2~3年就换一代,所以要适应英文资料的阅读,而且大量应用文档也是以英文形式提供的。
FPGA厂商主要开发软件工具的使用
目前主要的FPGA厂商有Altera、xilinx、lattice都提供的了各自的FPGA开发环境,分别是:Altera的QuartusII,Xilinx的ISE,Lattice的ispLever。我们可以选择先熟悉一家公司的环境(或者根据开发板的具体芯片选择厂商环境),以后根据器件选择需要,再去熟悉其他的环境,学习周期就可以短了。通用的步骤是:建立项目,设计输入(代码或原理图),功能仿真,引脚锁定和相关时钟约束,综合,功能仿真,影射、布局、布线,时序仿真等等。这个过程需要一段时间去熟悉。
如果你是单片机系统转过来学习软核系统的开发,也需要掌握这些工具,同时掌握厂商提供的系统集成工具和软件开发工具,Altera提供的集成环境是SOPCBuilder,软件开发环境是NIOSIIIDE。Xilinx提供的集成环境是XilinxPlatformStudio,软件开发环境是:XilinxPlatformStudioSDK。
分析和实现参考设计
一般开发环境会自带example目录,这些都是典型的开发范例,强烈建议分析这些范例,并在自己的开发板环境中实现,这个过程可能需要我们修改一些设置和环境,比较硬件的不同,但这是一个很好的锻炼机会。另外开发板也会随板提供开发范例,分析这些范例,并常试修改他们也是很好的机会。遇到问题是很正常的,我们的进步就是建立在遇到问题并解决问题基础上的。
设计实现自己的应用系统
要明白一点,设计开发一个环境比使用一个环境要求要高很多,就象会使用计算机和会设计制造计算机一样的差别。特别是自己去设计一个系统的时候,建议学习者设计一个自己的系统,不论系统的大小。这样会遇到方方面面的需要考虑的问题,能够把上述学习的知识做一个考核,顺利通过后就会在知识和能力上得到及大的提升,特别是在开发信心上得到强化。建议把遇到或想到的问题都罗列记录在笔记本上,并尝试逐个排查解决,这个过程中我们可能需要阅读很多原厂提供的文档,或者网上搜索到的资料,把每一个疑问逐一解决,做到没有疑问,这样我们设计的系统就会顺利达到目标。
前不久我就实际体会了这个过程,我们以前都是使用Altera的FPGA器件,熟悉他们的工具也熟悉他们的器件,但客户需要我们开发Virtext5PCIE系统,我们从4月份开始着手,到8月份完成样板,用了4个月,熟悉开发环境,并阅读了所有Virtex5的文档,很多测试代码,实际上在设计过程中已经写了并在ISE环境下编译,因为FPGA设计很重要的一点是规划pin和逻辑功能块在FPGA内的分配,所以需要在原理图设计过程中就做FPGA项目并在ISE软件中编译检查和验证,这样在PCB设计时原理图基本是可行的,同时在PCB设计中做好板级仿真,这样能减少了样板的反复修改,我们这样努力的结果是:一次投板成功。良好的开始是成功的一半,特别要在第一块板的设计制作过程中用尽心计,保证成功,确保我们开发工作的信心。
开卷有益,勤于实践,持续提高设计能力
FPGA芯片技术和开发技术发展很快,学习任务重,另外罗马不是一天建成的,需要我们在工作中不断的积累。FPGA设计有点象围棋:易学难精。需要我们不断拓宽知识面,不厌其繁的去尝试,仔细去看编译综合报告,时序分析报告,并去尝试提升性能,从底层更深入的去理解硬件电路的设计,改进、尝试性能的提高。
很多单位有非常好的高级FPGA培训,这是个很好机会,可以和高手切磋技艺,咨询开发中遇到的问题和解决办法,这个很令人期待。但很多人可能象我所处的环境一样没有提供这样机会,我建议是开卷有益,多看书,现在FPGA方面的新书出来的比较多,一些开发高手,或多或少的在他们的介绍中提供了提高的途径,我都会仔细的阅读。另外网上有很多各个专题的文档也是很好的阅读对象。
带着问题学习是最有效率的,如果一些问题捆绕着我们,我们就会对这些问题的解决很关注,很多时候,不经意之间,我们所需要的信息来了:别人的一句话,资料上的一句提示,或者其他人开发的代码中等等,都会是我们提高的途径。
就象大型数据库性能调整一样,时序性能的调整提高是FPGA开发能力的标志,各个FPGA厂商都会提供很多解决方法,学习者要注意去逐步的学习使用这些方法。
只要不断的努力,一定可以持续提高我们的FPGA设计能力。
3.目前的开发方法应用介绍
目前,在FPGA上有三种类型开发方法和应用方向:a、逻辑类应用b、软核类应用c、DSP类应用。
逻辑类应用我们接触的最早,也是FPGA最初的应用领域,大的应用上,一些数字IC设计可以在FPGA做前期的功能验证,在通信领域,FPGA做信号的编解码等等,小的应用上我们做的最多的实际是CPLD,完成信号的变换控制等等。
软核应用是前几年才兴起,现在热门的开发应用方法,在原本需要FPGA结合CPU的地方有成本和灵活性优势。
FPGA的DSP应用是非常有潜力的,性能优势非常明显。开发方法是用Matlab的simulink中嵌入厂商的开发工具包,算法验证在Matlabsimulink工具下完成,在开发工具包的支持下生成HDL模块或者直接生成FPGA下载配置文件,这个方向是FPGA应用最有挑战能力领域。Mathworks公司不久前也推出了独立于FPGA厂商的SimulinkHDLCoder工具,使的Matlab在数字系统设计领域迈出了坚实的一步,把Simulink模型和Stateflow框图生成位真(Bit-Ture)、周期精确(Cycle-Accurate)、可综合的Verilog和VHDL代码,为Matlabsimulink用户提供了通往FPGA设计实现的直接通道。