微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > RAID控制器中磁盘接口控制器流水线设计与实现

RAID控制器中磁盘接口控制器流水线设计与实现

时间:10-15 来源:互联网 点击:

中。如某个模块处理后磁盘操作请求已完成,则该模块不再向其他模块传递该数据块结构,直接将其删除。这种方式简单有效,易于编码实现。

  3.2 缓冲管理

  在RAID5中,计算奇偶校验块需要同分条中的4个数据块,因此异或计算模块需要一个较大的缓冲来存放数据块。其他模块也至少需要一个数据块大小的缓冲存放当前操作的数据块。一个双队列的生产者-消费者模型(如图4)被用来实现高效缓冲管理。


  这2个队列的长度不是固定的,是根据每个操作方向上的请求数量动态调整。在图4中,若读磁盘操作请求较多则增加缓冲队列1的长度;若写磁盘操作请求较多则增加缓冲队列2的长度。2个队列的总大小总是小于或等于整个缓冲的大小。每一个队列都是循环队列,生产者总是把新的数据块放到队列的尾部;只要该队列不为空,消费者总是从队列的头部取走数据块。

  4 磁盘接口控制器系统设计与实现

  4.1 应用环境

  本控制器应用在RAID控制器的系统总线与连接硬盘的SAS总线之间,主要根据RAID控制器中的主处理器命令进行可靠快速的磁盘数据块的读写。

  图5描述了本控制器典型应用环境。深色部分为本控制器,浅色部分是外部环境。


  从应用环境中可以看出,磁盘接口控制器是连接RAID控制器与硬盘组的桥梁。磁盘接口控制器通过SAS总线连接多个硬盘,通过系统总线(如PCI总线)连接到RAID控制器整个系统中。

  4.2 总体结构与各功能模块

  磁盘接口控制器包括5个大的功能模块:磁盘命令预处理模块、共享缓存操作模块、地址映射模块、异或计算模块、磁盘操作模块。由于采用的是FPGA测试和验证,对成熟的模块,如PCI模块、SATA模块、DMA模块直接使用FPGA中的资源。四级流水的磁盘接口控制器总体结构如图6。


  4.2.1 命令预处理模块

  命令预处理模块主要根据RAID控制器中主处理器的命令决定该命令的操作流程,不同的读写方式在不同的工作模式下其数据流程不一样。命令预处理模块主要包括命令缓冲区和PLC微处理器。命令缓冲区主要接收RAID控制器中主处理器发过来的命令,命令包括:2种工作模式命令(正常模式和降级模式)、2种分条读写方式(完整分条和部分分条)、磁盘写命令(首个逻辑块地址LBA,逻辑块数)、磁盘读命令(首个逻辑块地址LBA,逻辑块数)。PLC微处理器是一个8 bit RISC微处理器,也是整个控制器的核心,负责解析磁盘操作命令和控制命令的整个执行过程,包括其他4个功能模块的任务分派和协调。

  4.2.2 共享缓存操作模块

  RAID控制器包含有大容量的SDRAM作为磁盘阵列的缓存,所有异或操作的数据块都存放在缓存中。共享缓存操作模块主要完成缓存数据块的读写,包括PCI总线和读写控制逻辑。PCI总线使用FPGA芯片自身所带的逻辑,读写控制逻辑主要根据命令预处理模块发过来的命令产生相应的读写时序并解决总线冲突。

  4.2.3 地址映射模块

  由于RAID控制器中主处理器操作的都是逻辑地址,地址映射模块完成的是逻辑地址到物理盘号、柱面号、扇区号的映射。地址映射模块包括逻辑地址寄存器和物理地址寄存器,并包括一个地址变换机构。地址变换机构是一个快速哈希变换机构,输入的逻辑地址通过快速哈希变换和相应的查表获得实际的物理地址。

  4.2.4 异或操作模块

  异或操作模块是RAID保证数据可靠性的基础,主要完成异或计算。这个模块比较简单,包括2个数据输入寄存器和一个输出寄存器,所有寄存器的位数是256 bit,一次异或操作可完成2个16 B数据的操作。一个分条的异或操作通过多次执行异或计算逻辑来实现。

  4.2.5 磁盘操作模块

  磁盘操作模块主要完成实际磁盘的数据读写,该模块通过SATA总线连接多个磁盘。该模块主要包括SATA主控制器和磁盘操作单元,SATA主控制器使用FPGA芯片本身自带的逻辑,磁盘操作单元是要实现的逻辑,主要接收和执行PLC微处理器发过来的读写命令,将数据从磁盘读到共享缓冲区或把共享缓冲区的数据写到对应的磁盘上。

  4.3 RTL设计与实现

  根据前述的系统结构和各功能模块,对本控制器进行了RTL设计和实现。这里以复位控制、输入控制为例说明其实现过程。

  复位控制是IC设计中一个基本而重要的问题。综合同步复位和异步复位的优缺点,对复位控制电路的设计采用“异步复位,同步撤离”的策略,使用2个触发器级联,消除亚稳态的影响。同时,为了滤除异步复位中毛刺的影响,在复位端口用一个二输入与非门和一个缓冲器设计了一级滤除毛刺的电路,这样就可以得到一个干净的复位信号。

在本控制器的5个子模块中都存在数据的输入和输出。不同的模块只需要配置不同大小的FIFO。输入控制的设计主要以一个异步FIFO作为弹性缓冲器,该FIFO的大小

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top