[原创]AD9212采样方法
随记
最近由于工程原因用到ADC的采样,选用了ADI公司的AD9212芯片,八通道10位ADC。在进行ADC的采样时,看到的想到的几种方法,在这里做个笔记记录一下。
AD9212简介
详细说明可以在ADI官网上进行搜索查看,具体的一些性能细节这里就不进行详细的介绍了。
ADC芯片在某一时刻采集到电压数据后会在一个时钟周期内将数据串行的输出,若使用FPGA对数据进行接收,所需要做的操作就只是一个串并转换,还是比较简单的对吧。在这里由于AD9212的数据传输是使用的LVDS输出,也可以使用Altera官方(对,我们用的是A家的芯片)的LVDS_RX的IP核进行接收。下面我们把AD9212的一个时序图放上来作为镇文之图。
从图中可以看出DCO作为数据传出的时钟是上下边沿触发的,在每个边沿数据D有效。FCO作为帧定界的信号且与数据D同步,一个时钟周期内10位的有效数据D,且高位在前。主要信息就这些了,信号FCO、DCO、D接入FPGA。
方法1——利用官方LVDS_RX的IP核
简单的说下思路,由于程序均为并行,以下步骤也已并列形式给出。
- 将D和FCO信号引入LVDS_RX中,两位两位的读取,读取时钟为DCO。
- 使用一个11位的Buffer寄存器,在每个上升沿的同时不断的将LVDS_RX读取到的数据以移位的形式添加到最后。(注意这里是使用了11位Buffer,比数据长度多1,其用途可参考下方运行辅助理解)
- 在每个DCO的上升沿对LVDS_RX接收到的FCO进行打一拍处理
- 在每个DCO的上升沿对当前时刻接收到的2位FCO数据和前一个上升沿的数据(上述中打一拍)进行比较判定,若前一时刻为00,当前为11,则11位Buffer的[9:0]位接收到的数据;若前一时刻为01,则11位中Buffer的[10:1]为采集数据;其余条件Buffer保持。
这里最后一个处理中之所以有两种情况是因为LVDS_RX在读的过程中无法确保其开始位置,故这里将两种方法都进行考虑后进行综合。下图描述了LVDS_RX在读取时的两种可能的状态。
- 状态1

- 状态2

方法2——根据时序自行处理
同样简单的说一下思路,该方法对于10-bits ADC需要使用到一个12-bits的Buffer用于数据的缓存。
- DCO上升沿进行采样,数据依次存入Buffer[11,9,7,5,3,1]中。
- DCO下降沿进行采样,数据依次存于Buffer[10,8,6,4,2,0]中。
- 类似于上述方法对FCO一样双边沿采样存于一个Reg[3:0]中。
- 在Reg[3:0]==0011时,标志位置1。
- 在DCO的上升沿在标志位置于1的时候将Buffer中的[11:2]提取出来成为ADC采集到的数据。
- 根据需要添加FIFO进行数据同步。
这一部分后续再时序上可能不如方法1,后期可以通过时序约束进行优化,暂时还未涉及,后续学习后再来添加补充。
希望对阅读的你有着帮助,欢迎探讨。如果有什么觉得不对的,一定不要客气的留言回复大力拍砖~
[原创]AD9212采样方法的更多相关文章
- 采样方法(二)MCMC相关算法介绍及代码实现
采样方法(二)MCMC相关算法介绍及代码实现 2017-12-30 15:32:14 Dark_Scope 阅读数 10509更多 分类专栏: 机器学习 版权声明:本文为博主原创文章,遵循CC 4 ...
- 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付
前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...
- 【原创分享·微信支付】C# MVC 微信支付教程系列之现金红包
微信支付教程系列之现金红包 最近最弄这个微信支付的功能,然后扫码.公众号支付,这些都做了,闲着无聊,就看了看微信支付的其他功能,发现还有一个叫“现金红包”的玩意,想 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之扫码支付
微信支付教程系列之扫码支付 今天,我们来一起探讨一下这个微信扫码支付.何为扫码支付呢?这里面,扫的码就是二维码了,就是我们经常扫一扫的那种二维码图片,例如,我们自己添 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
- 【原创分享·微信支付】C# MVC 微信支付之微信模板消息推送
微信支付之微信模板消息推送 今天我要跟大家分享的是“模板消息”的推送,这玩意呢,你说用途嘛,那还是真真的牛逼呐.原因在哪?就是因为它是依赖微信生存的呀,所以他能不 ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- GJM : C#设计模式汇总整理——导航 【原创】
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 信息安全-5:RSA算法详解(已编程实现)[原创]
转发注明出处:http://www.cnblogs.com/0zcl/p/6120389.html 背景介绍 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加 ...
随机推荐
- 在virtualbox(win7)下使用USB摄像头
解决方法: 去https://www.virtualbox.org/wiki/Downloads下载VirtualBox 4.3.8 Oracle VM VirtualBox Extension Pa ...
- IOS 在不打开电话服务的时候,可以响应服务器的推送消息,从而接收服务器的推送消息
在做即时通讯(基于xmpp框架)的时候遇到这样一个问题,就是在真机测试的时候,你按Home键返回桌面,在你返回桌面的时候,这是你的程序的挂起状态的,在你挂起的时候, 相当于你的程序是死的,程序的所有进 ...
- webuploader 上传文件参数设置
webUploader 是款很好用的优秀的开源上传组件,由百度公司开发,详细的介绍可参见webUploader 的官方文档: 最近在使用webUploader时,需要添加额外的参数,并在后台获取,参数 ...
- JQ判断复选框是否选中
方法一: if($('#checkbox').is(':checked')) {} 方法二:if ($('#checkbox').attr('checked')) {} 方法三:if ($(" ...
- EhCache缓存
EhCache缓存 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache是一种广泛使用的开源Java分布式缓 ...
- STL迭代器之一:偏特化
在stl的算法中运用容器的迭代器时,很可能经常会用到迭代器相应型别(例如迭代器所指物的型别),假设算法中有必要声明一个变量,以"迭代器所指对象的型别"为类型,如何是好,例如我们写一 ...
- vim的树形菜单NERDTREE的设置
网上比较好的一篇文章:http://coolshell.cn/articles/1679.html http://coolshell.cn/articles/11312.html 1.Vim安装NER ...
- localstorage sessionstorage cookie 备忘
/* sessionStorage: 保存的数据用于浏览器的一次会话,当会话结束(通常是该窗口关闭),数据被清空: localStorage: 保存的数据长期存在,下一次访问该网站的时候,网页可以直接 ...
- SQL Server 数据库的维护(三)__事务(transaction)和锁
--维护数据库-- --事务(transaction)和锁-- --事务(transaction)-- --概述: 事务是指封装了一组T-SQL语句的单个逻辑单元.单元中的所有语句作为一个整体,在满足 ...
- Chrome54安装最新版Flash版本办法
从 Chrome54 版本开始,flash默认已经不能使用了.打开机器上的C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Pe ...