完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我有16位并行ADC接口到spartan 3(XC4VFX 60)FPGA。
以下是数据表ADC 7656的链接[HTML] http://www.analog.com/en/analog-to-digital-converters/ad-converters/ad7656/products/product.html [/ HTML] 问题陈述:握手=> FPGA发送15 us转换启动脉冲。 在转换开始的上升沿之后,ADC在60 ns内响应具有ADC_BUSY的FPGA。 ADC忙将为3 us,然后FPGA可以发送芯片选择并从总线开始读取。在极端噪声条件下,ADC在转换启动后不响应ADC_BUSY但在断言复位后它确实恢复。所以FPGA应该发送转换 如果FPGA没有接收到ADC_BUSY,则应该等待ADC_BUSY为5 us,然后FPGA应该重置ADC。 当我尝试实现相同的功能时,ADC会停止响应并且除了一组代码之外不会发送ADC_BUSY,只要一切正常工作。但是在工作代码中,FPGA会重置ADC一次,但是如果ADC没有在1中复位 那么FPGA不会发送另一个重置。 当我实现一个逻辑,FPGA应该在每次转换开始后继续检查ADC_BUSY并每次发送一个复位,ADC完全停止响应。实际上ADC_BUSY不会用当前工作代码进行任何修改。 在所有情况下,我探测了信号并且转换开始被正确断言。 我发布了两个代码,一个正在运行,另一个正在运行。请告诉我在实施中哪里出错了。 ----这段代码正常工作,但只有在所有adc_busy变高之前才能重置。所需的实现是每5 us继续重置,直到所有adc_busy变高。 p_Rst_frm_RCI_reg:进程(int_clk_100mhz)开始if(falling_edge(int_clk_100mhz))然后if(adc_reset_busy_error ='1'和adc_reset_busy_error_dly ='0')然后adc_reset_busy_error_sig elsif adc_reset_busy_error_clr ='1'然后adc_reset_busy_error_sig结束if; 万一; 结束过程p_Rst_frm_RCI_reg; ---状态机启动-----情况adc_state是当idle_state => if(rci_start_acq_fl ='1'或adc_reset_busy_error_sig ='1')然后if(adc_rst_bsy_cnt = ADC_RESET_DURAtiON)然后adc_convst_sig'0'); adc_rst_bsy_cnt'0'); adc_reset adc_state adc_reset_busy_error_clr else adc_convst_sig'1'); - 重置期间必须为高位adc_rst_bsy_cnt adc_reset adc_state end if; 否则adc_convst_sig'0'); adc_state结束if; 当convst_state => adc_reset_busy_error_clr if(frac_sec_count = 0)则 - 检查pps边缘adc_state否则adc_convst_sig'0'); adc_state结束if; 当adc_busy_state => adc_convst_sig if(adc_const_int1 ='1'和adc_const_int2 ='1')时,如果(adc_rst_bsy_cnt adc_rst_bsy_cnt adc_state elsif(adc_busy_high ='1')则adc_reset_busy_error adc_state adc_rst_bsy_cnt'0'); 否则 - 如果即使在conver_start之后的5us之后adc_busy没有变高 - 那么adc_reset_busy_error会变高。 - 但是fpga仍然会进入下一个状态,在完成一个完整的数据周期后,它将进入空闲状态,它将重置ADC adc_reset_busy_error adc_state adc_rst_bsy_cnt'0'); 万一; 否则convst_en1 convst_en2结束if; -----继续其他状态---------- ------------------修改代码,下面的代码不起作用--- ------------------ p_Rst_frm_RCI_reg:进程(int_clk_100mhz)i***egin if(falling_edge(int_clk_100mhz))然后if(adc_reset_busy_error_dly ='1')然后----检查级别adc_reset_busy_error_sig 否则adc_reset_busy_error_sig结束if; 结束if;结束进程p_Rst_frm_RCI_reg; ---状态机启动--------状态机启动-----情况adc_state是idle_state => if(rci_start_acq_fl ='1'或adc_reset_busy_error_sig ='1')然后if(adc_rst_bsy_cnt = ADC_RESET_DURATION) 然后adc_convst_sig'0'); adc_rst_bsy_cnt'0'); adc_reset adc_state else adc_convst_sig'1'); - 重置期间必须为高位adc_rst_bsy_cnt adc_reset adc_state end if; 否则adc_convst_sig'0'); adc_state结束if; 当convst_state => if(frac_sec_count = 0)时 - 检查pps边缘adc_state否则adc_convst_sig'0'); adc_state结束if; 当adc_busy_state => adc_convst_sig if(adc_const_int1 ='1'和adc_const_int2 ='1')时,如果(adc_rst_bsy_cnt adc_rst_bsy_cnt adc_state elsif(adc_busy_high ='1')则adc_reset_busy_error adc_state adc_rst_bsy_cnt'0'); 否则 - 如果即使在conver_start之后的5us之后adc_busy没有变高 - 那么adc_reset_busy_error会变高。 - 但是fpga仍然会进入下一个状态,在完成一个完整的数据周期后,它将进入空闲状态,它将重置ADC adc_reset_busy_error adc_state adc_rst_bsy_cnt'0'); 万一; 否则convst_en1 convst_en2结束if; -----继续与其他州---------- FPGA的世界很棒 |
|
相关推荐
1个回答
|
|
shhrikant1写道:
我有16位并行ADC接口到spartan 3(XC4VFX 60)FPGA。 XC4VFX60显然是Virtex-4 FPGA,而不是Spartan-3器件。 你的代码很乱......你似乎有一个进程的案例解码器逻辑OUTSIDE。 现在,你是否模拟了你的代码? 通过仿真,我的意思是 - 你有一个ADC的总线功能模型,它将响应来自FPGA的激励吗? ----------------------------是的,我这样做是为了谋生。 |
|
|
|
只有小组成员才能发言,加入小组>>
2355 浏览 7 评论
2776 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2245 浏览 9 评论
3321 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2409 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
723浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
516浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
326浏览 1评论
729浏览 0评论
1929浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-4 13:20 , Processed in 1.008268 second(s), Total 49, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号