FPGA控制AD7606_代码设计

前言

继上篇内容FPGA控制AD7606_AD7606解读

一、模块接口

用户接口主要是将读到的数据进行输出,AD7606接口则是上篇介绍的一些主要控制接口

module AD7606_drive#(
    parameter       P_RANGE = 0
)(
    input           i_clk           ,//50MHz 1 cycle = 20ns
    input           i_rst           ,
    /*------user interface------*/
    input           i_user_ctrl     ,
    output  [3 :0]  o_user_chnl     ,
    output  [15:0]  o_user_data_1   ,
    output          o_user_valid_1  ,
    output  [15:0]  o_user_data_2   ,
    output          o_user_valid_2  ,
    output  [15:0]  o_user_data_3   ,
    output          o_user_valid_3  ,
    output  [15:0]  o_user_data_4   ,
    output          o_user_valid_4  ,
    output  [15:0]  o_user_data_5   ,
    output          o_user_valid_5  ,
    output  [15:0]  o_user_data_6   ,
    output          o_user_valid_6  ,
    output  [15:0]  o_user_data_7   ,
    output          o_user_valid_7  ,
    output  [15:0]  o_user_data_8   ,
    output          o_user_valid_8  ,
    
    /*------AD7606 interface------*/
    output          o_ad_psb_sel    ,
    output          o_ad_stby       ,
    output          o_ad_range      ,
    output  [2 :0]  o_ad_osc        ,
    output          o_ad_reset      ,
    output          o_ad_convstA    ,
    output          o_ad_convstB    ,
    output          o_ad_cs         ,
    output          o_ad_rd         ,
    input           i_ad_busy       ,
    input           i_ad_firstdata  ,
    input   [15:0]  i_ad_data       
);

二、状态机转移

状态转移过程:

always @(*)begin
    case(r_st_cur)
        P_ST_RESET  : r_st_nxt = r_st_cnt == 10                 ? P_ST_CONVST   : P_ST_RESET    ;
        P_ST_CONVST : r_st_nxt = ri_user_ctrl                   ? P_ST_BUSY     : P_ST_CONVST   ;
        P_ST_BUSY   : r_st_nxt = r_st_cnt >= 10 && !ri_ad_busy  ? P_ST_READ     : P_ST_BUSY     ;
        P_ST_READ   : r_st_nxt = r_st_cnt == 16 - 1             ? P_ST_WAIT     : P_ST_READ     ;
        P_ST_WAIT   : r_st_nxt = r_st_cnt == 70                 ? P_ST_RESET    : P_ST_WAIT     ;
        default     : r_st_nxt = P_ST_RESET;
    endcase
end

P_ST_RESET :复位状态,需要满足至少50ns,所以状态计数器需要计数多少个周期需要看自己的设计当中时钟频率,我这里是50Mhz,状态计数器计数到10即200ns,符合时序。
P_ST_CONVST :转换状态,即控制CONVSTA/B信号产生上升沿。图中黄线部分
在这里插入图片描述
P_ST_BUSY :忙状态,等待一段时间后开始读忙信号,不忙则进入读数据状态
P_ST_READ :控制CS和RD信号开始读数据,读8个数据,在RD上升沿进行读数据
P_ST_WAIT :等待状态,俩次转换操作之间需要等待一个tCYCLE,AD7606在并行模式下需要5us,具体内容参考上一篇介绍。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

顺子学不会FPGA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值