确认了EMI问题,下一步就是怎样解决的问题。EMI的发生需要三个条件:干扰源、传播媒介、易受干扰的受害者。在当时的情况下,这三个条件中,唯一可控的就是干扰源——FPGA驱动的数据总线。
我查阅了Cyclone芯片的数据手册,找到了信号跳变与EMI的联系:信号边沿的上升和下降时间,时间越短,EMI越强。影响FPGA输出信号的上升时间的因素有三个:
- I/O标准(I/O Standard),因标准而异。
- 驱动电流强度(Current Strength)。电流越大,上升速度越快。电流从24mA到4mA不等。
- 信号坡度(Slew Rate),分为快慢两种。
- 输出延时(Output Delay),加入延时可以减缓上升速度。
在Assignment Editor中对上述因素进行了设置,采用3.3V LVTTL + 4mA + Slow Slew Rate + Output Delay设置方式,使信号上升时间达到最大,产生的EMI最小,问题也就解决了。
信号上升时间比较。
Fast Slew Rate + 24mA + no Output Delay = 2.25ns上升时间
Slow Slew Rate + 4mA + Output Delay = 4.65ns上升时间
硬盘的上升时间 = 8.85ns
从上面的比较看来,即使采用了最佳的约束,FPGA的输出信号上升时间仍然与硬盘驱动的信号存在很大的差距,这也是IDE硬盘与转接电路板连接不会出现问题的原因。硬盘的接口芯片应该采取了专门的处理,在芯片的制造工艺上采取了措施。这一点无从考证。
避免和解决该问题的方法归纳
- ATA协议中规定了传输信号的转换速率,这一点在设计电路板时应加以考虑和处理,在FPGA的约束上也要加以注意。
- EMI问题的定位比较困难,尽量在设计阶段解决,不要遗留到调试阶段。
- 特定数据模式或特定地址传输导致的问题,需要考虑接口的EMI问题。因为接口是没有智能的,不会识别和挑剔数据内容。
- FPGA的引脚驱动能力会影响EMC,在某些情况下导致EMI问题。当发生EMI问题时,约束电流强度是一种可行的解决方法。
- 在调试过程中,对于小概率发生的事件可以采用多个实验并行进行的方式缩短实验时间。
- 对实验现象的解释需要大胆猜测,小心论证