基于FPGA的高速大容量FLASH存储
扫描二维码
随时随地手机看文章
1、引言
数字电路应用越来越广泛,传统通用的数字集成芯片已经难以满足系统的功能要求,随着系统复杂程度的提高,所需通用集成电路的数量呈爆炸性增值,使得电路的体积膨大,可靠性难以保证 [1]。因而出现了现场可编程门阵列 (FPGA)和复杂可编程逻辑器件 (CPLD)。在我国 20世纪 90年代以前,测试系统采用磁带记录,效率和安全保障性不高;随之出现的是遥测技术,但在传输数据的过程中会出现误差;接着是静态存储器,它读、写方便,但是存储的数据会因为断电而丢失,所以,不利于数据长时间保存;目前,闪存的问世,NOR和 NAND是现在市场上两种主要的非易失闪存技术,它有存储容量大、体积小、可靠性高等优点,测试系统会逐步向这个方向发展。
2、设计思想
500)this.style.width=500;" border="0" />
2.1核心芯片选择
(1)接受芯片选择 MAX491
此芯片为 RS-422/485扩展芯片,为 DIP14封装。MAX491有两个控制端,如果两个控制端由微处理器的一个 I/O口控制,则总线,两线制,半双工工作。如果两个控制端单独控制,则总线为 RS-422总线,四线制,全双工工作。 MAX491采用+5V电源供电,当供电电流仅有 500uA时,传输速率却能达到 2.5Mbits/s。它的内部有一个传输线驱动器和一个传输线接收器,因此可以采用全双工工作。
(2)FPGA采用Spartan-II系列Xc2s100
Spartan-II系列Xc2s100有着丰富的触发器和 LUT(Look-Up-Table),非常适合复杂时序逻辑的设计。FLASH采用SAMSUNG公司的 NANDFLASH芯片K9F8G08,接口宽度 8位。每个芯片含8192个数据块,一个块分为64页,每页大小为 (2K+64)Bytes,其中64Bytes为空闲区,存储容量为8Gbit。它以页为单位进行读写,以块为单位擦除、命令、数据、地址共用同一总线,具有硬件数据保护功能。
2.2 MAX491设计时需要注意的问题
(1)RS-422传输线上匹配的一些说明:理论上,在每个接收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。但这在实际上难以掌握,美国 MAXIM公司有篇文章提到一条经验性的原则可以用来判断在什么样的数据速率和电缆长度时需要进行匹配:当信号的转换时间(上升或下降时间)超过电信号沿总线单向传输所需时间的 3倍以上时就可以不加匹配。
一般终端匹配采用终接电阻方法,RS-422在总线电缆的远端并接电阻,终接电阻一般在 RS-422网络中取 100Ω,这种匹配方法简单有效,但有一个缺点,匹配电阻要消耗较大功率,对于功耗限制比较严格的系统不太适合;
另外一种比较省电的匹配方式是 RC匹配;
还有一种采用二极管的匹配方法。
(2)RS-422的接地问题
RS-422传输网络的接地是很重要的,因为接地系统不合理会影响整个网络的稳定性,尤其是在工作环境比较恶劣和传输距离较远的情况下,对于接地的要求更为严格。 RS-422尽管采用差分平衡传输方式,但对整个 RS-422网络,必须有一条低阻的信号地。一条低阻的信号地将两个接口的工作地连接起来,使共模干扰电压 VGPD被短路。这条信号地可以是额外的一条线(非屏蔽双绞线),或者是屏蔽双绞线的屏蔽层。这是最通常的接地方法。
(3)RS-422的网络失效保护
RS-422标准都规定了接收器门限为± 200mV。这样规定能够提供比较高的噪声抑制能力,当接收器 A电平比B电平高+200mV以上时,输出为正逻辑,反之,则输出为负逻辑。但由于第三态的存在,即在主机在发端发完一个信息数据后,将总线置于第三态,这带来了一个问题:接收器输出状态不确定。如果接收机的输出为 0V,网络中从机将把其解释为一个新的启动位,并试图读取后续字节,由于永远不会有停止位,产生一个帧错误结果,不再有设备请求总线,网络陷于瘫痪状态。除上述所述的总线空闲会造成两线电压差低于 200mV的情况外,开路或短路时也会出现这种情况。故应采取一定的措施避免接收器处于不确定状态。
(4)RS-422的瞬态保护
由于传输线对高频信号而言就是相当于电感,因此对于高频瞬态干扰,接地线实际等同于开路。这样的瞬态干扰虽然持续时间短暂,但可能会有成百上千伏的电压。实际应用环境下还是存在高频瞬态干扰的可能。一般在切换大功率感性负载如电机、变压器、继电器等或闪电过程中都会产生幅度很高的瞬态干扰,如果不加以适当防护就会损坏 RS-422通信接口,对于这种瞬态干扰可以采用隔离或旁路的方法加以防护。方法有隔离保护方法和旁路保护方法。
2.3 FPGA内部编程设计
采用MAX491串行接收实时数据,并通过 Xc2s100串行数据转换为并行数据,并控制存储到FLASH中,在这个过程中,最关键的是对 Spartan-II系列Xc2s100内部编程,内部模块包括异步串行通信模块和控制FLASH存储、读数和擦除模块[2]。
(1)异步串行通信模块[3](如图2) UART 发送模块(如图 2中的 send) 发送器每隔 16个 CLK16时钟周期输出 1位,次序遵循 1位起始位、 8位数据位(假定数据位为 8位)、1位校验位(可选)、 1位停止位;
何时通过 UART发送数据由 CPU控制,也就是说 CPU要接受数据必须判断当前是否可写,如果不判这个条件,接受的数据会出错。
数据的发送是由微处理器控制,微处理器给出信号,发送模块根据此信号将并行
数据 din[7..0]通过移位寄存器转换为串行数据至串行数据输出端 Txd。 UART 接收模块(如图2中的receive)
串行数据帧和接收时钟是异步的,发送来的数据由逻辑 1’变为逻辑‘ 0’可以视为一个数据帧的开始。
接收器先要捕捉起始位,确定 rxd输入由 1到0,逻辑 0需要8个CLK16时钟周期,才是正常的起始位,然后在每隔 16个CLK16时钟周期采样接收数据(也可以为其它数),将串行数据 din通过移位寄存器发送串行数据至并行数据输出端 dout[7..0],放入存储器件。在数据发送过程中用输出信号 fifowr作为标志信号,当一帧数据发送完毕时,fifowr信号为0,通知CPU在下个时钟装入新数据。
500)this.style.width=500;" border="0" />
[!--empirenews.page--]
(2) FLASH存储、读数和擦除模块(如图 3) FLASH在写数据、读数据和擦除时 [4],编写控制FLASH的程序,要按照如下规则:
页编程:器件的编程以页为单位,但在一个页编程周期中允许对部分页(一个或连续的多个字节)编程。一个页编程周期由串行数据加载阶段和紧随的编程阶段组成。在数据加载阶段,数据被加载到数据寄存器中 ;在编程阶段,已加载的数据写入实际的存储单元,编程典型时间为200µs。
页读:器件在上电时,就被初始化为读模式,此时可以不写 00h命令,直接写入地址和30h命令即可。有两种类型的读,分别是随机读和顺序页读。由于设计存储时
是基于整个页操作,所以读命令使用顺序页读。命令打入后经过最多20µs的时间,数据则会从选择的页传到数据寄存器中。
块擦除:器件的擦除操作是以块为单位的。块地址加载由擦除建立命令 60h启动,然后输入确认命令D0h,执行内部擦除过程。这一先建立再执行的两步命令时序,确保了存储内容不会由外部的干扰而意外擦除,擦除时间典型值为1.5ms。
500)this.style.width=500;" border="0" />
3、系统调试
电路通过模拟接受一组实时串行数据,经过 FPGA串行数据转换为并行数据,并且存储到 FLASH;再与主机通信读回存储在 FLASH中的数据 [5]。它已经可以稳定的工作在 180Mbytes/s的存储速度,满足了所需的机载实验要求。 USB芯片工作在从方式 (Slave FIFO模式),由FPGA控制芯片的读写,同步传输数据。实测中通过 USB回放数据的速度为 15Mbytes/s。 4、结论
本文设计了基于 FPGA和FLASH存储测试系统,使 FPGA与FLASH各自的优点得到了有效的发挥:本文作者创新点: RS-422电平传输串行数据,通过 FPGA把串行数据转化为并行数据存储到高速大容量的 FLASH的存储系统的具体设计和实施,在保证系统工作性能的情况下简化了系统设计,并验证了系统设计方案的正确性和可行性,为进一步工程化实现打下了良好的基础,具有一定的工程应用价值。