在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1564|回复: 0

[求助] AD7658 转换正常,但是没有输出

[复制链接]
发表于 2016-1-14 11:37:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
各位坛友,小弟最近在用FPGA配一块AD7658芯片,   并行输出到FPGA。发现输出不对,然后我就用chipscope抓了下信号线,如下:

                               
登录/注册后可看大图


                               
登录/注册后可看大图



可是,无论我输入是多少,抓出来的数据都是 0111 1111 1111(第一路数据,也就是ad_rd的第一个低电平对应的数据,这个芯片支持六路)。
现在是我把ad_convsta拉高以后,ad_busy跟着拉高,按手册上的说法应该是ad已经进入了转换模式了,ad_busy也正常拉低,可是读出来就是不对,时钟是500KHz。困扰我两天了。
这是手册上的时序图:

                               
登录/注册后可看大图


这是我的原理图:

                               
登录/注册后可看大图


                               
登录/注册后可看大图


这是我的代码:
module ad7658(
                                                        input wire sysclk,
                                                        input wire rst_b,
                                                        input wire sel,                //6路和4路选项     1--6路    0--4路
                                                        input wire ad_busy,
                                                        input wire[11:0] ad_data,
                                                        output reg ad_convsta,
                                                        output reg ad_convstb,
                                                        output reg ad_convstc,
                                                        output wire ad_cs,                //低电平有效
                                                        output reg ad_rd,                //低电平有效
                                                        output reg ad_reset,        //高电平有效
                                                        //6路数据
                                                        output reg[11:0] data1,
                                                        output reg[11:0] data2,
                                                        output reg[11:0] data3,
                                                        output reg[11:0] data4,
                                                        output reg[11:0] data5,
                                                        output reg[11:0] data6


    );



reg[3:0] state;
//分频
reg[7:0] div_cnt;
reg ad_clk;

always @(posedge sysclk or negedge rst_b)
begin
        if(!rst_b)
                begin
                        div_cnt <= 7'h0;
                        ad_clk  <= 0;
                end
        else if(div_cnt == 7'd49)
                begin
                        div_cnt <= 7'h0;
                        ad_clk <= ~ad_clk;
                end
        else
                begin
                        div_cnt <= div_cnt + 1;
                        ad_clk <= ad_clk;
                end
end


//ad7658配置
assign ad_cs = 0;
always @(posedge ad_clk or negedge rst_b)
begin
        if(!rst_b)
                begin
                        ad_reset <= 1;
                        data1    <= 12'h000;
                        data2    <= 12'h000;
                        data3    <= 12'h000;
                        data4    <= 12'h000;
                        data5    <= 12'h000;
                        data6    <= 12'h000;
                        state                <= 4'd0;
                end
        else
                case(state)
                        4'd0:
                                        begin
                                                ad_reset   <= 0;
                                                ad_convsta <= 0;
                                                ad_convstb <= 0;
                                                ad_convstc <= 0;
                                                ad_rd                  <= 1;
                                                state             <= 4'd1;
                                        end
                        4'd1:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd2;
                                        end
                        4'd2://开始采样
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                if(ad_busy == 0)
                                                        state   <= 4'd3;
                                                else
                                                        state   <= 4'd2;
                                        end
                        4'd3:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;//50MHz晶振20分频,T=400ns > t9=6ns
                                                data1      <= ad_data;  //第一路
                                                state      <= 4'd4;
                                        end
                        4'd4:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 1;
                                                state                  <= 4'd5;
                                        end
                        4'd5:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data2                  <= ad_data;  //第二路
                                                state                  <= 4'd6;
                                        end
                        4'd6:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd7;
                                        end
                        4'd7:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data3                  <= ad_data;  //第三路
                                                state                  <= 4'd8;
                                        end
                        4'd8:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd9;
                                        end
                        4'd9:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data4                  <= ad_data;  //第四路
                                                if(sel == 1)   //共6路
                                                        state        <= 4'd10;
                                                else                                //共4路
                                                        state <= 4'd14;
                                        end
                        4'd10:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd11;
                                        end
                        4'd11:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data5                  <= ad_data;  //第五路
                                                state                  <= 4'd12;
                                        end
                        4'd12:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd13;
                                        end
                        4'd13:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd      <= 0;
                                                data6                  <= ad_data;  //第六路
                                                state                  <= 4'd14;
                                        end
                        4'd14:
                                        begin
                                                ad_convsta <= 1;
                                                ad_convstb <= 1;
                                                ad_convstc <= 1;
                                                ad_rd                  <= 1;
                                                state                  <= 4'd0;
                                        end
                        default:
                                        begin
                                                ad_convsta <= 0;
                                                ad_convstb <= 0;
                                                ad_convstc <= 0;
                                                ad_rd                  <= 1;
                                        end
                endcase
end






endmodule



求各位坛友帮忙指正下问题,谢谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-2-23 12:46 , Processed in 0.020330 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表