AD9851——FPGA调试(并行模式)

AD9851——FPGA调试(并行模式)

工程功能:使用FPGA来调试AD9851芯片,使用的是并行模式

芯片手册:AD9851 CMOS 180 MHz DDS/DAC Synthesizer Data Sheet (Rev. D) (analog.com)


管脚功能

在这里插入图片描述

在这里插入图片描述

管脚名称管脚功能
D0-D78位数据输入。用于加载32位频率和8位相位/控制字的数据端口。D7 = MSB ; Do = LSB ; D7引脚25也可作为40位串行数据字的输入引脚。
PGND6倍参考时钟倍乘器 地
PVCC6倍参考时钟倍乘器电源
W-CLK字量时钟。上升沿将并行或串行频率/相位/控制字异步加载到40位输入寄存器中。
FQ_UD更新频率。上升沿异步地将40位输入寄存器的内容传输给DDS核。当已知输入寄存器的内容只包含有效的、允许的数据时,应该发出FQUD。
REFCLOCK参考时钟输入。CMOS/ ttl级脉冲序列,直接或通过6× REFCLK倍增器。在直接模式下,这也是SYSTEM CLOCK。如果使用了6× REFCLK乘法器,那么该乘法器的输出就是SYSTEM CLOCK。系统时钟的上升沿启动操作。
AGND模拟地。模拟电路(DAC和比较器)的接地返回
AVDD模拟电路的正电源电压(DAC和比较器,引脚18)和带隙参考电压,引脚11。
RSETDAC的外部RsET连接-名义上是一个3.92 kΩ电阻到地,输出10 mA。这设置了从IOUT和IOUTB可用的DAC满量程输出电流。RsET = 39.93/IOUT。
VOUTN电压输出负。比较器的互补CMOS逻辑电平输出。
VOUTP电压输出正。比较器的真实CMOS逻辑电平输出。
VINN输入电压负。比较器的反相输入。
VINP电压输入正。比较器的非反相输入。
DACBPDAC旁路连接。这是DAC电压参考旁路连接,通常为NC (NO CONNECT),用于最佳SFDR性能。
IOUT除了IOUTB =(满量程输出-IOUT)外,与IOUT具有相同特性的互补DAC输出。输出负载应等于IOUT,以获得最佳的SFDR性能。
IOUT平衡DAC的真实输出。电流是源,需要电流到电压
RESET主复位引脚;活性高;清除DDS累加器和相位偏移寄存器,以实现0 Hz和0°输出相位。将编程设置为并行模式并解除6× REFCLK乘法器。Reset不清除40位输入寄存器。在上电时,在编程开始之前,断言RESET应该是第一优先级。
DVDD数字电路的正电源电压引脚。
DGND数字地。数字电路的接地返回引脚。

上面为机翻,其中有几个管脚在调试过程中比较重要:

  • 供电,我用3.3V来给芯片供电。
  • REFCLOCK 参考时钟,我用125M的晶振来直接接入芯片。
  • RESET,这个管脚很重要,可以清除DDS累加器和相位,还可以调控串并行模式(但是这个模式切换我还没有研究明白,之后再补充)。
  • D0-D7、W-CLK、FQ_UD ,时序的关键信号。
  • IOUT、IOUT,输出、用示波器测试的管脚,

输出频率、相位

在这里插入图片描述

如上图,并行输入控制字。

第一个控制字W0: Data[0]是6倍频使能信号,为0时关闭6倍频

​ Data[1]置为0

​ Data[2]置为0,不在Power-Down模式

​ Data[3]-Data[7] :相位控制字

剩下4个控制字W1-W4:32位的频率控制字

在这里插入图片描述

频率计算如上图所示,下图是官方手册给的一个示例,我们根据这个示例来解释

在这里插入图片描述

系统时钟为180MHZ,5个控制字为:

​ W0 = 00001001

​ W1 = 00001110

​ W2 = 00111000

​ W3 = 11100011

​ W4 = 10001110

由W0可知,开启了6倍频,所以这180MHZ的系统时钟是这样来的:REFCLOCK 参考时钟输入为30MHZ,再6倍频为180MHZ

*相位控制字为1,相位为:(1/(2^5))360° = 11.25°

频率控制字为 0000 1110 0011 1000 1110 0011 1000 1110 ,转换为十进制为:238609294

所以频率为:238609294*180/(2^32) = 10HMZ

由上面方法可轻松计算出想要的频率和相位

时序图

在这里插入图片描述

在这里插入图片描述

这个时序图就是写代码的关键

参考文章:AD9851调试过程----相位设置、频率计算、控制字设置-CSDN博客

在控制字准备好之后,拉高W_CLK,控制字在W_CLK的上升沿写入芯片中。连续写完5个控制器后,拉高FQ_UD

下面给出我的仿真波形:

在这里插入图片描述

至于RESET,我是这样写的:

在这里插入图片描述

上电时先拉底,保持一段时间高电平后,再拉底 (说实话,这个RESET我也不是特别透彻,有理解的可以在评论中补充)

关键代码

