**这是本文档旧的修订版!**
学习目标
在这个项目中,我们将通过FPGA+串行DAC构成一个简单的任意波形发生器,从而学习信号合成的基本原理以及如何用FPGA内部的SRAM构成存储波表的ROM,通过产生能够访问这些波表的地址指针达到调整输出信号频率的目的。在本项目训练中需要掌握的知识点:
- 按键输入及防抖处理
- FPGA内部软核的调用及ROM构成
- 信号的频谱变化
- 串行DAC的工作原理及数据/控制接口
- 信号流程中的时序及各级时钟产生
项目要求
本项目采用Analog Devices公司的8位串行DAC芯片AD5601,小脚丫FPGA模块通过SPI总线与AD5601连接,AD5601输出模拟信号,通过一个RC低通滤波器进行抗混叠绿波,得到最高频率为200KHz以内的信号。具体要求如下:
- 输入:5个按键,用于控制输出信号的波形以及频率选择
- 时钟:25MHz晶振,FPGA内如需更高频率的时钟可以通过FPGA内置的PLL电路来实现
- 输出波形可调:正弦波、三角波、阶梯波、方波、白噪声
- 频率可调:可以输出频率从5Hz-200KHz的波形,调节精度达到1Hz
- 输出信号的幅度为0-3.3V
硬件构成
AD5601:
- 2.7 V至5.5 V,在本系统中工作电压为3.3V,其DAC转换用参考电压也为3.3V
- 工作电流小于100µA
- 8位nanoDAC®,由于本项目只是掌握原理,不追求更高的性能,因此采用了8位的器件,如需更高的性能可以选用管脚兼容的其它器件
- SPI接口
- 采用LFCSP和SC70封装
逻辑架构
核心代码主要有如下几部分构成:
- top.v: 系统的顶层文件
- keyin.v: 按键输入控制,选择波形以及调整频率,需要防抖处理
- dds.v: 根据频率控制字能够改变的相位累加器
- rom.v: Lattice Diamond软核构成的波表存储器,可以配置成宽度8位、深度256Byte的ROM,如果要存储多个波形方便切换,可以生成对应于不同波形的ROM文件
- spidac.v: 通过SPI总线协议将ROM表中的数据串行发送給AD5601