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)beginif(!rst_n)begincnt<=16'd0;start<=0;order<=4'd0;FreUp<=1'b0;RESET<=0;endelse begin	if(cnt<=10)begincnt<=cnt+16'd1;RESET<=0;endelse if(cnt<=50)begincnt<=cnt+16'd1;RESET<=1;endelse if(cnt<=100)begincnt<=cnt+16'd1;RESET<=0;endelse begin		if(order<=4'd4)beginstart<=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: ;endcaseorder <= order+4'd1;endelse if (order<=4'd7)beginstart<=0;order <= order+4'd1;case(order)4'd6:begin		//五个控制字写完之后,又过了一个W_CLK时钟周期后,给FQ_UD高电平脉冲FreUp<=1'b1;wr_dat[7:0]<=commond[7:0];end4'd7:beginFreUp<=1'b0;order<=4'd0;enddefault: ;endcaseendendendend//时序图中W_CLK的波形
always @(posedge CLK_10M or negedge rst_n)beginif(!rst_n)beginWR_CLK<=0;count<=8'd0;//wr_dat[7:0]<=commond[7:0];endelse beginif(start)begincount = 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	: 	;endcaseendelsebeginWR_CLK<=0;count<=8'd0;endendend

测试结果

ILA波形:

在这里插入图片描述

示波器波形:

在这里插入图片描述

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

在这里插入图片描述

工程资源、补充

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/496337.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水库安全监测方案(福建地区水库安全监测案例分享)

我司星创易联最近在福建省受到了一个水库安全监测系统项目的委托。该水库位于福建中部山区,作为该地区的重要防洪与供水工程,对下游数十万人的生活产生重大影响。但是因为水库附近地质情况复杂,水库大坝在多次洪水冲击下出现一定病害,亟须全面加强对水库大坝安全状况的监测,以确…

Rocky Linux 运维工具yum

一、yum的简介 ​​yum​是用于在基于RPM包管理系统的包管理工具。用户可以通过 ​yum​来搜索、安装、更新和删除软件包&#xff0c;自动处理依赖关系&#xff0c;方便快捷地管理系统上的软件。 二、yum的参数说明 1、install 用于在系统的上安装一个或多个软件包 2、seach 用…

常用git 打tag命令

1.查看所有tag git tag 2.创建 v5.0.0的tag git tag v5.0.0 git tag &#xff08;创建后查看&#xff09; 3.推送到远程tag git push origin v5.0.0 4.删除远程tag git push origin --delete v5.0.0 5.删除本地tag git tag -d v5.0.0 6.添加带有备注信息的tag git tag v5.…

golang学习5,glang的web的restful接口

1. //返回json r.GET("/getJson", controller.GetUserInfo) package mainimport (/*"net/http"*/"gin/src/main/controller""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/get", func(ctx *…

Oracle中序列

1. Sequence 定义 在Oracle中可以用SEQUENCE生成自增字段。Sequence序列是Oracle中用于生成数字序列的对象&#xff0c;可以创建一个唯一的数字作为主键。 2. 为什么要用 Sequence 你可能有疑问为什么要使用序列&#xff1f; 不能使用一个存储主键的表并每次递增吗&#xf…

golang使用gorm操作mysql1

1.mysql连接配置 package daoimport ("fmt""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger" )var DB *gorm.DB// 连接数据库&#xff0c;启动服务的时候&#xff0c;init方法就会执行 func init() {username : "roo…

【virtual Box】功能速通:安装 Windows 和 Ubuntu

文章目录 一、虚拟机1.1 概述1.2 virtual box概述 二、新建虚拟机、删除、注册三、虚拟机内部设置3.1 安装增强功能驱动3.2 分辨率问题3.3 网络链接方式 一、虚拟机 1.1 概述 虚拟机&#xff08;Virtual Machine&#xff0c;VM&#xff09;是一种软件实现的计算机系统&#x…

EMR StarRocks实战——Mysql数据实时同步到SR

文章摘抄阿里云EMR上的StarRocks实践&#xff1a;《基于实时计算Flink使用CTAS&CDAS功能同步MySQL数据至StarRocks》 前言 CTAS可以实现单表的结构和数据同步&#xff0c;CDAS可以实现整库同步或者同一库中的多表结构和数据同步。下文主要介绍如何使用Flink平台和E-MapRed…

【appium】App类型、页面元素|UiAutomator与appium|App元素定位

目录 一、App前端基础知识 1、App类型划分 2、App类型对比 3、App页面元素 App页面元素分为布局和控件两种 常见布局&#xff1a; 常见控件&#xff1a;定位软件&#xff1a;appium和sdk自带的uiautomatorviewer都可以定位 二、App元素定位 1、id定位 2、text定位 3…

Pytorch添加自定义算子之(5)-配置GPU形式的简单add自定义算子

参考:https://zhuanlan.zhihu.com/p/358778742 一、头文件 命名为:add2.h void launch_add2(float *c,const float *a,const float *b,int n);

docker desktop windows 下载

下载地址 xDocker: Accelerated Container Application Development 安装步骤&#xff1a;下一步&#xff0c;下一步即可

全面升级!Apache HugeGraph 1.2.0版本发布

图数据库以独特的数据管理和分析能力&#xff0c;在企业数智化转型的过程中正在成为数据治理的核心&#xff0c;根据IDC调研显示&#xff0c;95%的企业认为图数据库是重要的数据管理工具&#xff0c;超过65%的厂商认为在业务上图数据库优于其他选择&#xff0c;尤其是在金融风控…