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

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

Info

Publication number
CN102937939B
CN102937939B CN201210381708.7A CN201210381708A CN102937939B CN 102937939 B CN102937939 B CN 102937939B CN 201210381708 A CN201210381708 A CN 201210381708A CN 102937939 B CN102937939 B CN 102937939B
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.)
Active
Application number
CN201210381708.7A
Other languages
English (en)
Other versions
CN102937939A (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 calculation Limited by Share Ltd
Original Assignee
WUXI SOUL DATA COMPUTING 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 WUXI SOUL DATA COMPUTING Co Ltd filed Critical WUXI SOUL DATA COMPUTING 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
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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(SerialAdvancedTechnologyAttachment)是串行高级技术附件,一种基于行业标准的串行硬件驱动器接口,是由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读出内存中的数据;
所述信息控制模块:对Locallink总线接口信号的跨时钟域进行处理和对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包检测:数据传输完成后主机端会收到设备端的SDBFIS包,结束一次数据传输操作。
根据本发明的优选实施例,所述数据地址对预取包括:
写数据地址对预取: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读出内存中的数据;
信息控制模块:对Locallink总线接口信号的跨时钟域进行处理和对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包检测:数据传输完成后主机端会收到设备端的SDBFIS包,结束一次数据传输操作。其中,每个DMA激活FIS包对应一次最大写数据为8k字节。
数据地址对预取包括:
写数据地址对预取:CPU将写数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块;
以及
读数据地址对预取:CPU将读数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块。
图1所示的是DMA结构框图:上端是LIS总线接口2,负责DMA数据到内存的读写;下端是Locallink接口分为TX_locallink接口4和RX_Locallink接口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的locallink接口和数据缓存。在Rx_locallink和Tx_locallink模块里面分别调用一个TX_fifo和RX_fifo来缓存接收和发送数据。对RX_fifo和TX_fifo中数据的读写操作是由DMA来操作,DMA接收到CPU的请求,执行在内存和RX_fifo和TX_fifo中进行数据搬移。
信号控制模块16:负责locallink接口信号跨时钟域的转换,保证locallink接口控制信号质量。
DMA模块17:是SATA控制器做数据搬移和DMA预取的控制模块,保证传输数据的性能,SATA控制器的读写数据都通过DMA模块实现在内存中进行交互。DMA模块实现了DMA操作的状态机状态的跳转和对地址对的预取功能,以及对数据通路的传输控制。
SATA数据链路层模块18:位于SATA控制器的数据链路层(link),是SATA控制器物理层和传输层的数据接口。SATA数据链路层模块实现SATA的数据链路层协议,负责产生和接收数据链路层协议的原语,负责准备每一帧数据信息结构的传输,原语的解码,检测传输过程中的错误信息等。通俗地说,我们的SATA控制器数据链路层模块主要实现的是对link层传输数据的加解扰,拆组帧,CRC校验等,负责将帧数据传输请求转换为帧数据的locallink接口请求。
SATA控制器物理层模块19:位于SATA控制器的物理层(phy),是控制器与外部存储设备之间的硬件接口。SATA控制器物理层模块由SATA协议物理层定义的数据链路收发器组成,数据链路收发器实现SATA数据链路的接收和发送、执行数据链路的初始化,数据链路的电源管理以及设备接口的热插拔操作。通俗的讲我们的SATA控制器物理层模块在整个SATA控制器中主要是实现做数据传输的准备工作,实现控制器与外部硬件的握手,若握手完成则告诉我们的SATA数据链路层模块可以传输数据;若握手不成功,否则终止数据传输。
CPU协处理模块:为SATA控制器的软核(其实相当于调用的一个软核IP模块),用于请求DMA操作和应用层驱动层硬件接口的实现。
其它与控制器的硬件接口模块有外围硬件设备和内存,控制器涉及到总线接口有Lis接口,DCR接口和Locallink接口。
Lis接口:DMA访问内存的总线接口。
DCR接口:CPU访问DMA寄存器的总线接口。
Locallink接口: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逻辑实现对Locallink接口信号的跨时钟域处理和对DMA与Locallink接口数据的接收和发送的数据控制;
预取缓存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操作的DataFIS包传输时来缓存数据的地址和长度。CPU协处理器请求DMA读写操作是通过对Host和Device端交互的数据包的状态信息来判断的,举例说明DMA读写操作方式:
在NCQ(SATA协议规定的传输层数据包传输的一种方式NativeQueuedCommand的缩写)读数据时:主机(Host)端先发H2D命令寄存器FIS包(H2DRegisterFIS包);设备端(Device)接收到Host端发来的H2DRegisterFIS包后会解析包的内容,判断是读数据请求,然后会给Host回D2H命令寄存器包(D2HRegisterFIS包);接着发送DMA设置FIS包(DMASetupFIS包),在接着就是发送DataFIS包给Host端。在发送DataFIS包时,我们就可以对DataFIS包的数据结构的地址和长度作缓存。DataFIS包的数据结构的地址和长度是对应CPU协处理器定义的传输层的数据结构的指针。DataFIS包数据发送完成后,Device端会给Host端发送置设备位FIS包(SetDeviceFIS包),表示数据发送完成。当DMA读完成时,DMA状态机会给CPU协处理器返回DMA操作完成的标志位信号DMA_ok和DMA完成中断请求。
在NCQ写数据时:Host端先发H2DRegisterFIS包(H2D为HosttoDevice);Device接收到Host端发来的H2DRegisterFIS包后会解析包的内容,判断是写数据请求,然后会给Host回D2HRegisterFIS包(D2H为DevicetoHost);接着发送DMASetupFIS包。在跟着会发送DMAActivateFIS给Host端。当Host端接收到Device端发来的DMAActivateFIS包后,Host端就开始发DataFIS包给Device端进行写数据了。当DataFIS包发送完成后Device端会给Host端发送SetDeviceFIS包,表示数据接收完成。每个DMAActivateFIS包最大长度为8k字节,如果发送DataFIS包时,数据长度大于8k时,Device端会在没8k数据接收完成时给Host端回一个DAMActivateFIS包。当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总线寄存器列表:
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(FrameInformationStructure):帧信息结构
RegisterFIS:寄存器FIS包DMAActivateFIS:DMA激活FIS包DMASetupFIS:DMA设置FIS包DataFIS:数据FIS包
PIOSetupFIS:PIO设置FIS包SetDeviceBitsFIS:置设备位FIS包
H2D:HosttoDevice主机端到设备端D2H:DevicetoHost设备端到主机端
Locallink接口:link数据传输总线接口
TX_fifo:发送缓存
RX_fifo:接收缓存。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (5)

1.一种基于SATA控制器的DMA地址对预取方法,其特征在于,包括LIS总线接口模块,DMA状态机,接收数据缓存,发送数据缓存,信息控制模块和预取缓存FIFO模块;
所述LIS总线接口模块:为连接DMA状态机和内存的LIS总线提供接口,所述LIS总线为在DMA和内存间进行数据传输的数据总线;
所述接收数据缓存:缓存DMA写入内存的数据;
所述发送数据缓存:缓存DMA读出内存中的数据;
所述信息控制模块:对Locallink总线接口信号的跨时钟域进行处理和对DMA通过Locallink总线接收和发送数据进行控制;
所述预取缓存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包检测:数据传输完成后主机端会收到设备端的SDBFIS包,结束一次数据传输操作。
5.根据权利要求4所述的基于SATA控制器的DMA地址对预取方法,其特征在于,所述数据地址对预取包括:
写数据地址对预取:CPU将写数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块;
以及
读数据地址对预取:CPU将读数据地址对通过DCR总线接口写到DMA预取缓存FIFO模块。
CN201210381708.7A 2012-10-10 2012-10-10 基于sata控制器的dma地址对预读取方法 Active 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 CN102937939A (zh) 2013-02-20
CN102937939B true CN102937939B (zh) 2015-12-16

Family

ID=47696837

Family Applications (1)

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

Country Status (1)

Country Link
CN (1) CN102937939B (zh)

Families Citing this family (10)

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

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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接口的数据传输方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6874054B2 (en) * 2002-12-19 2005-03-29 Emulex Design & Manufacturing Corporation Direct memory access controller system with message-based programming

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
基于DSP的PCI总线高速DMA数据传输;鹿宝生等;《计算机工程与设计》;20061231;第27卷(第19期);第3555-3560页 *
基于PCI总线的DMA模块的设计与验证;颜建峰;《电子科技大学学报》;20071020;第36卷(第5期);第858-861页 *

Also Published As

Publication number Publication date
CN102937939A (zh) 2013-02-20

Similar Documents

Publication Publication Date Title
CN102937939B (zh) 基于sata控制器的dma地址对预读取方法
US20200174953A1 (en) Methods and apparatus for synchronizing uplink and downlink transactions on an inter-device communication link
CN103201725B (zh) 用于在多个处理器之间共享的存储器的存储器访问设备
JP4961481B2 (ja) シリアルアドバンストテクノロジーアタッチメント(sata)およびシリアルアタッチトスモールコンピュータシステムインターフェース(scsi)(sas)のブリッジング
KR101077900B1 (ko) 네트워크 효율성을 고려한 SoC 기반 시스템 네트워크에서의 인터페이스 장치의 통신방법 및 그에 의해 통신하는 인터페이스 장치
US20090024776A1 (en) High data rate serial peripheral interface
CN102075401B (zh) 在pcie总线上传输报文的方法、设备和系统
US20140047142A1 (en) Data transmission system and method thereof
US6047001A (en) Apparatus and method in a network interface device for storing a data frame and corresponding tracking information in a buffer memory
US8799532B2 (en) High speed USB hub with full speed to high speed transaction translator
EP2307973B1 (en) Transport control channel program processing
CN101556565A (zh) 嵌入式处理器的片上高性能dma
CN102890622B (zh) 一种基于协处理器的sata控制器
CN108932207A (zh) 带有缓存区的sdio-wifi数据传输方法及系统
JP4400650B2 (ja) データ転送制御装置及び電子機器
TWI428758B (zh) 電腦系統之操作方法
CN115499505B (zh) Usb网卡和通信方法
WO2024077890A1 (zh) 一种异步fifo读写控制方法、系统及电子设备
JP4434218B2 (ja) データ転送制御装置及び電子機器
WO2014206229A1 (zh) 一种加速器以及数据处理方法
CN115933860B (zh) 一种处理器系统、处理请求的方法及计算设备
CN116301627A (zh) 一种NVMe控制器及其初始化、数据读写方法
TWI416339B (zh) 通用序列匯流排傳輸轉譯器及輸入請求同步傳輸方法
US20030014596A1 (en) Streaming data cache for multimedia processor
KR20120054142A (ko) QoS 및 전송 효율 개선을 위한 SoC 기반 시스템 네트워크에서의 인터페이스 장치의 통신방법 및 그에 의해 통신하는 인터페이스 장치

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 for 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 calculation Limited by Share 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.