随着电子技术的飞速发展,嵌入式系统的需求越来越大、应用领域也越来越广泛。数据采集是嵌入式系统不可或缺的组成部分,其性能在某种程度上直接决定了整个系统能否满足设计的要求。目前,数据采集部分的实现基本上都是利用单片机或者ARM片内集成好的AD外设。这种AD外设的性能参数往往都已经在片上固化好了(即具有不可更改性),而且与其他片内外设不可分离地组合在了一起,从而使得整个系统的设计具有很大局限性。加之市面上单片机、ARM的款式型号非常有限,使用者不得不在性能与成本上作出折中的选择来满足所设计系统的要求,由于这种设计方案是不可更改的,且应用范围小、可移植性差,因此往往无法满足客户更高的要求。
Nios II是Altera公司开发的第二代可进行SOPC设计的RISC型处理器软核,具有定制指令、硬件加速、可重配置、低成本和无与伦比的灵活性等特点[1]。基于NiosII处理器的通用AD IP核是一种全新的设计思路与实现方案,它可以将市面上任意一款AD芯片制作成IP核并集成到NiosII系统中使用,具有高性能、参数可配置、可移植、可裁剪等特点,并且具有很高的灵活性、实用性,从而更能满足设计的要求。
本文提出了一种基于NiosII处理器的通用AD IP核来实现嵌入式数据采集系统的新方案,在Altera公司的FPGA芯片CycloneII EP2C35F484C8 上完成了硬件验证,最终应用到某数据采集系统的设计中。
1 通用AD IP核的整体构架
通用AD IP核是针对所有AD芯片设计的,它可以将市面上任意一款AD芯片集成到NiosII系统中使用,其整体构架如图1所示。
整个通用AD IP核主要由4个子模块组成:AD 控制器模块、FIR 滤波器模块、FIFO 缓存模块和带Avalon-MM Slave接口的寄存器文件模块。首先AD控制器控制AD芯片对外界的模拟信号的采集,采集到的数据送入FIR滤波器进行数字滤波,然后将经过数字信号处理后的数据存入FIFO缓存中,当FIFO缓存数据为满时,会向NIOSII处理器产生一个中断,顶层应用程序可以通过中断服务程序将FIFO中的数据读到内存中进行处理。带Avalon-MM Slave接口的寄存器文件模块提供了所设计的AD IP核的任务逻辑与Avalon交换结构交换信息的途径。有了寄存器文件模块,NiosII处理器就可以通过Avalon接口采用“基地址+地址偏移量”的方式来访问AD IP核内部的各寄存器[2]。
2 AD IP核各个模块的设计与实现
由于市面上AD芯片的种类和型号非常多,不可能在此一一进行阐述。本设计以一款常用的典型AD芯片TLC549为例,详细阐述针对这款AD芯片的IP核的各个模块的设计与实现。
2.1 AD控制器模块的设计
本系统采用AD转换芯片TLC549,它是TI公司生产的一种低价位、高性能的8位A/D转换器,它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统[3]。
本文利用有限状态机的方法采用Verilog HDL硬件描述语言设计了一个TLC549控制器,从而完成了对TLC549 AD芯片的时序控制,它的状态转移图如图2所示。
由图2可以看出,状态机一开始处于idle状态。在下一个clk时钟周期上升沿时刻进入cs_low状态,在cs_low状态将cs输出引脚拉低并延时2 μs。当2 μs延时完成时,状态机进入sclk_low状态,在sclk_low状态将sclk输出引脚拉低并延时0.5 μs。当0.5 μs延时完成时,状态机进入sclk_high状态,在sclk_high状态将sclk输出引脚拉高并延时0.5 μs,同时读取串行数据线miso上的AD采样值并将其存入移位寄存器中。当0.5 μs延时完成时,进入finish状态,在该状态状态机对已经接收到的串行数据位数进行判断,如果小于8说明串行数据还没有接收完毕,加1并进入sclk_low状态;如果等于8说明8位AD采样值已经接收完毕,进入delay状态。在delay状态将延时30μs,当30 μs延时完成时将进入load状态。在load状态,状态机在data_ready输出引脚上拉高一个clk时钟周期并在data[7..0]引脚上输出接收到的8位采样数据。在下一个clk时钟周期上升沿状态机将自动进入idle状态,以进行下一次AD数据采集。由此周而复始不断循环从而完成通过TLC549 AD芯片实现对外界模拟信号的实时采集。[page]
本文采用Quartus 软件集成的Signal Tap II 嵌入式逻辑分析仪软件对TLC549控制器模块进行硬件仿真,波形如图3所示。
由图3可以看出,在cs、sclk和miso信号的时序配合下,data信号线上输出稳定的8位AD采样数据,经过数字量到模拟量的转换发现与外界输入模拟值一致,从而完成了TLC549控制器模块的验证。
AD控制器模块是针对某一款具体的AD芯片而设计的,如果选用不同款式的AD芯片,则需要参考该芯片的芯片手册设计针对该款AD芯片的AD 控制器模块。
2.2 FIR滤波器模块的设计
在实际应用的数据采集系统中,往往需要对外界模拟输入信号进行滤波,以提取信号中有用的信息。在本设计中这部分的功能是由FIR滤波器模块来完成的。FIR滤波器模块采用Altera公司提供的FIR IP核来实现,通过Simulink软件中的DSP Builder工具对其进行仿真并最终可以生成底层HDL代码。由于TLC549的最高采样频率为40 kHz,本文设计了一个低通滤波器,它的采样频率为40 kHz,3 dB截止频率为100 Hz。在Simulink软件中建立的FIR IP核的仿真模型如图4所示。
图4中nco_v8_0模块和nco_v8_1模块是2个数控振荡器,分别用于产生100 Hz和1 kHz的正弦信号,signal add模块是并行加法器,它将两路正弦信号进行叠加并将和信号输出。fir_compiler_v8_0模块是FIR IP核,它将signal add模块输出的和信号作为输入,并将数字滤波的结果输出到示波器进行显示。仿真结果如图5和图6所示。
由图5可以看出:第1路是频率为100 Hz的正弦信号,第2路是频率为1 kHz的正弦信号,第3路是前两路信号的叠加。图6中显示的是经过数字滤波后的波形,可以看出只有100 Hz的频率分量存在,1 kHz的信号被滤除了,从而完成了对FIR IP核的功能验证。通过图4中的Signal Compiler工具可以完成该FIR IP核的底层HDL代码的生成。[page]
FIR滤波器模块采用Altera公司提供的FIR IP核来实现,具有高性能、可配置、可重用等特点。设计者只需根据整个系统的需求以及所选用AD芯片的采样速率等参数确定滤波器的类型与系数,并对该IP核进行参数化、实例化,即可完成针对该款AD芯片的FIR滤波器模块的设计。因此这部分的设计对于不同的AD芯片是相对独立的,具有很好的通用性。
2.3 FIFO缓存模块的设计
为了连续和正确地采集数据,实现无缝缓冲,本设计利用了FIFO做数据缓存。由于TLC549是8位的AD芯片,故本设计采用1个512×8 bit 的FIFO来存储采样的数据。当FIFO中的数据存满时,它会向Nios II CPU产生一个中断信号。顶层应用程序可以通过中断服务程序将FIFO中的数据读到内存中进行处理。这样既不会造成数据的丢失,同时可以保证CPU较高的效率,很好地解决了上述的速度不匹配的问题。
FIFO缓存模块的设计对于不同的AD芯片是相对独立的,设计者只需根据所选用AD芯片的精度、采样速率、时钟速率等参数确定FIFO缓存的位宽和深度,并对FIFO进行参数化、实例化,即可完成针对该款AD芯片的FIFO缓存模块的设计,因此具有很好的通用性。
2.4 带Avalon-MM Slave接口的寄存器文件模块的设计
本文设计的带Avalon-MM Slave接口[4]的寄存器文件模块是具有Avalon-MM Slave 从端口的外设。它内部共有2个8位寄存器,具体结构和功能如表1所示。NiosII处理器可以通过Avalon接口采用“基地址+地址偏移量”的方式来访问这2个寄存器,从而实现对AD IP核的控制以及AD采样数据的读取。
对于一些比较复杂的AD芯片(如AD73360),往往需要对其写控制字、读状态字,这就需要增加寄存器文件模块中的寄存器个数来完成相应的逻辑功能。Avalon接口采用“基地址+地址偏移量”的方式来访问寄存器,这样就可以简单地通过增加地址线的位数并进行译码来实现,因此对于各种复杂的AD芯片具有很好的可扩展性和适用性。
3 整个IP核在NiosII系统中的硬件测试
本设计采用Verilog HDL语言建立了一个顶层文件tlc549_adc_ip.v,通过对AD控制器模块、FIR滤波器模块、FIFO缓存模块和带Avalon-MM Slave接口的寄存器文件模块进行实例化与互连,最终完成了整个IP核的设计,它的模块图如图7所示。
本文采用C++语言做了一个基于NiosII处理器的顶层应用测试程序,利用描点法将不断采集到的AD数据绘制成波形显示出来,从而完成对整个IP核的硬件功能测试。测试过程中,在AD芯片的模拟输入端输入一个由1 kHz正弦信号和100 Hz的正弦信号叠加而成的混合信号,整个系统的运行结果显示在NiosII IDE软件的Console控制台中,如图8所示。
通过对图8中的正弦波形以及采样到的数据进行分析与计算可知,采集到的信号频率是100 Hz,信号的幅度与外界的模拟输入信号完全一致,从而验证了整个IP核的功能正确性。整个IP核使用5 275个LE,占总数的15.8%,4 096个存储单元,占总数的0.8%。系统的主频能达到199.64 MHz。[page]
为了验证AD IP核的通用性与适用性,本文还针对另外两款AD芯片(AD7476和AD73360)进行了IP核制作与测试,且测试信号与TLC549 IP核的测试信号完全相同。
AD7476 IP核采用了上述通用AD IP核的设计方法,它的AD控制器模块是针对AD7476这款 12位串行AD芯片而设计的。FIR滤波器模块的参数与TLC549 IP核中的FIR滤波器参数相同,只是输入数据的位宽设置为12位。由于AD7476芯片的采样速率比较快,所以FIFO 缓存模块的深度设置为1 024,位宽设置为12位,这样可以使NiosII CPU的效率更高。
AD73360 IP核同样也采用了上述通用AD IP核的设计方法,它的AD控制器模块是针对6路16位串行AD芯片AD73360设计的。它的FIR 滤波器模块的参数和FIFO 缓存模块的参数与TLC549中的相应参数设置相同,只是把位宽设置为16位。由于控制的过程中需要对AD73360芯片内部的寄存器进行读写,所以在寄存器文件模块中增加了两个寄存器(1个读状态字寄存器,1个写控制字寄存器),从而完成对AD73360芯片内部控制与状态寄存器的读写。
这两款AD IP核与TLC549 IP核的比较如表2所示。由表2可以看出,本文提出的基于NiosII处理器的通用AD IP核对于不同精度、不同采样速率、不同时钟速率、不同通道数的AD芯片都适用,并且具有较高的性能和灵活性。在实际应用中,如果对该IP核所占用的资源数有一定的限制,可以自行编写FIR滤波器模块,这样能大大降低IP核所占用的资源数,从而实现整个IP核的性能与资源之间的平衡。
参考文献
[1] Altera Corp. NiosII处理器参考手册,2008.
[2] 李兰英. NiosⅡ嵌入式软核SOPC设计原理及应用. 北京:北京航空航天大学出版社,2006.
[3] TI Inc. TLC549 datasheet.1996.
[4] Altera Corp. AVALON总线接口规范使用手册,2008.
上一篇:安富利推出Virtex-6 FPGA DSP 开发工具套件
下一篇:FPGA上同步开关噪声的分析
推荐阅读最新更新时间:2024-05-02 21:02