用NiosII搭建的固态盘设备系统
所用的这些控制器中,除了NAND型闪存控制器和ATA控制器需要自定义开发外,都可以使用标准的IP模块。NAND型闪存控制器和ATA控制器在自定义开发完成后也被集成到开发系统之中,可以方便地调用。
本文引用地址:http://www.amcfsurvey.com/article/85542.htmATA控制器负责ATA接口的实现。它是系统中最复杂的组件,所有与主机间的交互均通过ATA接口完成。为了满足各种需求,ATA控制器除了实现基本的ATA传输协议之外,开发中还增加了如下功能:
① 自带DMA控制器。ATA控制器中自带一个DMA控制器,只需给定源地址或目的地址,ATA控制器自带的DMA控制器就可以自动完成与缓存之间的数据交换。
② 带有中断信号源。ATA控制器带有一个中断源,当接收到主机端读/写传输请求时,即可发起一个中断提示处理器优先处理该事件。
③ 采用与系统异步的时钟。为了达到最优性能,ATA控制器可以使用与系统异步的时钟信号,而使用异步时钟桥与系统总线连接。例如在该系统实现中,主系统运行在65MHz,而ATA控制器运行在100 MHz。
NAND型闪存控制器则做成通用的接口控制器,提供基本的NAND型闪存读/写/擦除等操作即可。
3 系统软件设计
基于NiosII的SOPC平台搭建完成之后,需要在NiosII上设计适当的软件以调度整个系统,实现数据的缓存策略和存储策略。在软件设计中,采用了一种流程控制与策略控制弱耦合的结构,使得缓存策略和存储策略可以独立开发。
3.1 系统流程
考虑到所有事务中最频繁和最重要的事务都是与ATA控制器相关的,因此在系统算法中做如下设计:在ATA控制器和NiosII之间连接中断信号,使用中断服务来处理相关事务,而其他事务则采用软件轮询的方式处理。一个典型的处理流程如图3所示。
图3 软件基本流程设计
图3并非完整的软件流程(未涉及调试、错误处理以及其他辅助流程),仅仅标示出了系统最为重要的几个处理环节:缓存检查与维护、ATA读/写请求的处理。从该系统流程设计中可以看到,系统在运行过程中将在一个软件主循环中不断进行数据检查与维护,而当ATA中断来到时则转入ATA中断处理。数据维护模块和ATA处理模块是系统流程控制的主要部分。
数据维护模块主要负责检查缓存块是否老化/失效,缓存空间的碎片状态,并根据实际情况对缓存数据进行清理。而其中缓存片和缓存段所有的检查、判断、处理操作,都是直接调用缓存管理模块的相关函数,即直接依赖于缓存策略。该模块流程如图4所示。
图4 数据维护模块流程
ATA中断处理模块是在ATA控制器发起中断时进入处理模块的。ATA中断模块的主要任务包括查询ATA控制器的事务状态及参数,获取所需数据区域在NAND型闪存中的信息,申请缓存片,完成数据交换并清ATA中断。其中数据区信息由存储管理模块提供,而缓存的申请则是调用缓存管理模块的接口函数完成。该模块流程如图5所示。
图5 数据维护模块流程
软件控制流程中还包含一些辅助性的模块,以保证系统的鲁棒性。这些辅助性的模块包括独立的系统初始化模块、系统软复位模块和调试模式模块等,以便在系统出现错误时及时复位整套系统,维持系统正常的工作,或者供开发人员了解系统的错误所在。
3.2 存储管理模块
存储管理模块主要实现了数据在NAND型闪存中的存储策略。存储管理模块主要管理的信息包括:逻辑地址到物理块地址的映射信息、物理块磨损程度信息以及坏块映射信息。其主要作用是确保系统工作的鲁棒性以及尽量平均闪存块的磨损程度。当系统接收到主机的数据读/写请求时,首先须通过存储管理模块定位其物理位置信息,然后才能根据该信息创建缓存片,完成数据交换。
当系统需要将某格缓存片排空删除时,对数据的回写是需要根据缓存片内保留的相关信息来完成具体操作的。
存储管理模块的对外接口设计只有一个函数,即地址转换,输入操作的各种参数,返回一个确定的物理块描述结构,如表1所列。
表1 存储管理模块对外接口函数
在该函数内,将进行逻辑地址到物理地址的转换以及坏块再映射等操作,确保最终给出的数据信息是真正正确的物理信息。在返回提供的数据信息中,包括了应读取区域和应写入区域两个部分,这两个部分可以不相同,这样可以方便均衡磨损算法的设计。例如,如果一个块的写入次数已经达到一定程度,那么当出现对该块的写请求时,可以将应读取区域指定为该区域,而应写入区域指向另一个物理块,同时修改逻辑地址到物理地址的映射信息,那么当相应缓存片被销毁时,数据被写入新块,即在保证映射关系的同时避免了对该块的过度擦写。
评论