完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在用FPGA配一块AD7658芯片, 并行输出到FPGA。发现输出不读,然后我就用chipscope抓了下信号线,如下:
可是,无论我输入是多少,抓出来的数据都是 0111 1111 1111(第一路数据,也就是ad_rd的第一个低电平对应的数据,这个芯片支持六路)。 现在是我把ad_convsta拉高以后,ad_busy跟着拉高,按手册上的说法应该是ad已经进入了转换模式了,ad_busy也正常拉低,可是读出来就是不对,时钟是500KHz。困扰我两天了。 这是手册上的时序图: 这是我的原理图: 这是我的代码: 模块 ad7658( 输入钢丝, 输入电线 rst_b, input wire sel, //6路和4路选项 1--6路 0--4路 输入电线 ad_busy, 输入线[11:0] ad_data, 输出 reg ad_convsta, 输出 reg ad_convstb, 输出 reg ad_convstc, output wire ad_cs, //低电平有效 output reg ad_rd, //低电平有效 output reg ad_reset, //高电平有效 //6路数据 输出 reg [11:0] 数据1, 数据1; 输出 reg[11:0] 数据2; 输出 reg[ 11: 0] 数据 3 。 输出 reg[11:0] 数据4, 输出 reg[11:0] 数据 5 。 输出 reg [11:0] 数据6 ) ; reg[3:0] 状态; //分频 reg[7:0] div_cont; g ad_clk; 总是 @( 隐蔽的 sysclk 或 隐蔽的 rst_ b) 开始 如果(!rst_b) 开始 div_cnt <= 7'h0; ad_clk <= 0; 结束 其它 if(div_cnt == 7'd49) 开始 div_cnt <= 7'h0; ad_clk <= ~ad_clk; 结束 其它 开始 div_cnt <= div_cnt + 1; ad_clk <= ad_clk; 结束 end //ad7658配置 指定ad_cs = 0; 总是 @( ad_ clk 或 negadge rst_ b) 开始 如果(!rst_b) 开始 ad_reset <= 1; data1 <= 12'h000; data2 <= 12'h000; data3 <= 12'h000; data4 <= 12'h000; data5 <= 12'h000; data6 <= 12'h000; state <= 4'd0; 结束 其它 案件(国家) 4'd0: 开始 ad_reset <= 0; ad_convsta <= 0; ad_convstb <= 0; ad_convstc <= 0; ad_rd <= 1; state <= 4'd1; 结束 4'd1: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; state <= 4'd2; 结束 4'd2://开始采样 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; 如果(ad_busy = 0) state <= 4'd3; 其它 state <= 4'd2; 结束 4'd3: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 0;//50MHz晶振20分频,T=400ns > t9=6ns data1 <= ad_data; //第一路 state <= 4'd4; 结束 4'd4: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; state <= 4'd5; 结束 4'd5: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 0; data2 <= ad_data; //第二路 state <= 4'd6; 结束 4'd6: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; state <= 4'd7; 结束 4'd7: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 0; data3 <= ad_data; //第三路 state <= 4'd8; 结束 4'd8: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; state <= 4'd9; 结束 4'd9: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 0; data4 <= ad_data; //第四路 if(sel == 1) //共6路 state <= 4'd10; 其它 //共4路 state <= 4'd14; 结束 4'd10: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; state <= 4'd11; 结束 4'd11: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 0; data5 <= ad_data; //第五路 state <= 4'd12; 结束 4'd12: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; state <= 4'd13; 结束 4'd13: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 0; data6 <= ad_data; //第六路 state <= 4'd14; 结束 4'd14: 开始 ad_convsta <= 1; ad_convstb <= 1; ad_convstc <= 1; ad_rd <= 1; state <= 4'd0; 结束 默认 : 开始 ad_convsta <= 0; ad_convstb <= 0; ad_convstc <= 0; ad_rd <= 1; |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
97 浏览 0 评论
734 浏览 1 评论
715 浏览 1 评论
电路小知识 | 交流电路复数的基础知识以及相位差和电抗的计算
571 浏览 0 评论
1766 浏览 3 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 02:46 , Processed in 0.562317 second(s), Total 75, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号