FPGA采集AD7606串行输源码加讲解

FPGA采集AD7606串行输源码加讲解
那是2020年,在我上家公司时,由于刚接触FPGA,所以啥也不会,就被大佬安排去写一个国产FPGA的项目,其中就包含AD7606的采集,很遗憾,当时我没能搞定,后来是请了外援,此时也成了我的一个心结,如今2年过去了,虽然跳槽了,后面的项目也没有用到过AD7606,但怀着填补遗憾的想法,还是决定试试。
硬件环境:米联客的AD7606模块,如图:
在这里插入图片描述
其实AD7606采集非常简单,前提是你要看懂数据手册,只要数据手册看懂了。。。。
对于串行输出采样而言,数据手册有两张图最为关键:
在这里插入图片描述
AD7606流程时序如下:
用户拉低RESET复位AD7606,然后用户拉低CONVSTA/CONVSTB开启AD7606转换功能,然后AD7606输出BUSY给用户指示我正在转换,用户拉低CS接收AD7606输出的数据;

根据上图可知,操作AD7606船型输出采集,流程上只需3步:
第一步:拉高RESET持续至少50ns,我拉高了100ns,时间由数据手册得知,如下:
在这里插入图片描述
第二步:拉低CONVSTA或者CONVSTB持续最多0.5ms,注意这里是最多,所以在代码里只需一个参考时钟周期足以,比如你用的100M,一个参考时钟周期就是10ns,当然,CONVSTA和CONVSTB也可同时拉低,这样就是8个通道同时采集,时间由数据手册得知,如下:
在这里插入图片描述
第二步:等待BUSY为高后,拉低CS,这个BUSY是AD7606输出给用户的,表征AD转换正在进行,他有一个最大时间,我们一定要满足他的最大时间,不然人家还没转换完你就结束采集了,岂不唧唧了;那么,CS在什么时刻拉低呢?我的理解是BUSY拉高的期间CS拉低,转换时间我设的5ms,由数据手册得知,如下:
在这里插入图片描述
流程看完了,来看具体的采集时序:
在这里插入图片描述
采集时序如下:
首先用户拉低CS,并给出SCLK到AD7606,AD7606在CS为低期间,在SCLK的上升沿输出数据(但根据时序图,我感觉是SCLK高电平期间输出的),一个通道一次转换后输出16位采样数据;
既然AD7606是在SCLK上升沿输出,那么FPGA就应该在SCLK下降沿采集(或者低电平采集);
这里的SCLK频率有要求,数据手册如下:
在这里插入图片描述
好,手册看懂了,再来敲代码,很明显,采集流程分三步,搞个小状态机;
在这里插入图片描述
AD7606有8个模拟输入通道,串行输出模式下只有两个数字输出通道,每个输入通道输出16位采样数据;
DOUTA对应CH1、CH2、CH3、CH4四个输出通道;
DOUTB对应CH5、CH6、CH7、CH8四个输出通道;
因为每个输入通道输出16位采样数据,需要16个SCLK周期,所以4个输入通道输出16位采样数据,需要64个SCLK周期;那个我们需要一个计数器,计数到64时输出64位的采集数据,呢么采集到的每个通道数据对应如下:
wire [15:0] ad_ch1 = ad_out_a[63:48];
wire [15:0] ad_ch2 = ad_out_a[47:32];
wire [15:0] ad_ch3 = ad_out_a[31:16];
wire [15:0] ad_ch4 = ad_out_a[15: 0];
wire [15:0] ad_ch5 = ad_out_b[63:48];
wire [15:0] ad_ch6 = ad_out_b[47:32];
wire [15:0] ad_ch7 = ad_out_b[31:16];
wire [15:0] ad_ch8 = ad_out_b[15: 0];

代码状态机如下:
在这里插入图片描述
接收计数器:
在这里插入图片描述
接收移位寄存器
在这里插入图片描述
顶层:
在这里插入图片描述
仿真模型
在这里插入图片描述
仿真结果如下:
在这里插入图片描述
最后:整个源代码并未给出,目的是给兄弟们一个练手的机会,因为这个很简单,加之我的讲解,应该问题不大,如果你在自身尝试的基础上,实在搞不出来,可以私,我也可以给你适当的技术支持,教你怎么写。

  • 20
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

9527华安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值