引言
现场可编程逻辑门阵列FPGA器件的出现是超大规模集成电路技术和计算机辅助设计技术发展的结果。FPGA器件集成度高、体积小,具有通过用户编程实现专门应用功能。它允许电路设计者利用基于计算机的开发平台,经过设计输入、仿真、测试和校验,直到达到预期的结果。目前使用最多的Quartus
II 软件支持几乎所有的EDA工具,并且可以通过命令行或Tcl脚本与第三方EDA工具之间进行无缝连接。但在很多工程设计应用中,由FPGA器件完成的主程序中只完成大量的数学运算,程序调试时以二进制输出的信号可视性差,给设计人员进行仿真、调试带来了很多不便。对于很多工程设计人员来说MATLAB是一种熟悉的具有强大的运算功能和波形仿真、分析功能的软件,如果能将FPGA与MATLAB接口,就可以快速、准确、直观地对FPGA程序进行校验和仿真,尤其在波形信号处理等工程应用领域具有实际意义。
Quartus II 开发软件
Altera公司的QuartusII软件提供了可编程片上系统(SOPC)设计的一个综合开发环境。Quartus II 开发工具人机界面友好、易于使用、性能优良,并自带编译、仿真功能。QuartusII软件支持VHDL和Verilog硬件描述语言的设计输入、基于图形的设计输入方式以及集成系统级设计工具。QuartusII软件可以将设计、综合、布局和布线以及系统的验证全部都整合到一个无缝的环境之中,其中也包括和第三方EDA工具的接口。QuartusII设计软件根据设计者需要提供了一个完整的多平台开发环境,它包含整个FPGA和CPLD设计阶段的解决方案。图1说明了QuartusII软件的开发流程。
图1 Quartus II软件的开发流程(略)
在实际应用设计中,对程序原理性及可执行性的验证主要集中在程序修改阶段,尤其在处理的数据复杂、繁多时,Quartus II自带的波形输入仿真就很难实现程序的验证,而且输出的数据不能方便的以波形图示直观的呈现,给程序设计者在校验程序阶段带来了很多的不便。再有,在很多数字电路设计中,考虑成本的问题,FPGA实现的往往是设计的核心部分,而很多的外围电路如A/D转换器、D/A转换器等仍然使用传统的接口芯片来实现。而QuartusII
设计只是针对数字信号,并不支持模拟量的输入。而仅仅为了便于程序的验证而用FPGA实现这些外围电路,不但会大大延长程序的开发周期,更会增大开发的成本。而MATLAB具有强大的运算功能,可以容易的实现A/D、D/A转换等外围电路功能,并能以波形形式将结果直观地呈现,极大地方便了程序设计人员设计应用系统。
QuartusII与Matlab的接口实现
接口原理
VHDL程序从根本上讲就是将一些现有的数据进行处理,并输出预期的数据。QuartusII 软件的波形文件(.vwf文件)可以根据设计人员的要求灵活输入。但在大多数情况下需要仿真的波形数据数量庞大,这样的输入方式就明显不能满足仿真的要求了。而上述提到的一些外围电路的作用也是将需要处理的数据输入到程序中,并将处理过的数据输出到指定的装置。根据这一原理,用一个输入、输出寄存器就可以方便的实现与MATLAB之间的接口了。QuartusII工具中提供了很多种类的寄存器宏模块,并能根据用户的要求进行编辑。使用这些宏模块可以很容易地实现与MATLAB之间的接口。下面就是几种RAM宏模块:
表1:RAM宏模块举例(略)
接口的实现
数据的输入
很多FPGA程序在仿真时,需要输入特定条件下的数值。程序设计时,可以在输入端口前加一个预置的存储器,那么初始数据的输入就变成了该寄存器的初始化。一般情况下,这些初始数据很容易用MATLAB软件经过计算实现。QuartusII中提供了两种寄存器的初始文件格式,.mif文件和.hex文件。由MATLAB生成的数据可以方便的根据指定路径加载到寄存器模块中。
数据的输出
数据输出和数据输入的原理是相同的。将寄存器中的.mif文件或.hex文件导出,并加载到MATLAB中相应的变量中,MATLAB的波形仿真功能就可使设计人员方便直观地观察程序结果了,这样大大地方便了设计人员在设计早期对程序进行校验。
应用举例
这里以一个简单的FFT谐波分析过程的设计为例,说明如何在FPGA设计中灵活地应用MATLAB来完成设计的初步仿真和验证。FPGA的快速运算虽然能更好的实现了FFT,但大多数FFT设计并不能预知处理对象的准确波形,而QuartusII更不能提供直观的结果观察。为了验证设计的可行性,在设计时,在输入、输出端分别设置一个数据存储器,数据存入的时序可以根据设计的要求灵活控制,存储需要的数据。需要注意的一点就是,对于大量数据的波形验证,存储器的加入会使设计的资源变大,初步验证时需使用比预计的容量大的器件。在程序的初步验证之后,就可以在预定的器件中进行编译配置,然后进行进一步的调试。
程序设计
如图2所示,程序设计大致分为四个模块,主程序模块、输入存储器、输出存储器以及控制模块。主程序模块是FFT的设计程序,来完成预期的数据处理,而输入、输出存储器则为与Matlab的接口程序,控制模块则控制数据的输入、输出,也即是接口模块的控制。
图2 FFT程序设计(略)
接口的设计
假设设计时的A/D接口采样频率为50kHz,即一个周期内的采样点数为1000点。在MATLAB中可以很容易的实现公式(1)所示的信号的A/D采样。根据采样要求,就可以确定输入存储器的容量为12
1000bit。将MATLAB中生成的目标向量以相应的二进制表示,并导入到该输入存储器中,就完成了输入存储器的初始化。所得的结果输出原理亦同,在MATLAB中建立大小相当的向量,将输出存储器中的数据导入到该向量就可以直观的形式观察输出的结果。那么设计中的关键问题主要就集中在了控制模块的设计。该模块的时序必须与外围电路时序、主程序中的时序相匹配,以达到逼真模拟真实A/D等外围电路的作用。
图3(a)x1信号输入及频谱输出(略)
图3(b)x2信号输入及频谱输入(略)
结果仿真
任意取两个不同的输入信号如下:
x1=5sin(wt+pi/4)+3sin(3wt)+sin(5wt)
x2=3sin(3wt)+2sin(5wt)+cos(7wt)
按照上述的程序设计流程,可以由FPGA快速计算得到任意波形的FFT处理结果,并以直观的结果方便程序设计人员的初步程序调试。
结论
FPGA器件的最大的优势就是具有更快的速度、更灵活的控制方式及现场可编程功能,但处理对象只限于数字信号,因而给程序的初期调试带来了不便。而MATLAB具有强大的计算功能,尤其便于实现数字信号与模拟信号之间的灵活转换,并将结果直观呈现。仿真结果证明,将两种设计软件结合使用,可以大大地方便工程设计人员进行初期修正。
|