前一个项目终于完成了,费了那么多天的劲,确实也找到了一些设计上的缺陷和不合理的地方,在代码中也找到了几个BUG.呵呵. 现在将我在FPGA部分设计的一点心得记录下来. 故障情况:
外部EEPROM存储器在设备上电过程中,出现数据被改写情况.导致数据丢失.
故障定位:
对设备进行反复的加断电实验,发现故障出现,用独立的读存储器代码将存储器中相关字节读出通过串口发送回计算机,可看到相关字节无规律的被改写为FF,但无规律可寻.更换存储器,故障依旧,排除存储器损坏可能.
使用逻辑分析仪,观察上电时存储器CE,WE,OE三个管脚时序, 用CE信号做触发信号,发现在正常读时序前有时间长度为60uS的不规律脉冲出现在三个管脚上.
故可怀疑为代码问题或者FPGA问题.
检查读EEPROM字节代码,未发现问题,使用MODELSIM做前仿和后仿,时序正确.故排除代码问题.
设置一测试信号,FPGA在上电完成配置后,即刻将该测试信号拉高.
使用示波器观察FPGA核电压建立到该测试信号变高间时间约为720mS,CE第一次动作到该测试信号变高见时间为12mS,故可确定与代码无关.
最后将故障定位为FPGA上电配置时管脚电平状态翻转造成EEPROM误动作问题. 解决方法:
在FPGA管脚约束时将EEPROM的CE,WE,OE全部PULL UP .
利用RC电路做一延时电路,延时电路加电时保持2s高电平后变低,利用这一电路来关闭EEPROM在上电2S中的写操作.
举一反三:
利用FPGA,CPLD,ARM,单片机设计的系统,设备上电时候应该对敏感信号管脚加以控制,以得到更高的可靠性.
我的解决办法可能不是最好的,如果大家有更好的解决办法,留言告诉我,大家共同学习,共同进步.活活 ,睡了. |