CN106598889A - 一种基于fpga夹层板的sata主控器 - Google Patents
一种基于fpga夹层板的sata主控器 Download PDFInfo
- Publication number
- CN106598889A CN106598889A CN201710080005.3A CN201710080005A CN106598889A CN 106598889 A CN106598889 A CN 106598889A CN 201710080005 A CN201710080005 A CN 201710080005A CN 106598889 A CN106598889 A CN 106598889A
- Authority
- CN
- China
- Prior art keywords
- data
- frame
- sata
- layer
- submodule
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0032—Serial ATA [SATA]
Abstract
本发明公开了一种基于FPGA夹层板的SATA主控器,这种主控器使用大规模现场可编程门阵列作为实现平台,实现SATA接口标准,控制和管理符合SATA接口存储设备的数据写入和读出。这种主控器包括应用层、传输层、链路层、物理层四大模块,各模块包括不同功能的子模块。其中,应用层在完成状态控制和管理的同时,完成与传输层的信息交互;物理层完成应用层命令解析;链路层完成加扰处理;物理层完成FPGA和SATA硬盘之间的同步与协商。本发明提出了一种精简的主控器结构,不但降低资源消耗,有利于FPGA或ASIC的实现,还全部采用硬件逻辑,降低实现的复杂程度和使用成本。同时,针对数据采集的特殊应用场景,对SATA硬盘数据加入时间戳,更方便于多点采集数据的后期处理。
Description
技术领域
本发明涉及符合串行高级技术附件(Serial Advanced Technology Attachment,SATA)接口规范的主控器实现,将大规模现场可编程门阵列(Field Programable GateArray,FPGA)作为实现平台,实现SATA接口标准,控制和管理符合SATA接口存储设备的数据写入和读出。
背景技术
计算机在对数据进行高速采集时,需要通过各种接口与硬盘之间进行命令和数据的传输,其中高级技术附件规范(Advanced Technology Attachment,ATA)是最常见的一种接口。ATA是指计算机与硬盘连接的接口规范,其特征包括价格低廉,兼容性强,拥有较出色的数据传输性能。1990年至2002年之间,ATA经历了从ATA-1到ATA-7共7代标准,传输速率从4.16Mbps增长到133Mbps。但发展到ATA-6时,电缆属性、连接器和信号协议方面出现的技术约束限制了ATA技术的发展,从而产生了对新型接口标准的需求。
SATA即串行高级技术附件规范Serial ATA,与并行的ATA接口标准完全不同,这种接口以连续串行的方式传送数据,在同一时间点内仅传输1位数据。这种串行接口技术将提供比并行接口技术更高的传输速率,同时还降低了电力消耗,减小了发热量。
SATA协议与网络七层协议类似,同样按照层的概念进行划分。根据不同的功能,协议总体结构从下至上可以划分成物理层、链路层、传输层和应用层。SATA基本的传输单元为帧,最大长度为2049个Dword(Double word)。SATA作为一种串行接口,采用点到点的方式传输数据,以传输速度快、支持热插拔、内置数据/命令校验单元等特性广泛应用于机械硬盘和固态硬盘上。
与并行ATA相比,SATA具有很多方面的优势:
1.数据传输速率更快。ATA-7的理论最大速度为133Mbps,而SATA传输速率已由SATA1.0的1.5Gbps提高到了SATA3.0的6Gbps,远高于并行ATA接口的数据传输速率。
2.数据传输精度更高。ATA-3标志使用了循环冗余码校验(Cyclic Redundancy Check,CRC)的数据包出错检测机制。针对在传输过程中帧可能发生错误的情况,SATA协议加强了CRC对帧的检测,提高了数据传输精度。同时,SATA协议还支持原生命令队列(NativeCommand Queuing,NCQ)技术,当用户程序发送多条指令到硬盘时,这些指令执行顺序运用NCQ技术给出的相应算法进行优化后,执行效率提高,从而使硬盘工作的负荷控制在合理的范围内。
3.SATA接口具有热插拔的特点,使得SATA接口硬盘使用起来更加方便快捷,可以作为移动硬盘使用,尤其是在需要连续工作和高数据交互的金融企业级应用场景下,SATA接口比并行ATA具有更大的优势。
4.SATA接口支持多硬盘连接,一个FMC子卡具有10个SATA卡槽,可以插入10个SATA硬盘。SATA接口的这种特性使一个工作系统主机可与多个硬盘进行信息交互。
本发明针对SATA 3.0协议,提出了一种精简SATA主控器结构,大大降低了硬件实现的资源消耗,有利于FPGA或者ASIC实现。
本发明所涉及的SATA主控器全部用硬件逻辑实现,无需任何嵌入式处理器的参与,用户侧只需要配置简单的时间参数和命令即可完成SATA硬盘的读写操作,大大简化了实现复杂度和使用成本,使得本发明更易于系统集成。
针对数据采集的特殊应用场景,本发明对SATA硬盘数据加入时间戳的属性,使得数据与时间具有一一对应关系,更方便多点采集数据的后期处理。
发明内容
本发明的目的:除了解决传统ATA接口在数据高速采集时存在的缺陷外,还针对一般SATA接口资源消耗高、实现程度复杂、使用成本高等不足之处,提出了一种精简的主控器结构,不但降低资源消耗,有利于FPGA或ASIC的实现,还全部采用硬件逻辑,降低实现的复杂程度和使用成本。同时,针对数据采集的特殊应用场景,对SATA硬盘数据加入时间戳,更方便于多点采集数据的后期处理。
为实现上述目的,本发明采用的技术方案是:一种基于FPGA夹层板的SATA主控器,总体框架如图1所示,主要包括:
SATA控制器应用层模块:如图1所示,该模块位于SATA主控器的应用层,其功能包括:完成与CPU的接口处理,接收CPU配置参数和命令,启动传输层完成SATA硬盘读/写操作;完成IRIG-B时间信号的解码,并得到数据时间;根据CPU配置的写数据起始时间,收集正确的采样数据;将从SATA硬盘读取到的数据写入缓存,通知用户侧读取;
SATA主控器传输层模块:如图2所示,该模块位于SATA主控器的传输层,其功能是:完成应用层命令的解析。在这个过程中,传输层收到应用层命令后,组成一系列帧发送给SATA设备,并对接收到的帧进行解析,同时将结果反馈给应用层;
SATA主控器链路层模块:如图3所示,该模块位于SATA主控器的链路层,其功能包括:发送数据时对帧进行加扰处理,同时添加链路层的专属字段;发送数据时完成解扰和CRC校验,并去除SOF、EOF、CRC字段的数据,然后发送给传输层;完成流控控制,通过原语的发送和接收,与设备进行状态信息的交互;
SATA主控器物理层模块:如图4所示,该模块位于SATA主控器的物理层,其功能包括:为链路层提供不同位宽的接口;从高速的串行比特流中恢复出时钟和数据;发送和检测OOB(Out-of-Bnad)信号,进行FPGA和SATA硬盘之间的同步与协商;向上层报告物理层的工作状态;提供电源管理功能,以此降低功耗。
SATA主控器应用层包括以下子模块,由各子模块共同完成应用层的整体功能:
1.应用层控制子模块:如图1所示,当CPU发起DMA写操作时,应用层控制子模块按照要求的长度开始采集数据,并存入到发送buffer中。当存满2048*32个数据后便发送DMA写请求命令;进行读操作时,CPU发起DMA读命令,如果Rx_buffer有一半为空,则发送读请求,并按照要求的长度读取数据;
2.应用层寄存器子模块:如图1所示,应用层寄存器子模块除了启动DMA方式的读/写请求外,对配置的写操作起始时间、读/写操作的地址、数据长度进行配置,以及对读/写的最大重传次数进行译码;
3.应用层IRIG-B解码子模块:如图1所示,应用层IRIG-B解码子模块利用本地的时钟脉冲pps将IRIG-B码同步到本地的时钟域,然后统计高电平的宽度,进而判断当前的码型是“0”、“1”或“P”中的某一种类型。该子模块先检测出连续两个8ms宽度的码元出现的位置,再检测随后的30个码元脉冲宽度,这样便可确定“天”、“时”、“分”、“秒”,并将对应的各个码元信息组合成BCD码,最后将BCD码转换成二进制码输出;
4.应用层发送/接收数据buffer子模块:如图1所示,应用层发送/接收数据buffer子模块使用乒乓buffer结构,即采用边写边读的模式,先从低位地址开始写。乒乓buffer位宽为11位,深度为32位,写操作的地址终点为1023,当写完一半的地址后转到高位地址继续写,同时将写满的一半数据读出,并向控制器发送已写一半的结束信号wend。这时,如果需要重传,则使用上一次的高位地址;否则,使用计算得到的新的高位地址;
5.应用层数据时间BUFFER子模块:如图1所示,应用层数据时间BUFFER子模块用于存储写操作时写进数据的时间信息,单位为1s。当CPU需要读数据时,输出对应的时间信息来调取数据。
SATA主控器传输层包括以下子模块,由各子模块共同完成传输层的整体功能:
1.传输层DMA控制子模块:
(1)DMA重传过程:如图2所示,当设备向主机返回发送错误信息时,或者主机传输层收到链路层的帧检验出错信号时,DMA控制子模块则启动DMA重传过程(含DMA读/写操作)。如果此时传输层处于重传判断的状态,且重传次数小于设定的最大重传次数,则发出重传请求信号,每发送一次重传请求,则重传计数器加1,达到最大重传次数,或者DMA写/读操作开始时则重传计数器清零;
(2)DMA控制子模块除了启动DMA重传过程外,还包括发送帧的类型,帧的类型分为寄存器类型和数据帧类型。如果当前状态为IDLE,且收到上层的DMA命令或重传命令,则DMA控制子模块需要发送寄存器帧;如果当前状态为WAIT_ACTIVE,且收到返回的DMA_ACTIVE帧,则需要发送数据帧;
2.传输层影子寄存器子模块:
(1)命令寄存器子模块:接收从应用层传送过来的写命令,该命令由8位comman命令和写操作起始地址lba组成;
(2)错误寄存器子模块:链路层接收到数据校验错误,同时将错误信息rx_error发送给传输层的错误寄存器,再传输到应用层;
(3)状态寄存器子模块:用于存放当前指令执行的各种状态,反映设备的情形;
(4)控制寄存器子模块:一共8位,用于控制主机的读/写操作,并向设备传输命令,接受设备的反馈状态;
(5)扇区数寄存器子模块:表示传输数据的扇区数量,扇区数量多时可用扩展寄存器;
3.传输层发送处理子模块:如图2所示,应用层发送帧时,发送开始标志给传输层,表示可以开始传输,这时传输层发送处理子模块控制帧发送有效信号立即置1。如果链路层已准备就绪,则发送过程建立,此时帧发送有效信号清零。其中,帧类型分为寄存器帧和数据帧,传输层发送处理子模块按照帧类型以及计数器的值来决定输出数据。当发送的帧个数达到要求,则该发送过程完成,帧发送完成信号置1;
4.传输层接收处理子模块:如图2所示,传输层接收处理子模块接收链路层传输过来的帧,判断帧类型。如果链路层的接收FIFO为非空,则开始从FIFO中读取数据。接收到传来的数据后,该子模块首先检测数据的最高两位,找出SOF数据,然后根据数据的低8位来判断帧的类型,帧的类型分为寄存器帧、设置设备帧、DMA_ACTIVE帧和DMA数据帧。该子模块检测完帧的类型后,传输层将类型检验成功信号返回给链路层。当检测到EOF标志后,传输层将向链路层反馈信号,表示帧已接收完成;
5.传输层状态机子模块:如图5所示,传输层状态机子模块包括以下状态:①IDLE:空闲状态;②REGFIS_SEND:发送寄存器帧状态;③WAIT_ACTIVE:等待设备返回DMA_ACTIVE_FIS;④DATAFIS_SEND:该状态下主机发送数据帧给设备;⑤WAIT_REGFIS:等待设备对发送过去的数据帧作出回应;⑥RET_CHECK:进行重传检测;⑦DATAFIS_RCV:该状态下接收设备发过来的数据帧。在DMA的读/写过程中,传输层状态机子模块控制以上各状态的转换。
SATA主控器链路层包括以下子模块,由各子模块共同完成链路层的整体功能:
1.链路层状态控制子模块:如图3所示,该子模块的功能包括:
(1)控制原语:当链路层不在发送数据和发送CRC两个状态时,则需要发送原语,而原语类型信号值根据原语类型的不同赋予不同的值。链路层状态控制子模块控制这种原语的类型和信号值;
(2)向传输层返回信号:除了L_NoComm状态,如果物理层到传输层准备就绪的信号为低,链路层在任何状态下都进入到L_NoCommErr状态,此时链路层向传输层返回错误状态信号,传输层根据链路层返回的信号采取相应操作。如果传输层发送操作完成,链路层收到设备返回的成功/错误信号,并将其返回给传输层,同时返回操作已完成的信号;
(3)控制链路层状态的变化。本发明将链路层状态机分为3部分:链路层空闲状态机、链路层发送状态机和链路层接收状态机:
Ⅰ.如图6所示,链路层空闲状态机包括如下几种状态:①L_RESET:传输层要求链路层复位状态;②L_NoCommErr:链路层失去连接;③L_NoComm:状态机在L_NoCommErr状态或L_RESET状态之后进入该状态;④L_SendAlign:链路层处于该状态时不断发送ALIGNp原语;⑤L_IDLE:主机处于空闲状态。这几种状态因任务不同或完成任务的阶段不同而相互转换,由链路层状态控制子模块控制;Ⅱ.如图7所示,链路层发送状态机包括如下几种状态:①LT_SendChkRdy:该状态不断发送X_RDTp原语,请求主机发送数据;②LT_SendSOF:发送SOFp原语,之后开始发送数据;③LT_SendData:此状态下发送数据;④LT_RcvHold:主机检测到设备发送的HOLDp原语;⑤LT_SendCRC:计算并发送CRC校验码⑥LT_SendEOF:发送帧结束标志EOF;⑦LT_Wait:等待主机响应传输结果。这几种状态因任务不同或完成任务的阶段不同而相互转换,由链路层状态控制子模块控制;
Ⅲ.如图8所示,链路层接收状态机包括如下几种状态:①LR_RcvChkRdy:主机准备好接收数据;②LR_RcvWaitFIFO:主机检测是否准备接受数据;③LR_RcvData:链路层接收数据状态;④LR_Hold:等待接收FIFO可用;⑤LR_RcvHold:发送HOLDAp原语通知设备继续发送;⑥LR_RcvEOF:该状态下对接收到的帧进行校验;⑦LR_GoodCRC:等待传输层对接收到的帧进行解析的结果;⑧LR_GoodEnd:该状态表示当前帧接收成功;⑨LR_BadEnd:该状态表示当前帧接收错误。这几种状态因任务不同或完成任务的阶段不同而相互转换,由链路层状态控制子模块控制;
2.链路层原语检测子模块:如图3所示,链路层原语检测子模块检测控制和反馈传输状态的原语。其中,SATA规定的原语除了ALIGNp以K28.5开头外,其他的原语都以K28.3开头;
3.链路层发送/接收处理子模块:如图3所示,链路层发送/接收处理子模块实现三种功能:
(1)CRC生成与校验:按照规定的CRC生成多项式,对发送FIFO中的数据进行CRC计算;发送信息时对原语外的数据进行CRC编码,再将编码后的CRC值插入EOF之前;接收数据时同样生成CRC码,并与接收到的CRC值比较;
(2)加/解扰:为了使要发送的数据中“0”和“1”出现的概率大致相等,则需根据SATA规定的扰码生成多项式,对发送和接收的数据进行加扰,这样便于对未定时信息的提取,同时削弱噪声的干扰;
(3)进行8B/10B编/解码:8B/10B编解码通过查表实现,8位数据标记为Dx.y或Kx.y,其中Dx.y表示数据,Kx.y表示控制字符,x表示8位数据码的低5位,y表示高3位;
4.链路层发送和接收FIFO子模块:如图3所示,链路层发送和接收FIFO子模块发送从上层传来的帧;接收从物理层传输过来且经过CRC校验和解扰之后的帧。
SATA主控器物理层包括以下子模块,由各子模块共同完成物理层的整体功能:
1.物理层OOB控制子模块:
(1)如图4所示,物理层OOB控制子模块控制物理层状态转换过程,这个过程完成OOB信号的发送和接收。其中,OOB信号包括COMNINT、COMWAKE、COMRESET三种,用于建立主机端和设备端通信链路的连接。
(2)OOB控制子模块所控制的物理层状态转换过程如下:
在IDLE状态下,如果收到平台准备就绪的信号后,则进入SEND_RESET状态,否则维持在IDLE状态;进入SEND_RESET状态,发出COMRESET信号一段时间后,进入WAIT_FOR_INIT状态,等待设备回应COMINIT信号;主机受到COMINIT信号,并等待COMNINT信号的结束,之后进入到SEND_WAKE状态;在SEND_WAKE状态下发送COMWAKE信号,经过一段时间后,进入到WAIT_FOR_WAKE状态等待设备回应COMWAKE信号;主机收到COMWAKE信号,并等待COMWAKE信号的结束;COMWAKE信号发送完毕,主机进入到WAIT_FOR_ALIGN状态,等待设备发送ALIGN信号;收到ALIGN信号,主机进入到SEND_ALIGN状态,等待非ALIGN信号的到来,如果一段时间后没收到,则返回IDLE状态;在SEND_ALIGN状态下,如果主机收到3个非ALIGN信号(为SYNC信号,表示同步建立),则连接建立完成,进入READY状态,如果在READY期间主机收到COMNINT信号,则需要返回IDLE状态再次建立连接;
2.物理层GTX IP子模块:如图4所示,物理层GTX IP子模块用于串行收发接口,接收/发送高速数据流,工作原理如下:
(1)发送数据经过TXDATA端口将数据发送到RocketIO模块内部,将接口数据位宽转化为内部的数据位宽;
(2)为增强信号的抗干扰能力,防止比特流出现连“0”或连“1”的情况,并行的数据需要进入8B/10B编码模块进行编码;接收到的数据进行8B/10B解码,得到发送的原始数据;
(3)编码后的数据进入Phase Adjust FIFO中,用于调整写时钟和读时钟之间的相位差异和频率差异;接收到的数据送入时钟数据恢复模块,根据本地参考时钟和输入信号来产生锁定于输入信号的新时钟;
(4)数据从FIFO出来后,将并行的数据流转化为高速的串行数据流;接收到的数据经过时钟恢复模块后进行串并转换,并行数据流流向字符检测和对齐模块,从串行的数据流中找到字符边界,然后将所有的后续数据流向这个边界并对齐,进而对齐整个数据流序列,以保证接收和发送的并行数据一致;
3.物理层发送端复位状态机子模块:如图4所示,物理层发送端复位状态机子模块用于发送端状态机状态之间的转换。如图9所示,物理层发送端状态机包含以下状态:①IDLE:主机处于空闲状态;②SEND_RESET:硬件复位状态;③WAIT_FOR_INIT:等待COMINIT信号;④WAIT_FOR_NOINIT:等待COMINIT信号结束;⑤SEND_WAKE:发送COMWAKE信号;⑥WAIT_FOR_WAKE:等待对方发送COMWAKE回应信号;⑦WAIT_FOR_NOWAKE:等待COMWAKE信号结束;⑧WAIT_FOR_ALIGN:等待发送过来COMWAKE信号;⑨SEND_ALIGN:发送AlIGNp信号;⑩READY:通信链路建立完成。物理层发送端状态机处于何种状态,由物理层发送端状态机子模块根据任务的不同或任务的不同阶段控制其转换;
4.物理层接收端复位状态机子模块:如图4所示,物理层接收端复位状态机子模块用于接收端状态机状态之间的转换。如图10所示,物理层接收端状态机主要包括以下几个状态:①IDLE:空闲状态;②RECEIVE_RESET:接收COMRESET信号;③SEND_INIT:接收COMINIT信号;④WAIT_FOR_WAKE:等待COMWAKE信号;⑤WAIT_FOR_NOWAKE:等待COMWAKE信号结束;⑥SEND_WAKE:发送COMWAKE信号;⑦SEND_ALIGN:发送ALIGNp原语;⑧WAIT_FOR_ALIGN:等待ALIGNp原语;⑨ERROR:链路初始化错误;⑩READY:链路建立成功。物理层接收端状态机处于何种状态,由物理层接收端状态机子模块根据任务的不同或任务的不同阶段控制其转换。
附图说明
图1是总体框架
图2是应用层实现架构
图3是传输层实现架构
图4是链路层实现架构
图5是物理层实现架构
图6是传输层状态转换
图7是链路层空闲状态转换
图8是链路层发送状态机状态转换
图9是链路层接收状态机状态转换
图10是物理层发送端状态转换
图11是物理层接收端状态转换
具体实施方式
本发明中,SATA主控器的应用层、传输层、链路层和物理层的OOB控制模块通过硬件描述语言,在FPGA中综合出相应的电路来实现整体功能,而物理层的GTX收发器则使用Xilinx公司的Serdes核实现功能。AHB Slave模块完成参数的配置和读/写命令的发送,时间计算模块完成时间的解码;应用层由控制模块、数据存储模块以及乒乓buffer模块组成,分别完成响应AHB Slave模块的读/写请求、控制管理应用层和与传输层交互信息、存储数据写入时间、缓存数据功能;传输层由寄存器模块、控制模块、发送和接收模块构成,分别完成维护影子寄存器、控制读/写操作、帧的封装/发送以及根据帧的内容更新影子寄存器,并将帧数据发送给应用层功能;链路层由原语检测模块、控制模块、发送/接收模块、发送/接收fifo模块构成,分别完成原语的检测、状态机维护及控制原语和处理发送/接收过程、对发送数据加扰和CRC计算,以及对接收数据进行解扰和CRC校验、缓存数据功能;物理层由带外控制模块、Serdes核构成,分别完成硬盘的上电和硬件复位过程、数据8B与10B的编/解码以及数据的串行与转换、时钟修正、预加重和线性均衡功能。
结合上述模块对本发明做进一步描述:
在进行读/写操作之前,物理层的带外控制模块通过3种信号建立主机端和设备端通信链路的连接。
当有数据要写入SATA硬盘时,外部AHB主设备通过AHB Slave接口发起写操作命令,应用层对写命令进行解析并对控制模块进行配置,包括写开始、写起始时间、写起始地址和写长度。控制模块按照寄存器配置的长度采集数据,同时将时间解码模块得到的时间信息一起送入到发送buffer中。本发明中采用乒乓buffer,即在边写进数据的同时边读数据。乒乓buffer位宽为11位,深度为32位,写操作的地址终点为1023,当写满一半buffer后就发送写命令至传输层,同时切换到另一半继续写数据。由于发送buffer处于数据采样时钟域,AHB Slave模块处于系统工作时钟域,因此需要进行跨时钟域的同步。传输层开始写操作,按照帧的格式要求将数据组成帧,然后将帧发送到链路层发送FIFO中。链路层发送模块对帧数据添加SOF和EOF标志,并对帧进行加扰和插入CRC计算后的数据。接着,数据送入GTX收发器,经过8B/10B编码后的2路差分并行数据转换成1路串行数据,通过FMC子卡存入到SATA盘中。
当有数据从SATA盘读出时,外部AHB主设备通过AHB Slave接口发送读命令和要读出的数据参数,应用层对命令进行解析,寄存器对控制模块进行配置,包括数据的写入时间和地址。数据经过GTX收发器完成10B/8B解码,将串行数据转换成并行数据,发送至链路层接收模块,对数据进行解扰以及CRC校验,去除SOF、EOF和CRC字段的数据之后存入接收FIFO中,并发送到传输层。传输层对接收到的帧进行解析,并将解析结果返回给应用层。如果是符合规定的帧,则将解帧后的数据传输到应用层乒乓buffer中,否则将丢弃接收到的帧。当数据传输出现错误,则需启动重传过程,该过程由传输层控制模块控制。根据配置的最大重传次数,如果此时重传次数小于该值,则发出重传请求。
将编写好的硬件描述语言通过(Integrated Software Environment,ISE)设计工具进行综合,综合成功后生产比特流文件,并下载至VC707开发板。同时,在程序中插入DEBUG工具ICOM核、ILA核和VIO核,使用Chipscope工具来观察和分析数据,经过大量数据测试,SATA主控器能够正确可靠地完成SATA硬盘的读写操作。
Claims (6)
1.一种基于FPGA夹层板的SATA主控器,其特征在于,包括以下模块:
SATA主控器应用层模块:完成与CPU接口处理,接收CPU配置参数和命令,启动传输层完成SATA硬盘读/写操作;完成IRIG-B时间信号的解码,得到数据时间;根据CPU配置的写数据起始时间,收集正确的采样数据;将从SATA硬盘读到的数据写入缓存,通知用户侧读取;
SATA主控器传输层模块:完成应用层命令的解析,在收到应用层命令后,组成一系列帧发送给链路层;对接收到的帧进行解析,并将结果反馈给应用层;
SATA主控器链路层模块:发送数据时对帧进行加扰处理,同时添加链路层的专属字段;接收数据时完成解扰和CRC校验,并将去除SOF、EOF、CRC字段的数据发送给传输层;完成流控控制,通过原语的发送和接收,与设备进行状态信息的交互;
SATA主控器物理层模块:为链路层提供不同位宽的接口,从高速的串行比特流中恢复出时钟和数据;发送和检测OOB(Out-of-Band)信号,进行主控器和SATA硬盘之间的同步与协商;向上层报告物理层的工作状态;提供电源管理功能,以此降低功耗。
2.根据权利要求1所述的基于FPGA夹层板的SATA主控器,其特征在于,所述的应用层模块包含以下子模块:
控制子模块:控制读/写操作状态,计算DMA方式读/写命令的LBA,给命令寄存器赋值;
寄存器子模块:完成CPU配置寄存器译码、启动DMA方式的读/写请求及读写的各项参数配置;
IRIG-B解码子模块:完成IRIG-B时间信息的解码,得到采样数据对应的时间点;
发送/接收数据BUFFER子模块:使用乒乓BUFFER结构,即采用边写边读的模式传输数据;
数据时间BUFFER子模块:用于存储写操作时数据对应的时间。
3.根据权利要求1所述的基于FPGA夹层板的SATA主控器,其特征在于,所述的传输层模块包含以下子模块:
DMA控制子模块:包括DMA重传过程(含DMA读/写操作)和发送帧的类型;其中,当设备向主机反馈错误信息或链路层的帧检验出错信号且发送到传输层时,DMA控制子模块启动DMA重传过程。而DMA控制子模块发送何种帧的类型则根据当前状态和收到的信息决定;
影子寄存器子模块:其功能由命令寄存器、错误寄存器、状态寄存器、控制寄存器、扇区数寄存器共同完成;
发送处理子模块:当应用层模块的帧向发送处理子模块发送起始标志时,发送处理子模块将根据帧类型和帧数据长度进行组帧;同时,根据链路层状态,将组好的帧发送给链路层;
接收处理子模块:接收链路层传输过来的帧,判断帧类型的正确性,并根据帧类型的不同,对数据进行不同的处理。如果是寄存器帧,则更新影子寄存器;如果是数据帧,则将数据发送给应用层;
状态机子模块:仅控制DMA的读/写过程,状态机包括①IDLE:空闲状态;②REGFIS_SEND:发送寄存器帧状态;③WAIT_ACTIVE:等待设备返回DMA_ACTIVE_FIS;④DATAFIS_SEND:该状态下主机发送数据帧给设备;⑤WAIT_REGFIS:等待设备对发送过去的数据帧作出回应;⑥RET_CHECK:进行重传检测;⑦DATAFIS_RCV:该状态下接收设备发过来的数据帧等七种状态;
以上传输层子模块共同完成应用层命令解析,并组成一系列帧发送给SATA设备,同时对接收到的帧进行解析,并将结果返回给SATA主控器应用层模块。
4.根据权利要求1所述的基于FPGA夹层板的SATA主控器,其特征在于,所述的链路层模块包括以下子模块:
状态控制子模块:根据从物理层接收到的原语,向传输层反馈成功/错误信号,传输层此时采取相应的操作;利用状态机控制链路层状态的变化;本发明中链路层状态机分为空闲状态机、发送状态机和接收状态机三部分;
原语检测子模块:用于检测控制和反馈传输状态的原语类型;
发送/接收处理子模块:完成CRC生成与校验、加/解扰、进行8B/10B编/解码三种功能;其中,发送帧数据时,还需要根据当前状态,在加扰后的数据中插入SOF、EOF、HOLD等原语;
发送/FIFO子模块:完成发送和接收帧数据的缓存功能。
5.根据权利要求1所述的基于FPGA夹层板的SATA主控器,其特征在于,所述的物理层模块包括以下子模块:
OOB控制子模块:控制物理层状态的转换过程,这个过程运用OOB信号建立连接和通知的交互,其中OOB信号分为COMNINT、COMWAKE、COMRESET三种;链路建立过程由状态机控制,共分为十个状态:①IDLE:主机处于空闲状态;②SEND_RESET:硬件复位状态;③WAIT_FOR_INIT:等待COMINIT信号;④WAIT_FOR_NOINIT:等待COMINIT信号结束;⑤SEND_WAKE:发送COMWAKE信号;⑥WAIT_FOR_WAKE:等待对方发送COMWAKE回应信号;⑦WAIT_FOR_NOWAKE:等待COMWAKE信号结束;⑧WAIT_FOR_ALIGN:等待发送过来COMWAKE信号;⑨SEND_ALIGN:发送AlIGNp信号;⑩READY:通信链路建立完成;
GTX IP子模块:主要负责串行收发接口,接收/发送高速串行数据流;
GTX发送端复位状态机子模块:根据Xilinx要求,完成GTX发送端的复位控制;
GTX接收端复位状态机子模块:根据Xilinx要求,完成GTX接收端的复位控制。
6.根据权利要求1所述的基于FPGA夹层板的SATA主控器,其特征在于,各子模块在完成各自功能的基础上与同一模块中的其它子模块协同工作,进而实现模块的整体功能。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610682768 | 2016-08-18 | ||
CN2016106827680 | 2016-08-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106598889A true CN106598889A (zh) | 2017-04-26 |
Family
ID=58587489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710080005.3A Pending CN106598889A (zh) | 2016-08-18 | 2017-02-15 | 一种基于fpga夹层板的sata主控器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106598889A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762663A (zh) * | 2018-05-30 | 2018-11-06 | 北京电子工程总体研究所 | 一种多源多格式数据记录装置 |
CN109344109A (zh) * | 2018-10-23 | 2019-02-15 | 江苏华存电子科技有限公司 | 基于固态硬盘的大数据中加速人工智能计算的系统及方法 |
CN109597576A (zh) * | 2018-11-30 | 2019-04-09 | 深圳市得微电子有限责任公司 | 提高ncq命令响应速度的方法、装置、可读存储介质及系统 |
CN111245563A (zh) * | 2019-12-30 | 2020-06-05 | 湖南迈克森伟电子科技有限公司 | 一种gtx无编码传输方法与装置 |
CN111881077A (zh) * | 2020-07-29 | 2020-11-03 | 北京计算机技术及应用研究所 | 一种提高sata协议接口稳定性的参数自适应调整方法 |
CN112559407A (zh) * | 2020-12-22 | 2021-03-26 | 无锡众星微系统技术有限公司 | Stp链路层状态机优化方法 |
CN113176850A (zh) * | 2021-03-12 | 2021-07-27 | 湖南艾科诺维科技有限公司 | 基于srio接口的共享存储盘及其存取方法 |
CN114138582A (zh) * | 2021-12-08 | 2022-03-04 | 中科亿海微电子科技(苏州)有限公司 | 基于fpga的金融加速卡解码穿透延迟的测量系统及方法 |
CN115840725A (zh) * | 2023-02-13 | 2023-03-24 | 苏州萨沙迈半导体有限公司 | 具有自检功能的端对端通讯电路和芯片设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880427A (zh) * | 2012-08-20 | 2013-01-16 | 北京奇作电子有限公司 | 一种基于fpga的sata主控制器 |
CN102890622A (zh) * | 2012-09-29 | 2013-01-23 | 无锡众志和达存储技术股份有限公司 | 一种基于协处理器的sata控制器 |
US20160191665A1 (en) * | 2014-12-31 | 2016-06-30 | Samsung Electronics Co., Ltd. | Computing system with distributed compute-enabled storage group and method of operation thereof |
-
2017
- 2017-02-15 CN CN201710080005.3A patent/CN106598889A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880427A (zh) * | 2012-08-20 | 2013-01-16 | 北京奇作电子有限公司 | 一种基于fpga的sata主控制器 |
CN102890622A (zh) * | 2012-09-29 | 2013-01-23 | 无锡众志和达存储技术股份有限公司 | 一种基于协处理器的sata控制器 |
US20160191665A1 (en) * | 2014-12-31 | 2016-06-30 | Samsung Electronics Co., Ltd. | Computing system with distributed compute-enabled storage group and method of operation thereof |
Non-Patent Citations (2)
Title |
---|
荆旭: ""基于FPGA的SATA协议分析及收发控制器设计"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
陈杰: ""基于SATA2.0协议的高速大容量存储控制系统的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108762663A (zh) * | 2018-05-30 | 2018-11-06 | 北京电子工程总体研究所 | 一种多源多格式数据记录装置 |
CN109344109B (zh) * | 2018-10-23 | 2022-07-26 | 江苏华存电子科技有限公司 | 基于固态硬盘的大数据中加速人工智能计算的系统及方法 |
CN109344109A (zh) * | 2018-10-23 | 2019-02-15 | 江苏华存电子科技有限公司 | 基于固态硬盘的大数据中加速人工智能计算的系统及方法 |
CN109597576A (zh) * | 2018-11-30 | 2019-04-09 | 深圳市得微电子有限责任公司 | 提高ncq命令响应速度的方法、装置、可读存储介质及系统 |
CN109597576B (zh) * | 2018-11-30 | 2022-04-05 | 深圳市得一微电子有限责任公司 | 提高ncq命令响应速度的方法、装置、可读存储介质及系统 |
CN111245563A (zh) * | 2019-12-30 | 2020-06-05 | 湖南迈克森伟电子科技有限公司 | 一种gtx无编码传输方法与装置 |
CN111245563B (zh) * | 2019-12-30 | 2022-02-18 | 湖南迈克森伟电子科技有限公司 | 一种gtx无编码传输方法与装置 |
CN111881077A (zh) * | 2020-07-29 | 2020-11-03 | 北京计算机技术及应用研究所 | 一种提高sata协议接口稳定性的参数自适应调整方法 |
CN111881077B (zh) * | 2020-07-29 | 2024-04-19 | 北京计算机技术及应用研究所 | 一种提高sata协议接口稳定性的参数自适应调整方法 |
CN112559407A (zh) * | 2020-12-22 | 2021-03-26 | 无锡众星微系统技术有限公司 | Stp链路层状态机优化方法 |
CN112559407B (zh) * | 2020-12-22 | 2021-11-16 | 无锡众星微系统技术有限公司 | Stp链路层状态机优化方法 |
CN113176850A (zh) * | 2021-03-12 | 2021-07-27 | 湖南艾科诺维科技有限公司 | 基于srio接口的共享存储盘及其存取方法 |
CN114138582A (zh) * | 2021-12-08 | 2022-03-04 | 中科亿海微电子科技(苏州)有限公司 | 基于fpga的金融加速卡解码穿透延迟的测量系统及方法 |
CN115840725A (zh) * | 2023-02-13 | 2023-03-24 | 苏州萨沙迈半导体有限公司 | 具有自检功能的端对端通讯电路和芯片设备 |
CN115840725B (zh) * | 2023-02-13 | 2023-05-26 | 苏州萨沙迈半导体有限公司 | 具有自检功能的端对端通讯电路和芯片设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598889A (zh) | 一种基于fpga夹层板的sata主控器 | |
CN106612141B (zh) | 一种光纤通道协议通用仿真测试卡及其数据交互方法 | |
CN104954096B (zh) | 一种一主多从的高速同步串行通信数据传输方法 | |
CN103825696A (zh) | 一种基于fpga实现光纤高速实时通信的装置 | |
CN102681971B (zh) | 一种基于aurora协议进行FPGA板间高速互连的方法 | |
CN102185833B (zh) | 一种基于fpga的fc i/o并行处理方法 | |
CN109426636B (zh) | 一种fpga片间高位宽数据传输的方法及装置 | |
CN106292409B (zh) | 一种基于fpga多速率光纤通讯的实时仿真系统及其仿真方法 | |
CN108462620B (zh) | 一种吉比特级SpaceWire总线系统 | |
CN110224789A (zh) | 一种基于fpga的多模式hdlc控制器 | |
CN107171728B (zh) | 1b4b与曼彻斯特编码的正向、反向传输方法及装置、系统 | |
CN103049413B (zh) | 基于FC与Camlink总线的数据转换与传输方法 | |
CN104780019A (zh) | 光纤通信数据的存储方法 | |
CN107436851A (zh) | 串行外设接口四线隔离系统及其控制方法 | |
CN108415870A (zh) | 一种多通道高速数据分发装置 | |
CN110058207B (zh) | 一种用于雷达信号传输的多lane数据同步及重组系统与方法 | |
CN109815073B (zh) | 一种基于pxi平台的高速串口srio的测试方法 | |
CN110474692A (zh) | 一种光通信设备、光通信系统、数据传输方法及存储介质 | |
CN107579894B (zh) | 一种基于fpga的ebr1553总线协议实现装置 | |
CN101304296B (zh) | 网络装置及其传输方法 | |
CN103064810B (zh) | 一种实现卫星串口通信的方法 | |
CN1917519B (zh) | 高级数据链路控制协议串行数据的并行传输方法及其系统 | |
CN101938453A (zh) | 一种实现中央处理器与以太网进行数据传输的装置与方法 | |
CN101577598A (zh) | 多路信号复用、解复用的方法、装置和系统 | |
CN114866733A (zh) | 一种低延迟视频处理方法、系统及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20170426 |
|
WD01 | Invention patent application deemed withdrawn after publication |