实验目标:
• 掌握并行DAC、ADC的接口时序
• 用DDS合成信号,经过DAC输出
• 用ADC采集信号
• 使用SignalTAP在时域观察信号
• 使用Matlab在频域观察信号
原始实验
50M晶振——经过FPGA片内的锁相环——倍频得到80MHz的DAC时钟,分频得到20MHz的ADC时钟
DAC时钟:用FPGA的逻辑对内部的80MHz时钟反相作为DAC芯片时钟,用于满足DAC数据的建立-保持时序
ADC时钟:ADC时钟同样进行反相,作为ADC接口逻辑的驱动时钟
分别编写时钟管理模块,DDS模块,DAC模块,ADC模块,并生成相应的元件
连接电路,分配管脚
- 该设计由一个PLL从50MHz晶振生成80MHz的DAC时钟、20MHzADC时钟
- 一个单周期的DDS生成补码正弦波,转成无符号后送至DAC
- 拨码开关SW9 SW8 用于控制DAC的输出幅度
- 其余的SW开关用于控制DDS频率字
用SMA同轴电缆连接ADC和DAC
抓取ADC
ADC
dac
思考题回答
- 符合奈奎斯特理论,由matlab分析出的频谱图可以看出,模拟信号的最高频率为0.5MHz,而ADC的时钟是20MHz,符合奈奎斯特理论
- 可以看到,ADC的最低噪大于DAC的输出。
- ADC是对模拟信号进行 取样-保持-量化-编码的过程使其变成更易存储,处理的数字形式。
补充知识
学生实验
1、rom改成16比特,利用matlab自动生成波表文件
DDS代码
其数据和输出都改为16比特的,然后给不同的按键输入赋不同的频率字,频率字求法为
再将其转换为二进制,赋值给freqin_R
module mc_dds(
CLK , // clock posedge
RST , // reset posedge
FREQIN, // input frequency word
FREQEN, // frequency word input enable
DDSEN , // multi-cycle dds work enable
OUTVD , // dds output valid
DDSOUT); // dds output wave
input CLK ;
input RST ;
input [32-1:0] FREQIN;
input FREQEN;
input DDSEN ;
output OUTVD