SATA协议加速模块、主机与硬盘通信方法及固态硬盘控制器
技术领域
本发明属于及计算机***的存储技术领域,特别涉及一种应用于固态硬盘控制器的SATA协议加速模块、主机与基于SATA接口的固态硬盘之间通信的方法及该固态硬盘控制器。
背景技术
固态硬盘(Solid State drive)是使用闪存等作为存储介质的硬盘,固态硬盘主机侧的接口与传统硬盘一样,多采用SATA接口。
SATA(Serial Advanced Technology Attachment)是一种高速串行接口,其协议分为4层,物理层、链路层、传输层以及命令层。物理层主要负责链路串并转换,链路层主要负责与对端进行链路级别的握手,传输层主要负责帧的构建和解析,命令层主要负责进行ATA命令的交互。
如图1所示,现有的基于SATA接口的固态硬盘包括固态硬盘控制器、Flash颗粒5、和Dram颗粒6,其中固态硬盘控制器包括SATA接口控制模块1、CPU2、Dram控制模块3和Flash接口控制模块4,所述SATA接口控制模块1和主机相连,SATA接口控制模块1分别通过CPU2和Dram控制模块3与Flash接口控制模块4相连,Flash接口控制模块4与Flash颗粒5相连,Dram控制模块3与Dram颗粒6相连。
SATA接口控制模块1负责实现固态硬盘跟主机的连接控制;CPU2负责处理来自主机的ATA命令,以及通过Flash接口控制模块4管理Flash颗粒5;Dram控制模块3负责管理Dram颗粒6;Flash接口控制模块4负责实现对Flash颗粒5的操作。
在图1所示的架构中,SATA接口控制模块1以硬件电路实现SATA协议中的前三层(包括物理层、链路层、传输层),SATA协议中的命令层由CPU2以及其运行的固件实现。SATA接口控制模块1将从主机收到的ATA命令发送给CPU2,CPU2根据SATA协议完成跟主机的交互动作。同时,CPU2还要根据SATA命令层协议检查ATA命令的正确性,如果命令层的交互出现异常,还要负责根据协议要求完成异常处理。这种由CPU2来处理SATA命令层的方式非常慢,CPU2会花费很大一部分资源和时间去解析和完成SATA命令层的协议交互,由于嵌入式CPU2在处理协议事务上速度不会很快,完成一个简单的比较运算都会花费多个时钟周期,更何况是要完成命令层中复杂的交互流程,这必然会导致SATA接口的性能带宽由于协议开销被消耗掉一部分,从而影响整个固态硬盘的性能。
申请号为CN201210369554的中国专利公开了一种基于协处理器的SATA控制器,使用microblaze(某FPGA公司提供的CPU软核)加固件软件代码的方式,实现SATA控制器中传输层状态机的跳转。该方法虽然增加了SATA控制器的灵活性,但是由于其使用的也是标准的嵌入式CPU加C语言代码,所以其效果跟上述现有一般固态硬盘控制器架构中的处理方式基本相同,不会减少完成SATA协议带来的时间开销,SATA接口的性能不能达到最大。
由于固态硬盘的存储介质多采用NAND Flash颗粒,在多通道并发模式下,访问NAND Flash颗粒的性能带宽会比SATA接口的最大理论带宽要大,所以现有架构的固态硬盘控制器中,SATA接口成了限制固态硬盘设备性能的瓶颈。
发明内容
现有基于SATA接口的固态硬盘中,由于CPU花费很大一部分资源和时间来实现SATA命令层,从而造成固态硬盘性能低。本发明的目的在于,针对上述现有技术的不足,提供一种SATA协议加速模块、主机与硬盘通信方法及固态硬盘控制器。
为解决上述技术问题,本发明所采用的技术方案是:
一种应用于固态硬盘控制器的SATA协议加速模块,包括接收控制模块、发送控制模块、信息提取模块、DMA接口控制模块、CPU接口控制模块、寄存器控制模块、指令执行模块和指令RAM模块,其中接收控制模块与SATA接口控制模块相连,接收控制模块通过DMA接口控制模块与Dram控制模块相连,接收控制模块依次通过信息提取模块、CPU接口控制模块与CPU相连,CPU接口控制模块通过寄存器控制模块与指令执行模块相连,CPU接口控制模块与指令RAM模块相连,指令执行模块还分别与信息提取模块、接收控制模块、指令RAM模块和发送控制模块相连,DMA接口控制模块还与发送控制模块相连,发送控制模块还与SATA接口控制模块相连;其中,
接收控制模块用于通过SATA接口控制模块接收来自主机的数据帧和非数据帧,同时根据指令执行模块的控制传递接收到的数据帧和非数据帧,其中数据帧通过DMA接口控制模块传递至Dram控制模块,由Dram控制模块中的DMA搬移到Dram颗粒;非数据帧传递至信息提取模块;
发送控制模块用于接收指令执行模块和DMA接口控制模块的请求传输SATA帧,并将接收到的内容通过SATA接口控制模块传至主机;其中非数据帧的内容由指令执行模块提供,数据帧的内容由DMA接口控制模块提供;
信息提取模块一方面用于将接收到的非数据帧中的主机发送到设备的帧通过CPU接口控制模块发送至CPU,另一方面用于从接收到的非数据帧中的主机发送到设备的帧中提取出ATA命令信息以及控制和状态信息;
DMA接口控制模块用于数据帧的传输,根据接收控制模块和发送控制模块的请求,通过Dram控制模块将数据从Dram颗粒读取或写入;
CPU接口控制模块用于适配CPU总线接口时序;
寄存器控制模块用于控制指令执行模块的运行,寄存器控制模块内部包括寄存器和命令描述符;寄存器的内容由CPU控制,寄存器的值用于控制指令执行模块的跳转判断、操作执行行为;命令描述符是描述一条ATA命令详细信息的数据结构,所述ATA命令详细信息包括命令类型,命令TAG,搬移数据的长度、地址以及控制信息,命令描述符由CPU根据收到的主机发送到设备的帧产生,并写入寄存器控制模块内部的命令描述符RAM;
指令RAM模块中用于存储指令序列,所述指令序列根据SATA命令层协议生成并由CPU写入;
指令执行模块用于根据SATA命令层的协议处理收到的ATA命令,指令执行模块通过解析指令序列并执行操作来控制SATA帧的收发,完成SATA命令层交互;指令执行模块包括三个基本操作:接收帧并跳转、发送帧并跳转、根据跳转条件跳转,发送帧的内容和跳转条件由信息提取模块、寄存器和命令描述符提供。
作为一种优选方式,所述指令序列中指令的数据结构为“操作码+控制码+跳转码”,其中,
操作码用于控制本指令序列所在状态的行为操作,所述行为操作包括三种,第一种为从主机接收预期的帧,并跳转到另一个状态;第二种为发送一个帧到主机,并跳转到另一个状态;第三种为不接收也不发送帧,并跳转到另一个状态;
控制码包含需要发送到主机的帧的相关信息或者预期从主机接收到的帧的相关信息,所述相关信息来源于信息提取模块和寄存器控制模块;
跳转码包含跳转到下一个状态的条件和下一个状态的地址信息,跳转条件包括是否成功发送帧到主机、接收到的帧是否符合预期、数据帧是否成功发送或者接收完成、是否检测到有SATA异常,不同的条件跳转到不同的状态。
进一步地,指令RAM模块中的指令序列是在上电时由CPU写入指令RAM模块。
基于同一个发明构思,本发明还提供一种主机与基于SATA接口的固态硬盘之间通信的方法,利用所述的SATA协议加速模块,包括如下过程:
利用接收控制模块通过SATA接口控制模块接收来自主机的数据帧和非数据帧,同时根据指令执行模块的控制传递接收到的数据帧和非数据帧,其中数据帧通过DMA接口控制模块传递至Dram控制模块,由Dram控制模块中的DMA搬移到Dram颗粒;非数据帧传递至信息提取模块;
利用发送控制模块接收指令执行模块和DMA接口控制模块的请求传输SATA帧,并将接收到的内容通过SATA接口控制模块传至主机;其中非数据帧的内容由指令执行模块提供,数据帧的内容由DMA接口控制模块提供;
利用信息提取模块一方面将接收到的非数据帧中的主机发送到设备的帧通过CPU接口控制模块发送至CPU,另一方面从接收到的非数据帧中的主机发送到设备的帧中提取出ATA命令信息以及控制和状态信息;
利用DMA接口控制模块传输数据帧,并根据接收控制模块和发送控制模块的请求,通过Dram控制模块将数据从Dram颗粒读取或写入;
利用CPU接口控制模块适配CPU总线接口时序;
利用寄存器控制模块控制指令执行模块的运行;
利用CPU控制寄存器的内容;利用CPU根据收到的主机发送到设备的帧产生命令描述符并写入命令描述符RAM;根据SATA命令层协议生成指令序列并由CPU写入指令RAM模块中;
利用指令执行模块根据SATA命令层的协议处理收到的ATA命令,利用指令执行模块通过解析指令序列并执行操作来控制SATA帧的收发,完成SATA命令层交互。
作为一种优选方式,还包括利用CPU将指令序列写入指令RAM模块中。
基于同一个发明构思,本发明还提供一种固态硬盘控制器,包括SATA接口控制模块、CPU、Dram控制模块和Flash接口控制模块,SATA接口控制模块通过Dram控制模块与Flash接口控制模块相连,CPU与Flash接口控制模块相连,还包括所述的SATA协议加速模块,所述接收控制模块与发送控制模块均与SATA接口控制模块相连,所述DMA接口控制模块与Dram控制模块相连,所述CPU接口控制模块与CPU相连。
本发明在SATA接口控制模块与CPU之间增加了一个SATA协议加速模块,用于协助CPU处理SATA ATA命令交互,以加速处理SATA命令层协议,能够减少SATA接口协议消耗带来的性能损失,突破了SATA接口的性能瓶颈,提高了SATA接口和固态硬盘的性能;本发明能够实现所有SATA命令层协议以及用户自定义命令,指令序列支持功能可配置,可根据要实现的功能重新设计,当需要升级或更改功能时,只需要重新编制相应的指令序列,由CPU重新配置即可,不用更改硬件电路,支持SATA协议的扩展升级,减少电路改动带来的风险及成本。
附图说明
图1为现有基于SATA接口的固态硬盘结构示意图。
图2为本发明SATA协议加速模块一实施例的结构示意图。
图3为本发明指令序列中指令的数据结构示意图。
图4为本发明指令RAM模块中指令序列的分布示意图。
图5为本发明固态硬盘控制器的结构示意图。
图6为一次NCQ读命令交互过程示意图。
其中,1为SATA接口控制模块,2为CPU,3为Dram控制模块,4为Flash接口控制模块,5为Flash颗粒,6为Dram颗粒,7为SATA协议加速模块,71为接收控制模块,72为发送控制模块,73为指令RAM模块,74为信息提取模块,75为指令执行模块,76为寄存器控制模块,77为CPU接口控制模块,78为DMA接口控制模块。
具体实施方式
本发明中英文符号含义说明如下:
SATA:Serial Advanced Technology Attachment,一种高速串行接口。
FIS:SATA协议中用来进行数据交互的帧。
NCQ:SATA协议中规定的一种命令类型。
ATA:Advanced Technology Attachment,标准硬盘规范命令集。
DMA:Direct Memory Access,直接内存存取,通常用来进行大量数据的搬移。
CPU:Central Processing Unit,中央处理器。
RAM:Random Access Memory,随机存取存储器。
Dram:Dynamic Random Access Memory,动态随机存取存储器。
H2D FIS:主机发送到设备的帧。
D2H FIS:设备发送到主机的帧。
TAG:命令的标签位。
Flash:存储芯片的一种。
NAND Flash:一种闪存存储介质。
如图2所示,本发明一种应用于固态硬盘控制器的SATA协议加速模块7主要由以下硬件模块构成:接收控制模块71、发送控制模块72、信息提取模块74、DMA接口控制模块78、CPU接口控制模块77、寄存器控制模块76、指令执行模块75和指令RAM模块73;其中接收控制模块71与SATA接口控制模块1相连,接收控制模块71通过DMA接口控制模块78与Dram控制模块3相连,接收控制模块71依次通过信息提取模块74、CPU接口控制模块77与CPU2相连,CPU接口控制模块77通过寄存器控制模块76与指令执行模块75相连,CPU接口控制模块77与指令RAM模块73相连,指令执行模块75还分别与信息提取模块74、接收控制模块71、指令RAM模块73和发送控制模块72相连,DMA接口控制模块78还与发送控制模块72相连,发送控制模块72还与SATA接口控制模块1相连;其中,
接收控制模块71跟SATA接口控制模块1对接,用于通过SATA接口控制模块1接收来自主机的数据帧和非数据帧,同时根据指令执行模块75的控制传递接收到的数据帧和非数据帧,其中数据帧通过DMA接口控制模块78传递至Dram控制模块3,由Dram控制模块3中的DMA搬移到Dram颗粒6;非数据帧是携带主机命令和控制信息的帧,传递至信息提取模块74,由信息提取模块74提取命令、地址、长度、控制等相关信息;
发送控制模块72用于接收指令执行模块75和DMA接口控制模块78的请求传输SATA帧,并将接收到的内容通过SATA接口控制模块1传至主机;其中非数据帧(主要用来跟主机进行控制交互的帧)的内容由指令执行模块75提供,数据帧(主机命令涉及的要搬移的数据)的内容由DMA接口控制模块78提供;
信息提取模块74一方面用于将接收到的非数据帧中的主机发送到设备的帧通过CPU接口控制模块77发送至CPU2,另一方面用于从接收到的非数据帧中的主机发送到设备的帧中提取出ATA命令信息以及控制和状态信息,这些信息就是ATA协议中的task fileregister信息;
DMA接口控制模块78就是普通的DMA模块,用于数据帧的传输,根据接收控制模块71和发送控制模块72的请求,通过Dram控制模块3将数据从Dram颗粒6读取或写入;
CPU接口控制模块77用于适配CPU2总线接口时序;
寄存器控制模块76用于控制指令执行模块75的运行,寄存器控制模块76内部包括寄存器和命令描述符;寄存器的内容由CPU2控制,寄存器的值用于控制指令执行模块75的跳转判断、操作执行行为;命令描述符是描述一条ATA命令详细信息的数据结构,所述ATA命令详细信息包括命令类型,命令TAG,搬移数据的长度、地址以及控制信息,命令描述符由CPU2根据收到的主机发送到设备的帧产生,并写入寄存器控制模块76内部的命令描述符RAM,指令执行模块75通过命令描述符的内容,来完成SATA命令层交互;
指令RAM模块73中用于存储指令序列,所述指令序列根据SATA命令层协议生成并由CPU2写入;指令RAM模块73中的指令序列是在上电时由CPU2写入指令RAM模块73;如图4所示为本发明指令RAM模块73中指令序列的分布示意图。
指令执行模块75用于根据SATA命令层的协议处理收到的ATA命令,指令执行模块75通过解析指令序列并执行操作来控制SATA帧的收发,完成SATA命令层交互;指令执行模块75包括三个基本操作:接收帧并跳转、发送帧并跳转、根据跳转条件跳转,发送帧的内容和跳转条件由信息提取模块74、寄存器和命令描述符提供。指令执行模块75设计为类似CPU的工作原理,CPU2可以通过寄存器、命令描述符控制指令执行模块75的操作序列。上电后,指令序列处于“等待初始化”状态,CPU2内的固件检测到COMRESET中断,执行相关的复位操作后,通过控制寄存器控制模块76中的寄存器,促使执行初始化指令序列,向主机发送D2HFIS,然后指令序列跳转到IDLE状态,等待收到主机命令。当收到主机命令后,指令序列根据命令类型跳转到相应状态。
根据SATA命令层协议,完成一类命令可能需要执行多条指令。可事先制定好处理各类SATA命令的指令序列,这些指令序列分布在指令RAM模块73中的不同地址区域。上电后CPU2将这些指令序列放在指令RAM模块73。待SATA链路连接成功后,SATA协议加速模块7随即启动,进入LINKUP状态,向主机发送D2H FIS,然后跳转到IDLE状态,等待接收命令,然后根据接收到命令跳转到不同地址执行,完成该命令后再跳转到IDLE状态。
SATA协议加速模块7能够收到主机发过来的任何帧,并能从中提取关键信息,也能控制向主机发送的帧的内容和时机,该SATA协议加速模块7包含一个存储指令序列的指令RAM模块73,该SATA协议加速模块7所有的操作都是通过执行指令RAM模块73中的指令序列实现的,并且指令序列可以重新制定再由CPU2写进指令RAM模块73。
本发明SATA协议加速模块7包含硬件电路和特定的指令序列,以一种类似于CPU的工作方式,通过执行特定的指令序列,可以非常灵活简便地实现SATA命令层协议,可以协助处理所有SATA命令以及其他用户自定义命令。
如图3所示,所述指令序列中指令的数据结构为“操作码+控制码+跳转码”,其中,
操作码用于控制本指令序列所在状态的行为操作,所述行为操作包括三种,第一种为从主机接收预期的帧,并跳转到另一个状态;第二种为发送一个帧到主机,并跳转到另一个状态;第三种为不接收也不发送帧,并跳转到另一个状态;
控制码包含需要发送到主机的帧的相关信息或者预期从主机接收到的帧的相关信息,所述相关信息来源于信息提取模块74和寄存器控制模块76;
跳转码包含跳转到下一个状态的条件和下一个状态的地址信息,跳转条件包括是否成功发送帧到主机、接收到的帧是否符合预期、数据帧是否成功发送或者接收完成、是否检测到有SATA异常,不同的条件跳转到不同的状态。
使用该指令结构的每一条指令都可以完成诸如发送一条帧到主机、从主机接收帧等操作。多条指令序列即可完成一条ATA命令的交互。
所述的指令序列中的指令由操作码、控制码、跳转码三部分组成,且不限于这三部分。该指令能完成发送帧、比较收到的帧、判断数据是否传输完成等相关操作,任何能完成此功能的指令的数据结构(不限于上述的三部分组成),都应视为本发明申请要求的权利。
下面给出指令序列的简要数据结构示例,该示例不构成对本发明的限制。
操作码:
控制码:
跳转码:
一种主机与基于SATA接口的固态硬盘之间通信的方法,利用所述的SATA协议加速模块7,包括如下过程:
利用接收控制模块71通过SATA接口控制模块1接收来自主机的数据帧和非数据帧,同时根据指令执行模块75的控制传递接收到的数据帧和非数据帧,其中数据帧通过DMA接口控制模块78传递至Dram控制模块3,由Dram控制模块3中的DMA搬移到Dram颗粒6;非数据帧传递至信息提取模块74;
利用发送控制模块72接收指令执行模块75和DMA接口控制模块78的请求传输SATA帧,并将接收到的内容通过SATA接口控制模块1传至主机;其中非数据帧的内容由指令执行模块75提供,数据帧的内容由DMA接口控制模块78提供;
利用信息提取模块74一方面将接收到的非数据帧中的主机发送到设备的帧通过CPU接口控制模块77发送至CPU2,另一方面从接收到的非数据帧中的主机发送到设备的帧中提取出ATA命令信息以及控制和状态信息;
利用DMA接口控制模块78传输数据帧,并根据接收控制模块71和发送控制模块72的请求,通过Dram控制模块3将数据从Dram颗粒6读取或写入;
利用CPU接口控制模块77适配CPU2总线接口时序;
利用寄存器控制模块76控制指令执行模块75的运行;
利用CPU2控制寄存器的内容;利用CPU2根据收到的主机发送到设备的帧产生命令描述符并写入命令描述符RAM;根据SATA命令层协议生成指令序列并由CPU2写入指令RAM模块73中;利用CPU2将指令序列写入指令RAM模块73中。
利用指令执行模块75根据SATA命令层的协议处理收到的ATA命令,利用指令执行模块75通过解析指令序列并执行操作来控制SATA帧的收发,完成SATA命令层交互。
如图5所示,本发明一种固态硬盘控制器包括SATA接口控制模块1、CPU2、Dram控制模块3和Flash接口控制模块4,SATA接口控制模块1通过Dram控制模块3与Flash接口控制模块4相连,CPU2与Flash接口控制模块4相连,还包括所述的SATA协议加速模块7,所述接收控制模块71与发送控制模块72均与SATA接口控制模块1相连,所述DMA接口控制模块78与Dram控制模块3相连,所述CPU接口控制模块77与CPU2相连。
本发明主要使用硬件实现SATA命令层,完成一条SATA命令交互只需要执行几个指令,只需要几个时钟周期,比使用CPU2来处理快很多,并且还释放了部分CPU2资源。特别是针对NCQ读命令的交互,如图6的NCQ读命令交互流程,使用本发明方法的固态硬盘,在收到携带命令的主机发送到设备的帧后,能在几个指令周期后向主机发送D2H FIS,这样主机就能立即下发下一条NCQ命令。而使用现有技术即CPU2处理的固态硬盘,从收到主机发送到设备的帧到回送D2H FIS会花费上百个指令周期,比本发明所述的方法花费指令周期长得多。