文章目录
该设计由一个PLL从50MHz晶振生成80MHz的DAC时钟、 20MHz的ADC时钟
一个单周期的DDS生成补码正弦波,转成无符号后送至DAC
拨码开关SW9 SW8用于控制DAC的输出幅度
其余的SW开关用于控制DDS频率字
2.在SignalTap中观察ADC的输出信号:
调整幅度使溢出信号为0:
3.用Matlab分析频谱:
ADC_OUT:(fs=20MHz) DAT_DAC:(fs=80MHz)
采样频率fs=20MHz,最高频率6.25MHz;采样频率fs=80MHz,最高频率1.56MHz。符合奈奎斯特理论
二、修改参数
把DDS的rom改成16比特,高12位送给DAC。生成不同频率的正弦波 。仍然保持80MHz的DAC时钟速率。
用3比特的拨码开关设定输出正弦波频率
– 000~ 0.5MHz、001 ~ 1MHz 、010 ~ 1.5MHz、011 ~ 2MHz
– 100~ 2.5MHz、101 ~ 3.5MHz、110 ~ 4.5MHz、111 ~ 5.5MHz
使用20MHz的ADC采样频率,把数据导入到Matlab
观察频谱纯度、确认生成的信号频率正确
1.改rom为16比特,取高12位。
1.使用matlab的DDS ROM生成代码,生成7位输入,16位输出的rom
// ************************************************************** //
// FILE : DDS_CORE_ROM.v
// DSCP : DDS CORE ROM FILE
// ABOUT : auto generated rom file by gen_rom_rtl.m
// DATE : 15-Jul-2021 18:59:05
// ************************************************************** //
module sine_rom(
CLK , // clock
RA , // read address
RD ); // read data
input CLK;
input [6 :0] RA;
output [15 :0] RD;
reg [15 :0] RD;
always @ (posedge CLK)
case(RA)
7 'd 0 :RD = #1 16'b 0000000000000000; // 0 0x0
7 'd 1 :RD = #1 16'b 0000011001000111; // 1607 0x647
7 'd 2 :RD = #1 16'b 0000110010001011; // 3211 0xC8B
7 'd 3 :RD = #1 16'b 0001001011000111; // 4807 0x12C7
7 'd 4 :RD = #1 16'b 0001100011111000; // 6392 0x18F8
7 'd 5 :RD = #1 16'b 0001111100011001; // 7961 0x1F19
7 'd 6 :RD = #1 16'b 0010010100100111; // 9511 0x2527
7 'd 7 :RD = #1 16'b 0010101100011110; // 11038 0x2B1E
7 'd 8 :RD = #1 16'b 0011000011111011; // 12539 0x30FB
7 'd 9 :RD = #1 16'b 0011011010111001; // 14009 0x36B9
7 'd 10 :RD = #1 16'b 0011110001010110; // 15446 0x3C56
7 'd 11 :RD = #1 16'b 0100000111001101; // 16845 0x41CD
7 'd 12 :RD = #1 16'b 0100011100011100; // 18204 0x471C
7 'd 13 :RD = #1 16'b 0100110000111111; // 19519 0x4C3F
7 'd 14 :RD = #1 16'b 0101000100110011; // 20787 0x5133
7 'd 15 :RD = #1 16'b 0101010111110100; // 22004 0x55F4
7 'd 16 :RD = #1 16'b 0101101010000001; // 23169 0x5A81
7 'd 17 :RD = #1 16'b 0101111011010110; // 24278 0x5ED6
7 'd 18 :RD = #1 16'b 0110001011110001; // 25329 0x62F1
7 'd 19 :RD = #1 16'b 0110011011001110; // 26318 0x66CE
7 'd 20 :RD = #1 16'b 0110101001101100; // 27244 0x6A6C
7 'd 21 :RD = #1 16'b 0110110111001001; // 28105 0x6DC9
7 'd 22 :RD = #1 16'b 0111000011100001; // 28897 0x70E1
7 'd 23 :RD = #1 16'b 0111001110110101; // 29621 0x73B5
7 'd 24 :RD = #1 16'b 0111011001000000; // 30272 0x7640
7 'd 25 :RD = #1 16'b 0111100010000011; // 30851 0x7883