基于sata控制器的dma地址对预读取方法

文档序号:6378570阅读:616来源:国知局
专利名称:基于sata控制器的dma地址对预读取方法
技术领域
本发明涉及于计算机系统的存储技术领域,具体地,涉及一种基于SATA控制器的DMA地址对预取方法。
背景技术
SATA (Serial Advanced Technology Attachment)是串行高级技术附件,一种基于行业标准的串行硬件驱动器接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。SATA可以让用户拥有高效能的硬盘,却不需要牺牲资料的完整性。SATA最大的优势是传输速率高。SATA的工作原理采用连续串行的方式来实现数据传输从而获得较高传输速率。2003年发布SATA1. O规格提供的传输率就已经达到了 150MB/s,不但已经高出普通IDE硬盘所提供的100MB /s (ATA100)甚至超过了 133MB/s (ATA133)的最高传输速率。SATA在数据可靠性方面也有了大幅度提高。SATA可同时对指令及数据封包进行循环冗余校验(CRC),不仅可检测出所有单字节和双字节的错误,而且根据统计学的原理,这样还能够检测出99. 998%可能出现的错误。相比之下,PATA只能对来回传输的数据进行校验,而无法对指令进行校验,加之高频率下干扰甚大,因此数据传输稳定性很差。除了传输速度、传输数据更可靠外,节省空间是SATA最具特色之处,更有利于机箱内部的散热,线缆间的串扰也得到了有效控制。SATA控制器定义了高速接口的物理层phy、数据链路层I ink、传输层transport和应用层application四层协议。现有的SATA控制器物理层,数据链路层和传输层的协议实现,完全是由硬件逻辑来实现,这样硬件结构复杂,导致了实现的过程复杂而且硬件逻辑资源消耗很大。现有的SATA控制器物理层,数据链路层和传输层的协议实现,完全是由硬件逻辑来实现,这样的硬件结构复杂,导致了实现的过程复杂,而且硬件逻辑资源消耗很大。DMA操作数据传输过程需要通过CPU的IO来处理DMA操作的请求,同时CPU分配内存地址和长度来提供DMA操作数据在内存的读和写操作。在这个过程中,DMA操作内存数据的读写是先由DMA发起操作,然后CPU处理DMA的请求,再分配请求的读写内存地址,最后DMA开始做数据的搬移,数据搬移完成后之后告诉CPU此次DMA请求操作完成信息。其中DMA的请求是通过CPU的IO总线来到达CPU的。SATA控制器的传输性能主要取决于DMA工作的效率和CPU处理DMA中断的能力。DMA的工作效率取决于DMA去内存取数据地址和数据长度的时间以及取数据地址和数据长度的次数。传统的DMA基本每次做DMA传输数据都要到内存去取数据地址和数据长度,操作完成再给CPU发中断请求,CPU处理DMA中断请求分配内存地址和长度,DMA每次操作都去内存取地址和长度来传输数据,这样增加了重复去取内存地址和长度的次数,就增加了 DMA传输数据的时间,限制了 DMA数据传输的效率。