always @(posedge CLK_2M or negedge rst_n)
	begin
		if(!rst_n)
		begin
			cnt<=16'd0;
			start<=0;
			order<=4'd0;
			FreUp<=1'b0;
			RESET<=0;
		end
		else begin	
			if(cnt<=10)
			begin
				cnt<=cnt+16'd1;
				RESET<=0;
			end
			else if(cnt<=50)
			begin
				cnt<=cnt+16'd1;
				RESET<=1;
			end
			else if(cnt<=100)
			begin
				cnt<=cnt+16'd1;
				RESET<=0;
			end
			else begin		
			if(order<=4'd4)
			begin
				start<=1;
				case(order)		//写入5个控制字, Com (W0) 和 Fre (W1 W2 W3 W4) 一共40位控制字
				4'd0:wr_dat[7:0]<=commond[7:0];
				4'd1:wr_dat[7:0]<=fre_set[31:24];
				4'd2:wr_dat[7:0]<=fre_set[23:16];
				4'd3:wr_dat[7:0]<=fre_set[15:8];
				4'd4:wr_dat[7:0]<=fre_set[7:0];
				default: ;
				endcase
				order <= order+4'd1;
			end
			else if (order<=4'd7)
			begin
				start<=0;
				order <= order+4'd1;
				case(order)
				4'd6:
				begin		//五个控制字写完之后,又过了一个W_CLK时钟周期后,给FQ_UD高电平脉冲
					FreUp<=1'b1;
					wr_dat[7:0]<=commond[7:0];
				end
				4'd7:
				begin
					FreUp<=1'b0;
					order<=4'd0;
				end
				default: ;
				endcase
			end
			end
		end
	end

//时序图中W_CLK的波形
always @(posedge CLK_10M or negedge rst_n)
	begin
		if(!rst_n)
		begin
			WR_CLK<=0;
			count<=8'd0;
			//wr_dat[7:0]<=commond[7:0];
		end
		else begin
			if(start)
			begin
				count = count+8'd1;
				case(count)
				8'd1	:WR_CLK<=1;
				8'd4	:WR_CLK<=0;
				8'd6	:WR_CLK<=1;
				8'd9	:WR_CLK<=0;
				8'd11	:WR_CLK<=1;
				8'd14	:WR_CLK<=0;
				8'd16	:WR_CLK<=1;
				8'd19	:WR_CLK<=0;
				8'd21	:WR_CLK<=1;
				8'd24	:WR_CLK<=0;
				default	: 	;
				endcase
				
			end
			else
			begin
			WR_CLK<=0;
			count<=8'd0;
			end
		end
	end

测试结果

ILA波形:

在这里插入图片描述

示波器波形:

在这里插入图片描述

输出结果:(幅度为200mV是因为示波器探针选择的 ×10)

在这里插入图片描述

工程资源、补充

在这个工程中,我用的是正点原子的达芬奇开发板xc7a35t-2 ffg484(50MHZ时钟),将J2排针引出来接入AD9851中

在代码中,我用50MHZ的系统时钟分频生成了2MHZ和10MHZ,用于满足时序要求

分频器参考:https://zhuanlan.zhihu.com/p/620290497

工程下载:AD9851-FPGA调试(并行模式)资源-CSDN文库

  • 25
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
包含以上所有资料 DDS AD9850 AD9851 原理图 串行程序 并行程序 目 录 1 DDS 简介 1.1 产品简介 1.2 参考资料 2 DDS 的基本概念 2.1 DDS 概述 2.2 DDS 工作原理 2.3 DDS 有关名词解释 3 具体应用问题 3.1 DDS 没有输出,怎么办 3.2 哪些DDS 能直接用晶体提供时钟,哪些不能 3.3 Update 更新信号如何控制? 3.4 DDS 的扫频功能如何实现 3.5 DDS 输出级滤波器如何设计 3.6 DDS 发烫,是否正常 3.7 DDS 对输入时钟有什么要求 3.8 AD9910 的时钟输入需要注意什么? 3.9 DDS 时钟输入,DAC 输出能否使用单端模式?电路该如何接 3.10 DDS 评估板上分别有2 个变压器或2 个巴伦(Balun)有什么用处 3.11 DDS 评估板上端接电阻为50 欧,为何变压器的参数是在75 欧标定的? 3.12 ADT1-1WT 的原副边是否可以互换使用 3.13 如何同步多片DDS 芯片的输出 3.14 DDS 输出端DAC 为电流输出,怎么转换为电压,有什么限制 3.15 DDS 的AGND,DGND 应该怎样连接,接模拟地还是数字地 3.16 有些DDS 评估板上的MC100LVEL16 的用途是什么? 3.17 AD7008 已经停产,有什么可以替代 3.18 如何确定DDS 寄存器的值 3.19 DDS 的评估板软件对操作系统有什么要求 3.20 DDS 除了正弦波,还能产生别的波形么 3.21 用DDS 有什么好处 3.22 ADI 的DDS 捷变频能力为多少 3.23 有无DDS 的参考程序代码 3.24 如何使用DDS 进行幅度调制 3.25 如何用AD5930 来产生一个单频信号 3.26 为什么DDS 输出的幅度会随频率的增加而减小 3.27 DDS 输出电压的幅度如何计算 3.28 应该用什么样的仪器来调试DDS 3.29 输出杂散较大,怎么办

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值