基于FPGA的任意波形发生器设计与实现
扫描二维码
随时随地手机看文章
摘要:本文提出了一种基于可编程逻辑器件(FPGA)芯片EP2C20F484的任意波形发生器的设计方法。完成了在FPGA的控制下,USB接口控制模块、SRAM控制模块、DA转换模块等协同工作的硬件设计、固件设计以及软件设计,并给出了实验结果。实验结果表明,此任意波形发生器能够按照要求输出相应波形,达到了设计要求。
关键词:EP2C20F484;AD9726;任意波形发生器;USB2.O
0 引言
在腐蚀领域和电镀行业,常常需要使用任意波形的电流电压信号进行生产和测试。任意波形是指频率可变、幅值可变、相位可变的正弦波形和其他波形,如三角波形、锯齿波、特殊波形等。目前任意波形发生器大多采用直接数字频率合成(DDS)技术,即将波形的数字量信号存储于存储器中,嵌入式主机以一定的速率依次将存储器单元中的波形数据逐个发送给D/A转换器,合成为需要的波形。
随着微处理器日益广泛的应用和大规模集成电路技术的发展,出现了大量能够产生多种波形且性能稳定的任意波形发生器,但大多数方案都是基于串行或并行总线进行数据的传输,这种方案虽然成本较低,但系统的实时性较差,难以满足复杂波形的大数据量的传输要求。我们设计了一种基于FPGA芯片的任意波形发生器,充分利用了FPGA强大的逻辑功能,实现了利用单片FPGA芯片控制整个系统的方案。同时选择USB2.0接口芯片CY7C68013,它能较好地与FPGA芯片合作,完成系统预先设计的功能,使总体电路简单,成本低廉,产生的波形信号精度较高。数字波形数据从上位机通过USB总线直接存储在SRAM数据存储器中,通过FPGA控制,将波形数据读出,送入后向通道进行D/A转换和放大处理后得到所需的模拟信号波形。与传统的发生器在ROM或FLASH存储波形数据的方法相比,具有更大的灵活性。
1 系统总体结构及工作过程
波形发生器以FPGA为核心,它控制着整个系统的读、写、输出等操作,系统框图如图l所示。上位机将数字波形数据通过USB2.O总线送到数据存储器中,数据存储器循环地将波形数据发送到DAC电路,由DDS电路产生相应的DAC刷新时钟(0~1MHz,步进0.02Hz),DAC输出波形经缓冲放大、低通滤波、放大输出。输出的波形频率为0.1Hz(DC)~1MHz(-3dB),频率分辨率为0.01Hz。
本系统主要由五部分组成:
(1)上位机。主要功能是利用仿真软件(如CVI、MATLAB、VB等)产生所需波形数据,并通过USB接口下载到波形发生器中,其次就是存储USB2.0接口芯片的驱动程序。
(2)USB2.0接口控制器芯片。本设计使用的是Cvpress Semiconductor公司的EZ-USB FX2系列芯片CY7C68013AE。
(3)数据存储芯片SRAM。考虑到成本的因素,本系统采用ISSI公司的IS6lLV25616-10T。
(4)D/A转换芯片。本设计使用的是AD9726,该芯片控制信号简单,D/A转换速度快,因此将系统的硬件设计大为简化,也减轻了系统软件设计的工作量。
(5)FPGA控制芯片。本设计使用的是Altera公司的Cyclone II系列型号为EP2C20F484的FPGA。EP2C20F484以90nm工艺技术为基础,提供了18,752个逻辑单元(LE),并具有一整套最佳的功能,包括嵌入式18位×18位乘法器、专用外部存储器接口电路、4kbit嵌入式存储器块、锁相环(PLL)和高速差分I/O能力等。
2 系统功能及硬件实现
2.1 USB传输模块
CY7C68013有2种接口方式:Slave FIFOs和可编程接口GPIF。当FPGA与其相连时,只需要利用CY7C68013作为一个USB2.0数据通道来实现与主机的高速通信。
Slave FIFOs方式是从机方式,外部控制器可像普通FIFO一样对CY7C68013的多层缓冲FIFO进行读写。CY7C68013的Slave FIFOs工作方式可设为同步或异步;工作时钟可选为内部产生或外部输入,其它控制信号也可灵活地设置为高有效或低有效。电路连接图如图2所示。
IFCLK是同步时钟信号,FLAGA、FLAGB和FLAGC是CY7C68013内部FIFO的状态标志,EP2C20F484通过通用I/O口获得CY7C68013内部FIFO的空、半满(由用户设定半满阈值)和满这三个状态信号,ISLCS、SLOE、SLRD、SLWR对CY7C680l3进行读写操作控制,FD[15:0]是数据线,ADD[1:0]是选择4个FIFO的地址线。其工作过程为:PC机通过USB向FPGAP发送波形数据时,USB通过请求方式通知FPGA读取波形数据,FPGA首先查看空、半满和满这三个状态信号,选择一个FIFO,然后控制USB接收适当大小的数据,以保证数据不会溢出,并存入SRAM中。
2.2 DAC功能模块
从总体工作过程分析可知,从USB接口下载的波形数据存储在SRAM中,SRAM循环输出数据到DAC芯片,根据DDS原理产生模拟波形。具体电路如图3所示。
IS6lLV25616是256k×16高速CMOS工艺3.3V单电源供电的静态随机存储器(SRAM),在FPGA控制下存储从USB下载的数据,并将数据循环输出到DAC芯片。AD9726是一款16位高性能LVDS DAC,具有出色的噪声与杂散性能以及真16位直流线性度。它采用CMOS工艺制造,并利用专有开关技术来增强动态性能。该器件具有较宽的满量程电流调节范围(2mA至20mA),能够以较低功耗水平工作。其电流输出配置简便,可以用于各种单端或差分电路拓扑结构。
3 系统软件设计与实现
3.1 固件程序设计
CY7C68013内嵌有8051微处理器,用于控制芯片的工作状态设置,写入微处理器的程序文件称为固件程序(Firmware),为了便于维护和移植,一般采用单片机的C语言编写。主要有以下几种功能:a.初始化工作,包括设置一些特殊功能寄存器的初值以实现所需的设备属性或者功能,例如开中断、使能端点、配置端口等。b.辅助硬件完成设备的重新列举过程,包括模拟设备的断开与重新连接,对接收到的设置包进行分析判断,从而对主机的设备请求作出适当的响应,完成主机对设备的配置任务。c.对中断的处理。d.数据的接收和发送。e.外围电路的控制。固件程序的流程如图4所示。
3.2 FPGA程序设计
在本系统中FPGA作为主控制器,提供USB控制、DA控制、SRAM控制、I2C控制及全局时钟控制等功能模块。这里重点介绍USB接口控制模块。固化程序将CY7C68013A设置为Slave FIFO工作模式,需要FPGA提供FIFO端口的读写操作控制时序。CY7C68013A为每个端口提供了”空”标志、”满”标志和”可编程级”标志。FPGA检测这些信号,用于控制读写的过程,FPGA再完成这些端口FIFO的操作时序控制。USB控制器的状态转移如图5所示,控制器工作在五个状态中,上电复位后工作在IDLE状态,当读/写事件发生时进入状态1;在状态1中根据读/写事件使能FIFOADR[1:0]指向相应FIFO并进入状态2;在状态2,如果FIFO空/满,在当前状态等待,否则进入状态3;在状态3中,驱动数据总线,完成读/写操作,进入状态4;在状态4中,如需传输更多数据,进入状态2,否则进入状态IDLE。本系统采用Verilog HDL硬件描述语言实现了FIFO的读写时序,并在ALTERA公司提供的QuartusII8.0开发工具中综合编译并映射到FPGA中运行。
4 结果及分析
在设计结果中,最后的波形图是使用泰克公司的TDSl012型示波器得到的。经过实际的测试,该信号发生器产生的波形精度高、失真小,完全满足设计的要求。图6是产生的正弦波、锯齿波的波形结果。