发明内容
本发明的目的在于,针对上述问题,提出一种基于SATA控制器的DMA地址对预取方法,以实现提高DMA数据传输的效率的优点。为实现上述目的,本发明采用的技术方案是
一种基于SATA控制器的DMA地址对预取方法,包括LIS总线接口模块,DMA状态机,接收数据缓存,发送数据缓存,信息控制模块和预取缓存FIFO模块;
所述LIS总线接口模块为连接DMA状态机和内存的LIS总线提供接口,所述LIS总线为在DMA和内存间进行数据传输的数据总线;
所述接收数据缓存缓存DMA写入内存的数据;
所述发送数据缓存缓存DMA读出内存中的数据;
所述信息控制模块对Local link总线接口信号的跨时钟域进行处理和对DMA通过Local link总线接收和发送数据进行控制;
所述预取缓存FIFO模块缓存DMA预取数据的地址对;
所述DMA状态机执行DMA请求,处理DCR总线寄存器的状态信息和处理DCR总线寄存器地址对信息并对地址对进行预取,实现对地址对对应在内存中的预取数据进行数据搬移,同时控制DMA状态机各个状态的跳变和各个状态的逻辑输出。一种基于SATA控制器的DMA地址对预取方法实现包括上述模块的硬件逻辑,接口实现以及CPU协处理器处理FIS包过程和DMA状态机对传输数据的地址对的预取过程和预取时间以及位置,上述模块的主要硬件逻辑和接口实现包括DMA状态机逻辑和DCR总线接口逻辑。DMA状态机主要是实现SATA控制器到内存的数据搬移和对数据地址对的预取控制,保证传输数据的性能。通过硬件逻辑实现DMA状态机的状态跳转和地址对的预取功能以及DCR总线接口寄存器的控制信息位的判断和控制DMA读写;实现DMA的LIS接口对内存数据的搬移,保证读写数据通路的传输性能。DMA状态机状态跳转将在以下实例说明。DCR总线接口寄存器值通过DCR总线接口的CPU协处理器端实现对SATA控制器传输层FIS包的解析,获取DMA地址对预取的地址和长度并将地址对信息通过DCR总线下发到DMA状态机的地址对寄存器。CPU协处理器的处理FIS包过程和DMA状态机对传输数据的地址对的预取过程和预取时间以及位置,包括以下步骤
发送H2D命令寄存器FIS包主机端发送H2D命令寄存器FIS包到设备端,该H2D命令寄存器FIS包内容包含有主机端要求的读、写和包的类型命令字信息;
D2H命令寄存器包检测主机端发送完H2D命令寄存器FIS包后等待设备端的响应,若设备端接收到主机的H2D命令寄存器FIS包,设备端则发送D2H命令寄存器包给主机端;DMA设置FIS包检测设备端发送DMA设置FIS包给主机端,主机端CPU接收DMA设置FIS包并从其中解析出DMA数据传输的地址和长度,每个DMA数据传输的地址和长度对应在内存中的一个块区域,每一个块区域在应用层驱动中对应一个slot命令,所述slot是内存中一个块区域在应用层中驱动命令对应的标记符号,CPU取DMA设置FIS包中的数据的地址和长度通过DCR总线接口写到DMA硬件寄存器,所述数据的地址和长度为数据地址对;DMA激活FIS包检测若设备端检测到主机端要求写数据时,在设备端发送DMA设置FIS包后会给主机端发送DMA激活FIS包,然后CPU进入到写数据地址对预取状态;
数据地址对预取CPU将上述数据地址通过DCR总线接口写到DMA预取缓存FIFO模
块;
设置设备位FIS包检测数据传输完成后主机端会收到设备端的SDB FIS包,结束一次·数据传输操作。根据本发明的优选实施例,所述数据地址对预取包括
写数据地址对预取=CPU将写数据地址对通过DCR总线接口写到DMA预取缓存FIFO模
块;
以及
读数据地址对预取=CPU将读数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块。本发明的技术方案,通过硬件逻辑调用一个预取缓存FIFO模块,缓存FIFO模块对DMA预操作的地址和长度(地址对)进行缓存。DMA做数据传输时,CPU处理DMA的中断请求,判断传输层数据交互的信息,并从数据包中解析出DMA操作的地址对信息,通过DCR总线将数据的地址对信息下发到硬件缓存FIFO模块。只要硬件缓存FIFO模块为空,CPU就会将地址对信息下发到硬件缓存FIFO中。DMA做数据传输时,直接从硬件缓存FIFO中去取地址对信息,省去了 DMA去内存取地址对信息来做数据传输的时间,无需等待CPU操作DMA请求的时间,提高了 DMA数据传输效率的性能同时提高了 CPU操作10的效率。下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。


