>
终于完成了步进电机驱动器的fpga调试,芯片为xilinx的3s400,心得如下:
1、该设计经过了完善的后仿真,后仿真没有任何警告,所有模块工作都正常。
2、下载后,芯片工作不正常,示波器现实的波形不对。故采用chipscope进行调试。推荐使用该工具调试芯片,能够非常迅速的找到问题所在。
3、仿真中的激励总是理想的,实际下载后输入信号的干扰导致芯片正常工作时间不超过2秒,chipscope发现状态机跑飞,onehot编码的Statemachine竟然处于全0状态。进一步分析,因为输入的慢速信号考虑到速度很慢,因此没有寄存,导致对SM的建立时间不够,SM的寄存器进入亚稳态,因此输入寄存的一个很深层次的原因是:防止芯片内部的关键DFF因为外部输入的异步信号(无论频率有多么低)的建立时间不够而进入亚稳态。这是经验所得。
4、输出需要寄存,无论输出信号频率多么低。在本设计中,输出信号经过200MHz计数器调制的PWM波,PWM波本身的载波频率仅仅12.5KHz。本设计因为这个问题,输出没有信号显示,困扰了很久。组合逻辑到pad总是有毛刺的。
5、与外部信号通讯的相关模块给内部模块的控制信号尽量采用电平信号握手,而不是脉冲信号。就是说:有start输出和start_ack输入进行握手,采用电平信号传递;而不是一个start脉冲代表开始。实际情况非仿真能够覆盖的,一个万一没有捕捉到这个start脉冲,状态机就永远的卡死了。