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

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

Info

Publication number
CN102937939A
CN102937939A CN2012103817087A CN201210381708A CN102937939A CN 102937939 A CN102937939 A CN 102937939A CN 2012103817087 A CN2012103817087 A CN 2012103817087A CN 201210381708 A CN201210381708 A CN 201210381708A CN 102937939 A CN102937939 A CN 102937939A
Authority
CN
China
Prior art keywords
dma
data
address
fis
bag
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012103817087A
Other languages
English (en)
Other versions
CN102937939B (zh
Inventor
张庆敏
张衡
胡刚
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuxi North Data Computing Co ltd
Original Assignee
SOUL STORAGE TECHNOLOGY (WUXI) Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SOUL STORAGE TECHNOLOGY (WUXI) Co Ltd filed Critical SOUL STORAGE TECHNOLOGY (WUXI) Co Ltd
Priority to CN201210381708.7A priority Critical patent/CN102937939B/zh
Publication of CN102937939A publication Critical patent/CN102937939A/zh
Application granted granted Critical
Publication of CN102937939B publication Critical patent/CN102937939B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Bus Control (AREA)

Abstract

本发明公开了一种基于SATA控制器的DMA地址对预取的方法,通过硬件逻辑调用一个预取缓存FIFO模块,缓存FIFO模块对DMA预操作的地址和长度(地址对)进行缓存。DMA做数据传输时,CPU处理DMA的中断请求,判断传输层数据交互的信息,并从数据包中解析出DMA操作的地址对信息,通过DCR总线将数据的地址对信息下发到硬件缓存FIFO模块。只要硬件缓存FIFO模块为空,CPU就会将地址对信息下发到硬件缓存FIFO中。DMA做数据传输时,直接从硬件缓存FIFO中去取地址对信息,省去了DMA去内存取地址对信息来做数据传输的时间,无需等待CPU操作DMA请求的时间,提高了DMA数据传输效率的性能同时提高了CPU操作IO的效率。

Description

基于SATA控制器的DMA地址对预读取方法
技术领域
本发明涉及于计算机系统的存储技术领域,具体地,涉及一种基于SATA控制器的DMA地址对预取方法。
背景技术
SATA (Serial Advanced Technology Attachment)是串行高级技术附件,一种基于行业标准的串行硬件驱动器接口,是由Intel、IBM、Dell、APT、Maxtor和Seagate公司共同提出的硬盘接口规范。
SATA可以让用户拥有高效能的硬盘,却不需要牺牲资料的完整性。SATA最大的优势是传输速率高。SATA的工作原理:采用连续串行的方式来实现数据传输从而获得较高传输速率。2003年发布SATA1.0规格提供的传输率就已经达到了150MB/s,不但已经高出普通IDE硬盘所提供的100MB /s(ATA100)甚至超过了133MB/s(ATA133)的最高传输速率。 
SATA在数据可靠性方面也有了大幅度提高。SATA可同时对指令及数据封包进行循环冗余校验(CRC),不仅可检测出所有单字节和双字节的错误,而且根据统计学的原理,这样还能够检测出99.998%可能出现的错误。相比之下,PATA只能对来回传输的数据进行校验,而无法对指令进行校验,加之高频率下干扰甚大,因此数据传输稳定性很差。 
除了传输速度、传输数据更可靠外,节省空间是SATA最具特色之处,更有利于机箱内部的散热,线缆间的串扰也得到了有效控制。
SATA控制器定义了高速接口的物理层phy、数据链路层link、传输层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操作IO的效率。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
图1是本发明实施例所述的基于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通过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包,结束一次数据传输操作。其中,每个DMA 激活FIS包对应一次最大写数据为8k字节。
数据地址对预取包括:
写数据地址对预取:CPU将写数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块;
以及
读数据地址对预取:CPU将读数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块。
图1所示的是DMA结构框图:上端是LIS总线接口2,负责DMA数据到内存的读写;下端是Local link接口分为TX_local link接口4和RX_Local link接口5,负责接收和发送数据到SATA传输层的接口;HOST接口6和DCR接口7是DCR总线与CPU的接口,负责DMA控制模块的寄存器的DCR总线访问接口实现和驱动端硬件接口寄存器的DCR总线访问接口实现;预取缓存FIFO模块3是DMA控制模块的硬件缓存,负责预存DMA读写数据的地址和长度;在DMA预取时DMA控制逻辑直接读取缓存FIFO模块的数据的地址和长度来进行DMA操作;DMA控制模块1完成主要的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操作内存的lis接口实现(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的local link接口和数据缓存。在Rx_locallink和Tx_locallink模块里面分别调用一个TX_fifo和RX_fifo来缓存接收和发送数据。对RX_fifo和TX_fifo中数据的读写操作是由DMA来操作,DMA接收到CPU的请求,执行在内存和RX_fifo和TX_fifo中进行数据搬移。
信号控制模块16:负责local link接口信号跨时钟域的转换,保证locallink接口控制信号质量。
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与Local link接口数据的接收和发送的数据控制;
预取缓存FIFO模块21硬件逻辑实现DMA预取地址对的缓存。
DMA状态机20是整个DMA预取和状态控制的执行者,DMA操作可以是读内存和写内存。读内存时将内存中的有效地址对的数据从内存搬移到Tx_locallink_fifo中然后输出到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操作的Data FIS包传输时来缓存数据的地址和长度。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 Setup FIS包。在跟着会发送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的预取操作。
图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)状态。
表1:DMA请求DCR总线寄存器列表:
Figure 2012103817087100002DEST_PATH_IMAGE001
DMA预取状态机
DMA状态机包括以下状态
S_IDLE : DMA空闲状态
S_BUS_REQ :DMA总线请求状态
S_WRT_REQ:DMA写请求状态
S_WRT_DAT :DMA写数据状态
S_WRT_ACK :DMA写响应状态
S_ADR_REQ :DMA地址读请求状态
S_WAI_DAT : DMA读数据等待状态
S_FLUSH:  DMA开始(预留)
S_DONE:  DMA完成
S_IDLE状态:DMA的空闲状态,会一直等待总线的DMA请求(DMA_req),如果总线有DMA请求(也就是DMA_req = 1)时,状态机就跳转到S_BUS_REQ状态,否则状态机一直处于S_IDLE状态。
S_BUS_REQ状态:状态机判断cpu的读写总线请求DMA_wrt,若DMA_wrt=1则跳转到S_WRT_REQ写请求状态 ,若DMA_wrt=0且状态机检测到Txlocallink_fifo非满状态时则跳转到S_ADR_REQ地址读请求状态,否则处于S_BUS_REQ状态。
S_WRT_REQ状态:在写请求状态时,DMA状态机会去检测内存返回的写接收信号Mn_wrAccept,若Mn_wrAccept=1,则认为内存已经准备好了接收数据,DMA状态机跳转到DMA写数据状态即S_WRT_DAT状态。
S_WRT_DAT 状态:在写数据状态时,状态机判断内存返回的Mn_wrAck 和 Mn_wrComp信号,Mn_wrAck 和 Mn_wrComp信号分别为内存返回的写数据响应和写数据完成信号。若Mn_wrAck 和 Mn_wrComp都为1,则说明内存已经收到数据并且确认,状态机就跳转到DMA写响应状态 (检测S_WRT_ACK)。
S_WRT_ACK状态 :在写响应状态时,DMA状态机的帧数据传输是否完成决定于标志frm_done,若frm_done=1,则说明一帧数据的传输完成,状态机就跳转到S_DONE状态;若frm _done=0且(wr_rdy && wr_ava)= 1 则重新跳转到S_ADR_REQ状态;若 frm_done=0且(wr_rdy && ~wr_ava)= 1 则跳转到S_DONE状态。其中的frm_done为一帧数据传输完成标志,wr_rdy为写请求准备位, wr_ava为写数据有效, ~wr_ava表示写数据无效。数据有效和无效是指请求的数据长度,长度为0则无效,长度不为0则有效。
S_ADR_REQ状态 :在读地址请求状态时,DMA状态机会去检测内存返回的读接收信号Mn_rdAccept,若Mn_rdAccept=1,则认为内存已经准备好要发送数据,DMA状态机就跳转到读数据等待状态即S_WAI_DAT状态。
S_WAI_DAT :在读数据等待状态时,DMA状态机检测内存返回的Mn_rdAck 和rd_last信号,Mn_rdAck 和rd_last信号分别为内存返回的读数据响应信号和读数据的长度为0。若Mn_rdAck 和rd_last的值都为1,则说明总线请求长度的读数据完成,状态机就跳转到S_DONE状态;若Mn_rdAck 的值为1,rd_last的值不为1,且rd_rdy(读数据准备好)的值为1,说明总线请求长度的数据还没有读完,状态机就跳转到 S_BUS_REQ状态。
S_DONE:状态机跳转到S_IDLE状态,说明一次DMA操作完成。
注:原语是一个双字信号(32位),是link层主机和设备交互信息的最小信息单元,在link层数据传输过程中它用来控制和提供串行线上的数据状态信息。
FIS(Frame Information Structure) :帧信息结构
Register FIS :寄存器FIS包 DMA Activate FIS :DMA激活FIS包 DMA Setup FIS :DMA设置FIS包 Data FIS :数据FIS包 
PIO Setup FIS :PIO 设置FIS包 Set Device Bits FIS :置设备位FIS包
H2D: Host to Device 主机端到设备端 D2H:Device to Host 设备端到主机端
Local link接口:link数据传输总线接口
TX_fifo:发送缓存
RX_fifo:接收缓存。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

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.一种基于权利要求1所述的基于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模块。
CN201210381708.7A 2012-10-10 2012-10-10 基于sata控制器的dma地址对预读取方法 Expired - Fee Related CN102937939B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210381708.7A CN102937939B (zh) 2012-10-10 2012-10-10 基于sata控制器的dma地址对预读取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210381708.7A CN102937939B (zh) 2012-10-10 2012-10-10 基于sata控制器的dma地址对预读取方法

Publications (2)

Publication Number Publication Date
CN102937939A true CN102937939A (zh) 2013-02-20
CN102937939B CN102937939B (zh) 2015-12-16

Family

ID=47696837

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210381708.7A Expired - Fee Related CN102937939B (zh) 2012-10-10 2012-10-10 基于sata控制器的dma地址对预读取方法

Country Status (1)

Country Link
CN (1) CN102937939B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488595A (zh) * 2013-08-23 2014-01-01 北京控制工程研究所 一种保证小容量缓存串口通讯安全性的数据传输方法
CN104360668A (zh) * 2014-11-28 2015-02-18 国网重庆市电力公司电力科学研究院 一种数字化变电站的以太网控制器的控制方法
CN103914394B (zh) * 2014-04-18 2017-06-23 龙芯中科技术有限公司 内存数据预取方法和装置
CN107145198A (zh) * 2017-04-19 2017-09-08 深圳市同泰怡信息技术有限公司 一种提升服务器对硬盘兼容能力的方法及其主板
CN107844438A (zh) * 2017-12-07 2018-03-27 合肥国为电子有限公司 用于地震仪主控站cpu与外设数据传输的桥接器及方法
CN108595350A (zh) * 2018-01-04 2018-09-28 深圳开阳电子股份有限公司 一种基于axi的数据传输方法和装置
CN111367839A (zh) * 2020-02-21 2020-07-03 苏州浪潮智能科技有限公司 一种主机端与fpga加速器之间的数据同步方法
CN111538679A (zh) * 2020-05-12 2020-08-14 中国电子科技集团公司第十四研究所 一种基于内嵌dma的处理器数据预取设计
CN114328345A (zh) * 2021-12-10 2022-04-12 北京泽石科技有限公司 控制信息的处理方法、装置以及计算机可读存储介质
CN116188247A (zh) * 2023-02-06 2023-05-30 格兰菲智能科技有限公司 寄存器信息处理方法、装置、计算机设备、存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040123013A1 (en) * 2002-12-19 2004-06-24 Clayton Shawn Adam Direct memory access controller system
CN1534499A (zh) * 2003-03-31 2004-10-06 信亿科技股份有限公司 Sata快闪存储装置
CN101034384A (zh) * 2007-04-26 2007-09-12 北京中星微电子有限公司 一种能同时进行读写操作的dma控制器及传输方法
CN101710309A (zh) * 2009-12-15 2010-05-19 北京时代民芯科技有限公司 一种基于海量数据传输的dma控制器
CN102567219A (zh) * 2011-12-31 2012-07-11 记忆科技(深圳)有限公司 固态硬盘sata接口的数据传输方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040123013A1 (en) * 2002-12-19 2004-06-24 Clayton Shawn Adam Direct memory access controller system
CN1534499A (zh) * 2003-03-31 2004-10-06 信亿科技股份有限公司 Sata快闪存储装置
CN101034384A (zh) * 2007-04-26 2007-09-12 北京中星微电子有限公司 一种能同时进行读写操作的dma控制器及传输方法
CN101710309A (zh) * 2009-12-15 2010-05-19 北京时代民芯科技有限公司 一种基于海量数据传输的dma控制器
CN102567219A (zh) * 2011-12-31 2012-07-11 记忆科技(深圳)有限公司 固态硬盘sata接口的数据传输方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
颜建峰: "基于PCI总线的DMA模块的设计与验证", 《电子科技大学学报》 *
鹿宝生等: "基于DSP的PCI总线高速DMA数据传输", 《计算机工程与设计》 *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103488595B (zh) * 2013-08-23 2015-10-21 北京控制工程研究所 一种保证小容量缓存串口通讯安全性的数据传输方法
CN103488595A (zh) * 2013-08-23 2014-01-01 北京控制工程研究所 一种保证小容量缓存串口通讯安全性的数据传输方法
CN103914394B (zh) * 2014-04-18 2017-06-23 龙芯中科技术有限公司 内存数据预取方法和装置
CN104360668A (zh) * 2014-11-28 2015-02-18 国网重庆市电力公司电力科学研究院 一种数字化变电站的以太网控制器的控制方法
CN107145198A (zh) * 2017-04-19 2017-09-08 深圳市同泰怡信息技术有限公司 一种提升服务器对硬盘兼容能力的方法及其主板
CN107145198B (zh) * 2017-04-19 2020-04-17 深圳市同泰怡信息技术有限公司 一种提升服务器对硬盘兼容能力的方法及其主板
CN107844438B (zh) * 2017-12-07 2023-06-16 合肥国为电子有限公司 用于地震仪主控站cpu与外设数据传输的桥接器及方法
CN107844438A (zh) * 2017-12-07 2018-03-27 合肥国为电子有限公司 用于地震仪主控站cpu与外设数据传输的桥接器及方法
CN108595350A (zh) * 2018-01-04 2018-09-28 深圳开阳电子股份有限公司 一种基于axi的数据传输方法和装置
CN111367839A (zh) * 2020-02-21 2020-07-03 苏州浪潮智能科技有限公司 一种主机端与fpga加速器之间的数据同步方法
US11762790B2 (en) 2020-02-21 2023-09-19 Inspur Suzhou Intelligent Technology Co., Ltd. Method for data synchronization between host side and FPGA accelerator
CN111538679B (zh) * 2020-05-12 2023-06-06 中国电子科技集团公司第十四研究所 一种基于内嵌dma的处理器数据预取方法
CN111538679A (zh) * 2020-05-12 2020-08-14 中国电子科技集团公司第十四研究所 一种基于内嵌dma的处理器数据预取设计
CN114328345A (zh) * 2021-12-10 2022-04-12 北京泽石科技有限公司 控制信息的处理方法、装置以及计算机可读存储介质
CN114328345B (zh) * 2021-12-10 2024-05-03 北京泽石科技有限公司 控制信息的处理方法、装置以及计算机可读存储介质
CN116188247A (zh) * 2023-02-06 2023-05-30 格兰菲智能科技有限公司 寄存器信息处理方法、装置、计算机设备、存储介质
CN116188247B (zh) * 2023-02-06 2024-04-12 格兰菲智能科技有限公司 寄存器信息处理方法、装置、计算机设备、存储介质

Also Published As

Publication number Publication date
CN102937939B (zh) 2015-12-16

Similar Documents

Publication Publication Date Title
CN102937939B (zh) 基于sata控制器的dma地址对预读取方法
CN103201725B (zh) 用于在多个处理器之间共享的存储器的存储器访问设备
CN101556565B (zh) 嵌入式处理器的片上高性能dma
US8930599B2 (en) Data transmission system and method thereof
JP4961481B2 (ja) シリアルアドバンストテクノロジーアタッチメント(sata)およびシリアルアタッチトスモールコンピュータシステムインターフェース(scsi)(sas)のブリッジング
US20090024776A1 (en) High data rate serial peripheral interface
US7996548B2 (en) Message communication techniques
US20020133646A1 (en) Method and device for providing high data rate for a serial peripheral interface
US20100169528A1 (en) Interrupt technicques
US6567953B1 (en) Method and apparatus for host-based validating of data transferred between a device and a host
US5584033A (en) Apparatus and method for burst data transfer employing a pause at fixed data intervals
CN102890622B (zh) 一种基于协处理器的sata控制器
CN103714026B (zh) 一种支持原址数据交换的存储器访问方法及装置
CN108932207A (zh) 带有缓存区的sdio-wifi数据传输方法及系统
CN101162448A (zh) 一种usb高速数据隧道的硬件传输方法
US6941425B2 (en) Method and apparatus for read launch optimizations in memory interconnect
US20080183921A1 (en) Serial advanced technology attachment (SATA) frame information structure (FIS) processing
TWI416339B (zh) 通用序列匯流排傳輸轉譯器及輸入請求同步傳輸方法
CN115268766A (zh) 一种基于fpga的光纤图像数据高速存储及回放系统
CN102184150B (zh) 高功能环形缓冲缓存系统及其控制方法
JP2003099324A (ja) マルチメディアプロセッサ用のストリーミングデータキャッシュ
US20210073053A1 (en) Sdio chip-to-chip interconnect protocol extension for slow devices and power savings
CN114385544A (zh) Uart芯片及fpga芯片
CN113687792B (zh) 一种存储器数据快速读取方法
CN113687791B (zh) 基于预读取和分支判断机制的存储器数据快速读取装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: 214122 Jiangsu Province, Wuxi City District Zhenze Road No. 18 Wuxi Software Park Building 6 layer A Taurus

Applicant after: WUXI SOUL DATA COMPUTING Co.,Ltd.

Address before: 214028 Jiangsu Province, Wuxi City District Road No. 18 Wuxi Zhenze National Software Park Building 6 layer A Taurus

Applicant before: SOUL STORAGE TECHNOLOGY WUXI Co.,Ltd.

COR Change of bibliographic data

Free format text: CORRECT: APPLICANT; FROM: SOUL STORAGE TECHNOLOGY UXI O., LTD. TO: SOUL DATA COMPUTING (WUXI) CO., LTD.

C14 Grant of patent or utility model
GR01 Patent grant
C56 Change in the name or address of the patentee
CP01 Change in the name or title of a patent holder

Address after: 214122 Jiangsu Province, Wuxi City District Zhenze Road No. 18 Wuxi Software Park Building 6 layer A Taurus

Patentee after: WUXI NORTH DATA COMPUTING CO.,LTD.

Address before: 214122 Jiangsu Province, Wuxi City District Zhenze Road No. 18 Wuxi Software Park Building 6 layer A Taurus

Patentee before: WUXI SOUL DATA COMPUTING Co.,Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20151216