图I是本发明实施例所述的基于SATA控制器的DMA预取设计框图;图2是SATA控制器的结构框3是SATA控制器中DMA预取模块的结构框图4是CPU协处理DMA预取数据的流程图5是DMA预取状态流程图。
具体实施例方式以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。 如图3所示,基于SATA控制器的DMA地址对预取方法,包括LIS总线接口模块,DMA状态机,接收数据缓存,发送数据缓存,信息控制模块和预取缓存FIFO模块;
LIS总线接口模块为连接DMA状态机和内存的LIS总线提供接口,LIS总线为在DMA和内存间进行数据传输的数据总线;
接收数据缓存缓存DMA写入内存的数据;
发送数据缓存缓存DMA读出内存中的数据;
信息控制模块对Local link总线接口信号的跨时钟域进行处理和对DMA通过Locallink总线接收和发送数据进行控制;
预取缓存FIFO模块缓存DMA预取数据的地址对;DMA状态机执行DMA请求,处理DCR总线寄存器的状态信息和处理DCR总线寄存器地址对信息并对地址对进行预取,实现对地址对对应在内存中的预取数据进行数据搬移,同时控制DMA状态机各个状态的跳变和各个状态的逻辑输出。基于SATA控制器的DMA地址对预取方法实现包括上述模块的硬件逻辑,接口实现以及CPU协处理器处理FIS包过程和DMA状态机对传输数据的地址对的预取过程和预取时间以及位置,上述模块的主要硬件逻辑和接口实现包括DMA状态机逻辑和DCR总线接口逻辑。DMA状态机主要是实现SATA控制器到内存的数据搬移和对数据地址对的预取控制,保证传输数据的性能。通过硬件逻辑实现DMA状态机的状态跳转和地址对的预取功能以及DCR总线接口寄存器的控制信息位的判断和控制DMA读写;实现DMA的LIS接口对内存数据的搬移,保证读写数据通路的传输性能。DMA状态机状态跳转将在以下实例说明。DCR总线接口寄存器值通过DCR总线接口的CPU协处理器端实现对SATA控制器传输层FIS包的解析,获取DMA地址对预取的地址和长度并将地址对信息通过DCR总线下发到DMA状态机的地址对寄存器。CPU协处理器的处理FIS包过程和DMA状态机对传输数据的地址对的预取过程和预取时间以及位置,包括以下步骤
发送H2D命令寄存器FIS包主机端发送H2D命令寄存器FIS包到设备端,该H2D命令寄存器FIS包内容包含有主机端要求的读、写和包的类型命令字信息;
D2H命令寄存器包检测主机端发送完H2D命令寄存器FIS包后等待设备端的响应,若设备端接收到主机的H2D命令寄存器FIS包,设备端则发送D2H命令寄存器包给主机端;DMA设置FIS包检测设备端发送DMA设置FIS包给主机端,主机端CPU接收DMA设置FIS包并从其中解析出DMA数据传输的地址和长度,每个DMA数据传输的地址和长度对应在内存中的一个块区域,每一个块区域在应用层驱动中对应一个slot命令,所述slot是内存中一个块区域在应用层中驱动命令对应的标记符号,CPU取DMA设置FIS包中的数据的地址和长度通过DCR总线接口写到DMA硬件寄存器,所述数据的地址和长度为数据地址对;DMA激活FIS包检测若设备端检测到主机端要求写数据时,在设备端发送DMA设置FIS包后会给主机端发送DMA激活FIS包,然后CPU进入到写数据地址对预取状态;
数据地址对预取CPU将上述数据地址通过DCR总线接口写到DMA预取缓存FIFO模
块;
设置设备位FIS包检测数据传输完成后主机端会收到设备端的SDB FIS包,结束一次数据传输操作。其中,每个DMA激活FIS包对应一次最大写数据为8k字节。数据地址对预取包括
写数据地址对预取=CPU将写数据地址对通过DCR总线接口写到DMA预取缓存FIFO模
块;
以及
读数据地址对预取=CPU将读数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块。图I所示的是DMA结构框图上端是LIS总线接口 2,负责DMA数据到内存的读写;下端是Local link接口分为TX_local link接口 4和RX_Local link接口 5,负责接收和发送数据到SATA传输层的接口 ;H0ST接口 6和DCR接口 7是DCR总线与CPU的接口,负责DMA控制模块的寄存器的DCR总线访问接口实现和驱动端硬件接口寄存器的DCR总线访问接口实现;预取缓存FIFO模块3是DMA控制模块的硬件缓存,负责预存DMA读写数据的地址和长度;在DMA预取时DMA控制逻辑直接读取缓存FIFO模块的数据的地址和长度来进行DMA操作;DMA控制模块I完成主要的DMA数据操作逻辑,包括DMA的预取状态机实现,DMA初始化,中断管理等。以SATA控制器为例,说明DMA预取在SATA控制器中的位置和用法,SATA控制器的结构框图如图2所示由SATA控制器物理层模块19,SATA控制器数据链路层模块18,DMA模块17,信号控制模块16,Rx_locallink接口模块15,Tx_locallink接口模块14,主机读内存接口模块11,主机写内存接口模块10,DCR接口模块12,主机接口模块13和CPU协处理器20构成。主机内存写接口模块10 :位于SATA控制器的传输层,是SATA控制器DMA写内存的接口,负责实现SATA控制器DMA操作内存的I is接口实现(Lis接口是DMA访问内存的总线接口)。主机内存读接口模块11 :位于SATA控制器的传输层,是SATA控制器DMA读内存的接口,负责实现SATA控制器DMA操作内存的Lis接口实现(Lis接口是DMA访问内存的总线接口)。DCR接口模块12:是CPU访问DMA寄存器的DCR总线接口,负责将CPU的请求传送给DMA,然后DMA按照请求的长度,源地址和目标地址来进行数据搬移(数据搬移是指DMA读写内存时数据在内存和外设之间的流向,当做DMA读操作时,是DMA把内存的数据读出来到外设;当做DMA写操作时,是DMA把外设的数据写到内存去)。主机接口模块13:是CPU访问DMA寄存器的DCR总线接口,负责完成对指定寄存器的访问。Rx_locallink模块15和Tx_locallink模块14 :位于SATA控制器传输层(transport)和数据链路层(link)中间,负责实现数据链路层数据到传输层中DMA的locallink接口和数据缓存。在Rx_locallink和Tx_locallink模块里面分别调用一个TX_fifo和RX_fifo来缓存接收和发送数据。对RX_fifo和TX_fifo中数据的读写操作是由DMA来操作,DMA接收到CPU的请求,执行在内存和RX_fifo和TX_fifo中进行数据搬移。信号控制模块16 :负责local link接口信号跨时钟域的转换,保证Iocallink接口控制信号质量。DMA模块17 :是SATA控制器做数据搬移和DMA预取的控制模块,保证传输数据的性能,SATA控制器的读写数据都通过DMA模块实现在内存中进行交互。DMA模块实现了DMA操作的状态机状态的跳转和对地址对的预取功能,以及对数据通路的传输控制。SATA数据链路层模块18 :位于SATA控制器的数据链路层(link),是SATA控制器物理层和传输层的数据接口。SATA数据链路层模块实现SATA的数据链路层协议,负责产生和接收数据链路层协议的原语,负责准备每一帧数据信息结构的传输,原语的解码,检测传输过程中的错误信息等。通俗地说,我们的SATA控制器数据链路层模块主要实现的是对link层传输数据的加解扰,拆组帧,CRC校验等,负责将帧数据传输请求转换为帧数据的local link 接口请求。
SATA控制器物理层模块19 :位于SATA控制器的物理层(phy),是控制器与外部存储设备之间的硬件接口。SATA控制器物理层模块由SATA协议物理层定义的数据链路收发器组成,数据链路收发器实现SATA数据链路的接收和发送、执行数据链路的初始化,数据链路的电源管理以及设备接口的热插拔操作。通俗的讲我们的SATA控制器物理层模块在整个SATA控制器中主要是实现做数据传输的准备工作,实现控制器与外部硬件的握手,若握手完成则告诉我们的SATA数据链路层模块可以传输数据;若握手不成功,否则终止数据传输。CPU协处理模块为SATA控制器的软核(其实相当于调用的一个软核IP模块),用于请求DMA操作和应用层驱动层硬件接口的实现。其它与控制器的硬件接口模块有外围硬件设备和内存,控制器涉及到总线接口有Lis 接口,DCR 接口和 Local link 接口。Lis接口 DMA访问内存的总线接口。 DCR接口CPU访问DMA寄存器的总线接口。Local link接口 link数据传输总线接口。图3所示的是DMA预取模块结构图,DMA预取模块是SATA控制器做数据搬移的控制模块,保证传输数据的性能SATA控制器的读写数据都通过DMA预取模块来实现在内存中进行数据交互。DMA预取模块通过硬件逻辑实现DMA状态机的状态跳转和对地址对的预取以及对总线接口寄存器和控制信息位的判断和控制,保证数据通路传输的性能。DMA模块内部的功能实现包括有七块,分别是DMA读写内存的LIS接口模块26,DMA状态机20,接收数据缓存(RX_fifo) 24,发送数据缓存(TX_fifo) 22,信息控制模块23和预取缓存FIFO模块21。DMA读写内存接口的LIS接口 26逻辑实现DMA操作读写内存的LIS总线接口 ;接收数据缓存(RX_fifo)24逻辑实现写入内存数据缓存;
发送数据缓存(TX_fifo)22逻辑实现读出内存数据缓存;
信息控制模块23逻辑实现对Local link接口信号的跨时钟域处理和对DMA与Locallink接口数据的接收和发送的数据控制;
预取缓存FIFO模块21硬件逻辑实现DMA预取地址对的缓存。DMA状态机20是整个DMA预取和状态控制的执行者,DMA操作可以是读内存和写内存。读内存时将内存中的有效地址对的数据从内存搬移到Tx_l0callink_fif0中然后输出到device(Tx_locallink_fifo就是以上提到的发送数据缓存接口中调用的fifo)。写内存时将Rx_locallink_fifo中的数据搬移到内存的有效地址中(Rx_locallink_fifo就是以上提到的接收数据缓存接口中调用的fifo)在Rx_locallink_fifo中缓存的是从Device中流过来的有效数据,DMA写操作时被读出到内存中。
DMA状态机处理CPU的DCR总线接口的硬件寄存器的值来执行DMA的读写操作。DMA请求读写操作时,CPU首先会通过DCR总线将DMA要操作的数据地址和长度(地址对)发送到硬件缓存中,每一次做DMA操作时CPU会判断当前操作的地址对在内存区域对应标记符号,然后把当前的地址对发送到硬件缓存FIFO中,DMA状态机做DMA读写操作时直接预取在硬件缓存中的地址对来做数据的搬移。DMA状态机和数据读写操作是通过硬件逻辑实现的。DMA地址对预取发生在SATA协议传输层CPU协处理器请求做DMA操作的DataFIS包传输时来缓存数据的地址和长度。CPU协处理器请求DMA读写操作是通过对Host和Device端交互的数据包的状态信息来判断的,举例说明DMA读写操作方式
在NCQ(SATA协议规定的传输层数据包传输的一种方式Native Queued Command的缩写)读数据时主机(Host)端先发H2D命令寄存器FIS包(H2D Register FIS包);设备端(Device)接收到Host端发来的H2D Register FIS包后会解析包的内容,判断是读数据请求,然后会给Host回D2H命令寄存器包(D2H Register FIS包);接着发送DMA设置FIS包(DMA Setup FIS包),在接着就是发送Data FIS包给Host端。在发送Data FIS包时,我们就可以对Data FIS包的数据结构的地址和长度作缓存。Data FIS包的数据结构的地址和长度是对应CPU协处理器定义的传输层的数据结构的指针。Data FIS包数据发送完成后,Device端会给Host端发送置设备位FIS包(Set Device FIS包),表示数据发送完成。当DMA读完成时,DMA状态机会给CPU协处理器返回DMA操作完成的标志位信号DMA_ok和DMA完成中断请求。在NCQ 写数据时Host 端先发 H2D Register FIS 包(H2D 为 Host to Device);Device接收到Host端发来的H2D Register FIS包后会解析包的内容,判断是写数据请求,然后会给 Host 回 D2H Register FIS 包(D2H 为 Device to Host);接着发送 DMA SetupFIS包。在跟着会发送DMA Activate FIS给Host端。当Host端接收到Device端发来的DMA Activate FIS包后,Host端就开始发Data FIS包给Device端进行写数据了。当Data FIS包发送完成后Device端会给Host端发送Set Device FIS包,表示数据接收完成。每个DMA Activate FIS包最大长度为8k字节,如果发送Data FIS包时,数据长度大于8k时,Device端会在没8k数据接收完成时给Host端回一个DAM Activate FIS包。当DMA写操作结束时,DMA状态机会给CPU协处理器返回DMA操作完成的标志位信号DMA_ok和DMA完成中断请求。图4所示的是CPU协处理DMA预取流程图,CPU协处理器完成SATA控制器数据传输的传输层协议,协处理器对DMA数据的地址和长度进行判断和预存。CPU协处理器DMA预取流程大致如下
CPU 一开始处于空闲状态,当DMA请求读写操作时,主机端首先发送H2D命令寄存器FIS包到设备端,然后等待接收设备端的FIS包信息。在设备端收到主机短的H2D命令寄存器FIS包后会回复主机D2H命令寄存器FIS包和DMA设置FIS包给主机端。如果DMA请求状态是读操作,则设备端在回复DMA设置FIS包后接着发送数据FIS包给主机,CPU在检测到DMA设置FIS包时解析DMA设置FIS包的内容,从中取出DMA数据传输的地址和长度,每一次DMA数据传输的地址和长度对应在内存中的一个块区域,每一个块区域在应用层驱动中对应一个slot命令。slot相当于是内存中一个块区域在应用层中驱动命令对应的标记符号。我们只需要去取这个slot命令符号就能知道要对哪一块的内存地址进行读写操作。CPU取DMA设置FIS包中的数据地址和长度通过DCR总线接口写到DMA硬件寄存器,即写道硬件预取缓存FIFO中。DMA读操作时直接预取缓存FIFO中的地址和长度来作读操作。如果DMA请求状态是写操作,则设备端在回复DMA设置FIS包后接着发送DMA激活FIS包给主机端。主机端收到DMA激活FIS包后,开始对设备端写数据,主机端开始发送数据FIS包给设备端。DMA直接取预取缓存FIFO中的地址和长度来作写操作。DMA读写数据完成后设备端发送SDB (设置设备位)FIS给主机端来结束一次DMA的预取操作。
10
图5所示的是DMA预取状态流程图
DMA预取状态流程图一开始处于空闲(S_IDLE)状态,当检测到DMA请求时进入到总线请求状态(S_BUS_REQ),总线请求状态等待DMA的读写请求状态,如果判断DMA请求状态为DMA写操作,则进入到写请求(S_WRT_REQ)状态;如果判断DMA请求状态为DMA读操作,则进入到读地址请求(S_ADR_REQ)状态。在写请求状态时,发送写状态信息到内存控制器,等待总线的写接收请求信号。收到总线的写接收请求信号后则跳到写数据(S_WRT_DAT)状态进行DMA的写数据操作。在这个过程中判断写数据完成的响应,当收到写数据完成响应信号就跳到写数据响应(S_WRT_ACK)状态。写数据响应状态检测数据帧结束标识符,如果接收到帧结束标识符说明数据一次DMA写操作完成,退出状态跳转到空闲(S_IDLE)状态;如果没有接收到帧结束标识符,则说明数据的操作没有完成,状态跳转到总线请求(S_BUS_REQ)状态。在读地址请求状态时,等待总线的读接收请求信号。收到总线的读接收请求信号后则跳到读数据等待(S_WAI_DAT)状态进行DMA的读数据操作。在这个过程中等待总线读数据完成响应信号,如果接收到总线读数据完成响应信号,则说明DMA读数据操作完成,状态跳转到空闲(S_IDLE)状态;如果没有接收到总线读数据完成响应信号,则说明数据的操作没有完成,状态跳转到总线请求(S_BUS_REQ)状态。判断读数据完成响应信号,当收到读数据完成响应信号就跳到读数据响应(S_WRT.ACK)状态。写数据响应状态检测数据帧结束标识符,如果接收到帧结束标识符说明数据一次DMA写操作完成,退出状态跳转到空闲(S_IDLE)状态。表I :DMA请求DCR总线寄存器列表
权利要求
1.一种基于SATA控制器的DMA地址对预取方法,其特征在于,包括LIS总线接口模块, DMA状态机,接收数据缓存,发送数据缓存,信息控制模块和预取缓存FIFO模块;所述LIS总线接口模块为连接DMA状态机和内存的LIS总线提供接口,所述LIS总线为在DMA和内存间进行数据传输的数据总线;所述接收数据缓存缓存DMA写入内存的数据;所述发送数据缓存缓存DMA读出内存中的数据;所述信息控制模块对Local link总线接口信号的跨时钟域进行处理和对DMA通过 Local link总线接收和发送数据进行控制;所述预取缓存FIFO模块缓存DMA预取数据的地址对;所述DMA状态机执行DMA请求,处理DCR总线寄存器的状态信息和处理DCR总线寄存器地址对信息并对地址对进行预取,实现对地址对对应在内存中的预取数据进行数据搬移,同时控制DMA状态机各个状态的跳变和各个状态的逻辑输出。
2.一种基于权利要求I所述的基于SATA控制器的DMA地址对预取的方法,其特征在于,所述DMA状态机;DMA状态机主要是实现SATA控制器到内存的数据搬移和对数据地址对的预取控制, 保证传输数据的性能,通过硬件逻辑实现DMA状态机的状态跳转和地址对的预取功能以及 DCR总线接口寄存器的控制信息位的判断和控制DMA读写,实现DMA的LIS接口对内存数据的搬移,保证读写数据通路的传输性能。
3.一种基于权利要求2所述的基于SATA控制器的DMA地址对预取的方法,其特征在于,所述DCR总线接口寄存器DCR总线接口寄存器值通过DCR总线接口的CPU协处理器端实现对SATA控制器传输层 FIS包的解析,获取DMA地址对预取的地址和长度并将地址对信息通过DCR总线下发到DMA 状态机的地址对寄存器。
4.一种基于权利要求2和3所述的基于SATA控制器的DMA地址对预取的方法,其特征在于,CPU协处理器的处理FIS包过程和DMA状态机对传输数据的地址对的预取过程和预取时间以及位置,包括以下步骤发送H2D命令寄存器FIS包主机端发送H2D命令寄存器FIS包到设备端,该H2D命令寄存器FIS包内容包含有主机端要求的读、写和包的类型命令字信息;D2H命令寄存器包检测上述主机端发送完H2D命令寄存器FIS包后等待上述设备端的响应,若上述设备端接收到主机的H2D命令寄存器FIS包,上述设备端则发送D2H命令寄存器包给上述主机端;DMA设置FIS包检测上述设备端发送DMA设置FIS包给上述主机端,主机端CPU接收 DMA设置FIS包并从其中解析出DMA数据传输的地址和长度,每个DMA数据传输的地址和长度对应在内存中的一个块区域,每一个块区域在应用层驱动中对应一个slot命令,所述 slot是内存中一个块区域在应用层中驱动命令对应的标记符号,CPU取DMA设置FIS包中的数据的地址和长度通过DCR总线接口写到DMA硬件寄存器,所述数据的地址和长度为数据地址对;DMA激活FIS包检测若设备端检测到主机端要求写数据时,在设备端发送DMA设置 FIS包后会给主机端发送DMA激活FIS包,然后CPU进入到写数据地址对预取状态;数据地址对预取CPU将上述数据地址通过DCR总线接口写到DMA预取缓存FIFO模块;设置设备位FIS包检测数据传输完成后主机端会收到设备端的SDB FIS包,结束一次数据传输操作。
5.根据权利要求4所述的基于SATA控制器的DMA地址对预读取方法,其特征在于,所述数据地址对预取包括写数据地址对预取=CPU将写数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块;以及读数据地址对预取=CPU将读数据地址对通过DCR总线接口写到DMA预取缓存 FIFO模块。
全文摘要
本发明公开了一种基于SATA控制器的DMA地址对预取的方法,通过硬件逻辑调用一个预取缓存FIFO模块,缓存FIFO模块对DMA预操作的地址和长度(地址对)进行缓存。DMA做数据传输时,CPU处理DMA的中断请求,判断传输层数据交互的信息,并从数据包中解析出DMA操作的地址对信息,通过DCR总线将数据的地址对信息下发到硬件缓存FIFO模块。只要硬件缓存FIFO模块为空,CPU就会将地址对信息下发到硬件缓存FIFO中。DMA做数据传输时,直接从硬件缓存FIFO中去取地址对信息,省去了DMA去内存取地址对信息来做数据传输的时间,无需等待CPU操作DMA请求的时间,提高了DMA数据传输效率的性能同时提高了CPU操作IO的效率。
文档编号G06F13/28GK102937939SQ201210381708
公开日2013年2月20日 申请日期2012年10月10日 优先权日2012年10月10日
发明者张庆敏, 张衡, 胡刚 申请人:无锡众志和达存储技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1