一种基于FPGA的SATA接口数据流控制器及控制方法
技术领域
本发明涉及SATA(Serial Advanced Technology Attachment,串行高级技术附件)接口控制技术领域,特别涉及一种基于FPGA(Field Programmable Gate Array,现场可编程门阵列)的SATA接口数据流控制器及控制方法。该控制器采用FPGA作为硬件平台,利用FPGA内部逻辑实现SATA接口的数据流控制。
背景技术
SATA(Serial Advanced Technology Attachment)即串行高级技术附件。它是一种计算机总线,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输之用。这是一种完全不同于并行PATA(Parallel Advanced Technology Attachment)的新型硬盘接口类型,由于采用串行方式传输数据而得名。SATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。串行接口还具有结构简单、支持热插拔的优点,目前,SATA分别有SATA 1.0速率为1.5Gbit/s、SATA2.0速率为3Gbit/s和SATA3.0速率为6Gbit/s三种规格。未来将有更快速的SATA Express规格。
链路层和物理层的数据流控制是SATA协议的重要组成部分,目前公知的处理方式是根据协议进行状态跳转,通过基元的发送、应答和基元的插入、数据的加扰和解扰、CRC校验、以及8b/10b编码和收发器串化解串功能实现数据流的控制,但上述实现方式不够灵活,处理起来比较繁琐,基元的插入会引入大量的缓存处理,尤其是每隔256拍插入Align基元的要求,会降低应答基元的响应速率。另外,为了提高电路的EMI特性,SATA协议不但对传输的帧数据提出了加扰要求,还对重复基元提出了加扰要求,重复基元的加扰数据不会对数据流的控制产生作用,即不会被接口解扰恢复原始的数据,对于不同的重复基元的加扰,我们可以采用一定长度的同一个扰码序列异或基元代替。
速率匹配(rate matching)是指传输信道上的比特被重发或者打孔,以匹配物理信道的承载能力,信道映射时达到传输格式所要求的比特速率。重发就是当输出比特多于输入比特时在当前比特和后面的比特之间插入一次当前比特,打孔是当输入比特数多于输出比特数时,按照一定的规则把一些比特打掉,后面的比特前移。基于FPGA的SATA接口协议实现,FPGA作为主机,与从机(大部分为硬盘)存在时钟不同源,时钟频偏的时间积累会造成接口的FIFO溢出,需要做数据流的速率匹配处理。目前解决的方法是采用高端的FPGA,自带的收发器有速率匹配功能,或者是采用国外的SATA知识产权核,同样也带有速率匹配功能。但此类方法成本过高,对FPGA器件依赖度高,通用性不好。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种基于FPGA的SATA接口数据流控制器,简化了SATA协议链路层和物理层的数据流控制的实现,能简单有效的实现对SATA协议的基元控制和数据流的速率匹配,并且解决了由于时钟频偏的时间积累造成接口的FIFO溢出的问题。
本发明的第二目的为提供一种上述控制器实现的基于FPGA的SATA接口数据流控制方法。
本发明的第一目的通过下述技术方案实现:一种基于FPGA的SATA接口数据流控制器,包括基元检测和控制模块、速率匹配模块、ROM模块、CRC计算和校验模块、数据加扰和解扰模块、数据选通模块以及SATA物理层模块;
所述基元检测和控制模块发送基元信号至SATA物理层模块,用于SATA协议基元的检测以及基元的交互应答处理,并且针对进入SATA物理层的数据流每隔256个时钟周期插入2个时钟周期的AlignP基元;所述基元检测和控制模块分别发送控制信号至CRC计算和校验模块、数据加扰和解扰模块以及数据选通模块,用于对数据加扰和解扰模块、CRC计算和校验模块以及数据选通模块进行使能控制;
所述ROM模块存储一个一定长度的加扰多项式计算值,用于实现重复基元的加扰;对于进入SATA物理层模块需要加扰的重复基元,其扰码值是从ROM模块读出的加多项式计算值异或该基元后的结果;
所述CRC计算和校验模块,在发送帧数据时用于计算CRC值并且将CRC值置于数据最后;在接收帧数据时,用于针对解扰后的帧数据进行CRC校验;
所述数据加扰和解扰模块,在发送帧是时用于对包括CRC值在内的帧进行加扰,加扰后的数据发送给SATA物理层模块;在接收帧时,用于对接收到的帧进行解扰;
所述SATA物理层模块包括发送数据模块和接收数据模块,其中发送数据模块接收来自基元检测和控制模块、ROM模块以及数据加扰和解扰模块发送的信号,经过8B/10B编码、并串转换以及预加重控制后发送到从设备;接收数据模块接收从设备发送的数据,经过线性均衡器、恢复时钟、串并转换、逗点序列检测以及8B/10B解码后发送给速率匹配模块;
速率匹配模块接收SATA物理层模块发送的数据,速率匹配模块发送数据至基元检测和控制模块以及数据选通模块,通过基元检测和控制模块判断速率匹配后的数据是帧数据还是无用的扰码序列;所述速率匹配模块采用FIFO结构,接收数据时,速率匹配模块根据FIFO状态进行速率匹配的打孔或插入操作,其中在打孔操作时,写入数据中去掉AlignP基元或无用的扰码序列,在插入操作时,在读出的FIFO数据中插入AlignP基元;
数据选通模块接收基元检测和控制模块发送的控制信号,当基元检测和控制模块判断速率匹配模块发送的数据是帧数据时,控制数据选通模块将帧数据发送给数据加扰和解扰模块进行解扰;当基元检测和控制模块判断速率匹配模块发送的数据是无用的扰码序列时,控制数据选通模块将无用的扰码序列丢弃。
优选的,所述速率匹配模块在收到数据时检测FIFO的状态,当FIFO的状态为非满时,控制数据直接写入FIFO,当FIFO的状态为非空时,控制数据直接从FIFO读出;
接收数据时,速率匹配模块根据FIFO状态进行速率匹配的打孔操作具体如下:所述速率匹配模块在检测到FIFO几乎满时,在检测到写入数据为AlignP基元或无用的扰码序列时,控制不写入FIFO中,即写入数据中去掉AlignP基元或无用的扰码序列;接收数据时,速率匹配模块根据FIFO状态进行速率匹配的插入操作具体如下:所述速率匹配模块在检测到FIFO几乎空时,在读出的FIFO数据中插入AlignP基元,控制不读取FIFO。
优选的,所述CRC计算和校验模块针对介于SOFP基元和EOFP基元的帧数据进行CRC计算和校验;
所述CRC计算和校验模块采用CRC32的多项式进行计算;
CRC多项式为:
G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1;
所述数据加扰和解扰模块针对介于SOFP基元和EOFP基元的帧数据和CRC计数值进行加扰和解扰;
所述数据加扰和解扰模块为32位并行模块,并行处理32位数据的加扰和解扰控制;
所述数据加扰和解扰模块的生成多项式为:
G(X)=X16+X15+X13+X4+1。
优选的,所述CRC计算值的初始值为0x52325032;CRC计算和校验模块具有同步置位和使能控制功能,置位时输出为0x0,使能拉低时输出为当前计算值;
所述数据加扰和解扰模块加扰的初始值为0xF0F6;所述数据加扰和解扰模块具有同步置位和使能控制功能,置位时输出为0x0,使能拉低时输出为当前加扰值。
优选的,所述ROM模块存储的加扰多项式计算值的长度为256个时钟周期。
优选的,还包括多路选择器模块,多路选择器模块接收基元检测和控制模块发送的控制信号,基元检测和控制模块、ROM模块以及数据加扰和解扰模块分别将输出的信号对应发送至多路选择器模块各输入通道中;多路选择器模块通过基元检测和控制模块的控制信号控制其中一个输入通道选通,将基元检测和控制模块、ROM模块或数据加扰和解扰模块输出的信号传送至给SATA物理层模块。
本发明的第二目的通过下述技术方案实现:一种基于上述控制器实现的基于FPGA的SATA接口数据流控制方法,包括发送帧时数据流控制过程和接收帧时数据流控制过程;
所述发送帧时数据流控制过程具体步骤如下:
S11、基元检测和控制模块发送两个时钟周期的X_RDYp基元至SATA物理层模块,由SATA物理层模块将两个时钟周期的X_RDYp基元发送至从设备,通知从设备准备接收帧数据;接着ROM模块输出对应扰码;
S12、基元检测和控制模块检测到从设备发送的R_RDYp基元后,表明从设备已经准备好接收帧数据,此时基元检测和控制模块发送一个时钟周期SOFP基元至SATA物理层模块,由SATA物理层模块将一个时钟周期的SOFP基元发送至从设备;随后需要发送的帧数据通过CRC计算和校验模块加入CRC计算值以及通过数据加扰和解扰模块加扰后发送至SATA物理层模块,由SATA物理层模块发送至从设备;
其中基元检测和控制模块针对于进入SATA物理层的数据流每隔256个时钟周期插入2个时钟周期的AlignP基元;ROM模块输出加扰多项式计算值针对于进入SATA物理层模块的CONTP基元之前的重复基元进行加扰得到基元对应的扰码;
S13、帧数据完成发送后,基元检测和控制模块发送一个时钟周期的EOFp基元至SATA物理层模块,由SATA物理层模块发送至从设备,并在之后发送WTRMp基元至SATA物理层模块,通过SATA物理层模块发送WTRMp基元及其对应的扰码至从设备,等待CRC校验状态基元的返回,帧数据传输过程中若基元检测和控制模块检测到R_IPp基元,则表示从设备接收数据正常,若基元检测和控制模块检测到CRC校验状态基元为R_OKP基元,表明从设备接收的数据正确,若基元检测和控制模块检测到CRC校验状态基元为R_ERRP基元,表明从设备接收的数据错误;
S14、进入空闲状态,基元检测和控制模块发送SYNCP基元至SATA物理层模块,通过SATA物理层模块发送SYNCP基元及其对应的扰码至从设备;基元检测和控制模块在接收到SYNCP基元后,表明从设备也进入空闲状态;
所述接收帧时数据流控制过程具体步骤如下:
S21、SATA物理层模块接收从设备发送的数据,并且发送给速率匹配模块,当基元检测和控制模块通过速率匹配模块接收到从设备发送的X_RDYp基元时,发送R_RDYp基元至SATA物理层模块,通过SATA物理层模块发送R_RDYp基元及其对应的扰码至从设备,表明已经准备好接收帧数据;当基元检测和控制模块通过速率匹配模块接收到SOFP基元时,表明接下来将接收到帧数据,基元检测和控制模块控制数据选通模块将帧数据发送给数据加扰和解扰模块进行解扰,将无用的扰码序列进行丢弃,数据加扰和解扰模块解扰后的数据通过CRC计算和校验模块进行校验;接收帧数据的过程中基元检测和控制模块反馈从设备R_IPp基元响应从设备接收状态为正常;
S22、基元检测和控制模块接收到EOFp基元时,表示帧数据接收完成,基元检测和控制模块根据CRC校验状态,通过SATA物理层模块发送相应基元至从设备:当CRC校验状态为正确时,则通过SATA物理层模块发送R_IPp基元至从设备;当CRC校验状态为不正确时,则通过SATA物理层模块发送R_ERRP基元至从设备;
S23、基元检测和控制模块在接收到从设备发送的SYNCP基元后,表明从设备进入空闲状态,基元检测和控制模块发送SYNCP基元至SATA物理层模块,通过SATA物理层模块发送SYNCP基元及其对应的扰码至从设备;告知进入空闲状态,等待下一帧数据的发送或接收;
其中在步骤S21至S23中,速率匹配模块根据FIFO状态进行速率匹配的打孔或插入操作,其中在打孔操作时写入数据中去掉AlignP基元或无用的扰码序列,在插入操作时在读出的FIFO数据中插入AlignP基元;速率匹配模块将发送的数据时分为两路,一路数据发送给基元检测和控制模块,另一路数据发送给数据选通模块,基元检测和控制模块判断速率匹配模块发送的数据是帧数据还是无用的扰码序列,并且根据数据状态发送控制信号至数据选通模块;数据选通模块接收基元检测和控制模块发送的控制信号,当基元检测和控制模块判断速率匹配模块发送的数据是帧数据时,控制数据选通模块将帧数据发送给数据加扰和解扰模块进行解扰;当基元检测和控制模块判断速率匹配模块发送的数据是无用的扰码序列时,控制数据选通模块将无用的扰码序列丢弃。
优选的,ROM模块输出加扰多项式计算值针对于进入SATA物理层模块的CONTP基元之前的重复基元进行加扰的具体过程如下:针对于CONTP基元之前的重复基元,从地址0开始读取ROM模块中的加扰多项式计算值,将各地址对应的加扰多项式计算值分别与CONTP基元之前的重复基元进行异或得到基元对应的扰码。
优选的,在接收帧时数据流控制过程还包括以下步骤:速率匹配模块在收到数据时检测FIFO的状态,当FIFO的状态为非满时,控制数据直接写入FIFO,当FIFO的状态为非空时,控制数据直接从FIFO读出;
接收数据时,速率匹配模块根据FIFO状态进行速率匹配的打孔操作具体如下:所述速率匹配模块在检测到FIFO几乎满时,在检测到写入数据为Align基元或无用的扰码序列时,控制不写入FIFO中;
接收数据时,速率匹配模块根据FIFO状态进行速率匹配的插入操作具体如下:所述速率匹配模块在检测到FIFO几乎空时,在读出的FIFO数据中插入AlignP基元,控制不读取FIFO。
优选的,发送数据流时,若AlignP基元插入前发送的是重复基元对应的扰码,则在插入2个时钟周期的AlignP基元之后,恢复发送插入AlignP基元之前要发送的基元,并在之后发送该基元对应的扰码。
本发明相对于现有技术具有如下的优点及效果:
(1)本发明通过基元检测和控制模块实现对基元的有效控制,在链路层发送数据时通过基元检测和控制模块针对数据流进行AlignP基元的插入,以满足SATA协议每隔256个时钟周期要插入两个时钟周期AlignP基元的要求,在链路层接收数据时速率匹配模块根据FIFO状态通过针去掉AlignP基元或无用的扰码序列实现打孔操作,通过插入AlignP基元实现插入操作,这种速率匹配方法简单有效的实现了SATA协议的数据流速率匹配,有效解决了由于主机和从设备时钟频偏的时间积累造成接收端的FIFO溢出的问题,并且能够有效消除因为打孔或插入操作对数据接收完整性产生的影响,降低实现SATA接口采用专用芯片或对专用IP的依赖,简单有效的实现对SATA协议的基元控制和数据流的速率匹配。
(2)本发明通过ROM模块输出加扰多项式计算值针对重复的基元进行加扰,简化了SATA协议链路层和物理层的数据流控制的实现,解决了现有技术中未对重复基元进行处理起来要考虑的状态繁多以及容易出错的技术问题。其中本发明通过ROM模块固定存储一个一定长度的加扰多项式计算值,仅通过该加扰多项式计算值异或需要加扰的对应基元实现各重复基元的加扰,能省掉基元加扰的计算和控制过程,简化设计。
(3)数据流中,根据SATA协议要求,发送端进入物理层的数据每隔256个时钟周期要插入两个时钟周期的AlignP基元,确保接收侧数据能对齐。同时,SATA协议建议重复基元的加扰在发送一段时间后要有恢复重发基元的过程,为了确保传输总线上的状态确定,避免发送端发送基元对应的扰码时间过长,接收侧长时间检测不到基元的问题。本发明两个需求,当发送基元对应的扰码遇到需要插入两个时钟周期的AlignP基元的情况时,固定在插入的AlignP基元后面恢复发送扰码加扰之前对应的基元,再发送基元对应的扰码,这样由于两个需求控制的长度都是256个时钟周期,可以同时控制,使得AlignP基元出现的位置和基元加扰恢复的控制位置即CONTP基元位置固定,能简化设计。
(4)本发明控制器以FPGA为硬件开发平台,利用FPGA内部逻辑实现SATA接口的数据流控制,其中FPGA能灵活修改和配置,FPGA的高速收发器能很好的支持SATA协议,实现SATA物理层。
附图说明
图1是本发明控制器结构框图。
图2是本发明控制器中速率匹配模块控制流程图。
图3a是现有技术中发送的数据流模型
图3b是本发明简化后的数据流模型。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例
本实施例公开了一种基于FPGA的SATA接口数据流控制器,本实施例控制器以FPGA为硬件开发平台,利用FPGA内部逻辑实现SATA接口的数据流控制,本实施例采用Altera公司的Arria V系列器件5AGXFB3H4F35C4作为FPGA硬件开发平台,器件提供362K的LE资源,1726个M10K的存储块,24个高达6.5536Gbps的收发器。
如图1所示,本实施例控制器包括基元检测和控制模块、速率匹配模块、ROM模块、CRC计算和校验模块、数据加扰和解扰模块、数据选通模块、SATA物理层模块以及多路选择器模块。
基元检测和控制模块发送基元信号至SATA物理层模块,用于SATA协议基元的检测以及基元的交互应答处理,并且针对进入SATA物理层的数据流每隔256个时钟周期插入2个时钟周期的AlignP基元;所述基元检测和控制模块分别发送控制信号至CRC计算和校验模块、数据加扰和解扰模块以及数据选通模块,用于对数据加扰和解扰模块、CRC计算和校验模块以及数据选通模块进行使能控制。
ROM模块存储一个一定长度的加扰多项式计算值,用于实现重复基元的加扰;对于进入SATA物理层模块需要加扰的重复基元,其扰码值是从ROM模块以0地址起始按递增方式读出的加多项式计算值异或该基元后的结果。在本实施例中ROM模块存储的加扰多项式计算值的长度为256个时钟周期。
CRC计算和校验模块,在发送帧时用于计算CRC值并且将CRC值置于数据最后;在接收帧时,用于针对解扰后的帧进行CRC校验;
本实施例中CRC计算和校验模块针对介于SOFP基元和EOFP基元的帧数据进行CRC计算和校验;
所述CRC计算和校验模块采用CRC32的多项式进行计算;
CRC多项式为:
G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1。
其中本实施例中CRC计算值的初始值为0x52325032;CRC计算和校验模块具有同步置位和使能控制功能,置位时输出为0x0,使能拉低时输出为当前计算值。
数据加扰和解扰模块,在发送帧时用于对包括CRC值的帧进行加扰,加扰后的数据发送给SATA物理层模块;在接收帧时,用于对接收到的帧进行解扰。
本实施例中数据加扰和解扰模块针对介于SOFP基元和EOFP基元的帧数据进行加扰和解扰;数据加扰和解扰模块为32位并行模块,并行处理32位数据的加扰和解扰控制。
数据加扰和解扰模块的生成多项式为:
G(X)=X16+X15+X13+X4+1。
其中本实施例中数据加扰和解扰模块加扰的初始值为0xF0F6;数据加扰和解扰模块具有同步置位和使能控制功能,置位时输出为0x0,使能拉低时输出为当前加扰值。
SATA物理层模块包括发送数据模块和接收数据模块,用于8B/10B编码解码、串并和并串转换、逗点序列检测,预加重、线性均衡功能以及带外控制;其中发送数据模块接收来自基元检测和控制模块、ROM模块以及数据加扰和解扰模块发送的信号,经过8B/10B编码、并串转换以及预加重控制后发送到从设备;接收数据模块接收从设备发送的数据,经过线性均衡器、恢复时钟、串并转换、逗点序列检测以及8B/10B解码后发送给速率匹配模块。
速率匹配模块接收SATA物理层模块发送的数据,速率匹配模块发送数据至基元检测和控制模块以及数据选通模块,通过基元检测和控制模块判断速率匹配后的数据是帧数据(SOFP基元和EOFP基元之间帧的内容,以下帧数据均是此含义)还是无用的扰码序列;速率匹配模块采用FIFO结构,接收数据时,速率匹配模块根据FIFO状态进行速率匹配的打孔或插入操作,其中在打孔操作时,写入数据中去掉AlignP基元或无用的扰码序列,在插入操作时,在读出的FIFO数据中插入AlignP基元;
本实施例中速率匹配模块在收到数据时检测FIFO的状态,当FIFO的状态为非满时,控制数据直接写入FIFO,当FIFO的状态为非空时,控制数据直接从FIFO读出。
如图2所示,接收数据时,本实施例速率匹配模块根据FIFO状态进行速率匹配的打孔操作具体如下:速率匹配模块在检测到FIFO几乎满时,说明不同源的两个时钟中的写入数据的时钟速率大于读出数据的时钟速率,即接收数据的恢复时钟大于发送数据的发送时钟,在检测到写入数据为AlignP基元或无用的扰码序列时,控制不写入FIFO中,即写入数据中去掉为AlignP基元或无用的扰码序列。
如图2所示,接收数据时,本实施例速率匹配模块根据FIFO状态进行速率匹配的插入操作具体如下:速率匹配模块在检测到FIFO几乎空时,说明不同源的两个时钟中的写入数据的时钟速率小于读出数据的时钟,即接收数据的恢复时钟小于发送数据的发送时钟,在读出的FIFO数据中插入AlignP基元,控制不读取FIFO。
数据选通模块接收基元检测和控制模块发送的控制信号,当基元检测和控制模块判断速率匹配模块发送的数据是帧数据时,控制数据选通模块将帧数据发送给数据加扰和解扰模块进行解扰;当基元检测和控制模块判断速率匹配模块发送的数据是无用的扰码序列时,控制数据选通模块将无用的扰码序列junk丢弃,其中无用的扰码序列指的是对基元加扰后的序列,这些序列不对控制产生影响。
多路选择器模块,多路选择器模块接收基元检测和控制模块发送的控制信号,基元检测和控制模块、ROM模块以及数据加扰和解扰模块分别将输出的信号对应发送至多路选择器模块各输入通道中,多路选择器模块通过基元检测和控制模块的控制信号控制其中一个输入通道选通,将基元检测和控制模块、ROM模块或数据加扰和解扰模块输出的信号传送至给SATA物理层模块。
本实施例中多路选择器模块包括两个2选1多路选择器模块,分别为第一多路选择器模块和第二多路选择器模块,其中基元检测和控制模块以及ROM模块输出的信号分别发送至第一多路选择器模块的两个输入通道,第一多路选择器模块输出通道输出的信号以及基元检测和控制模块输出的信号分别发送至第二多路选择器模块的两个输入通道,第二多路选择器模块输出通道输出的信号发送至SATA物理层模块。基元检测和控制模块发送控制信号至第一多路选择器模块和第二多路选择器模块,控制第一多路选择器模块和第二多路选择器模块的工作状态,以实现将基元检测和控制模块、ROM模块或数据加扰和解扰模块输出的信号传送SATA物理层模块。
本实施例还公开了一种基于上述流控制器实现的基于FPGA的SATA接口数据流控制方法,包括发送帧时数据流控制过程和接收帧时数据流控制过程;在本实施例中SATA接口直接连接硬盘,硬盘作为从设备;而本实施例中控制器作为主机。
其中发送帧时数据流控制过程具体步骤如下:
S11、基元检测和控制模块发送两个时钟周期的X_RDYp基元至SATA物理层模块,由SATA物理层模块将两个时钟周期的X_RDYp基元发送至从设备,通知从设备准备接收帧数据;接着ROM模块输出对应加扰多项式计算值;
S12、基元检测和控制模块检测到从设备发送的R_RDYp基元后,表明从设备已经准备好接收帧数据,此时基元检测和控制模块发送一个时钟周期SOFP基元至SATA物理层模块,由SATA物理层模块将一个时钟周期的SOFP基元发送至从设备;随后需要发送的帧数据通过CRC计算和校验模块加入CRC值以及通过数据加扰和解扰模块加扰后发送至SATA物理层模块,由SATA物理层模块发送至从设备;
其中基元检测和控制模块针对于进入SATA物理层的数据流每隔256个时钟周期插入2个时钟周期的AlignP基元;ROM模块输出加扰多项式计算值针对于进入SATA物理层模块的CONTP基元之前的重复基元进行加扰,具体加扰过程如下:针对于每个CONTP基元之前的重复基元,从地址0开始读取ROM模块中的加扰多项式计算值,将各地址对应的加扰多项式计算值分别与CONTP基元之前的重复基元进行异或得到基元对应的扰码。
S13、帧数据和CRC值完成发送后,基元检测和控制模块发送一个时钟周期的EOFp基元至SATA物理层模块,由SATA物理层模块发送至从设备,并在之后发送WTRMp基元至SATA物理层模块,通过ROM模块输出加扰多项式计算值异或WTRMp基元得到WTRMp基元对应的扰码,然后SATA物理层模块发送WTRMp基元以及WTRMp基元对应的扰码至从设备,等待CRC校验状态基元的返回,数据传输过程中若基元检测和控制模块检测到R_IPp基元,则表示从设备接收数据正常,若基元检测和控制模块检测到CRC校验状态基元为R_OKP基元,表明从设备接收的数据正确,若基元检测和控制模块检测到CRC校验状态基元为R_ERRP基元,表明从设备接收的数据错误。
S14、进入空闲状态,基元检测和控制模块发送SYNCP基元至SATA物理层模块,通过ROM模块输出加扰多项式计算值异或SYNCP基元得到SYNCP基元对应的扰码,然后SATA物理层模块发送SYNCP基元以及SYNCP基元对应的扰码至从设备;基元检测和控制模块在接收到SYNCP基元后,表明从设备也进入空闲状态。
本实施例中,发送的数据流中,若AlignP基元插入前发送的是重复基元对应的扰码,则在插入2个时钟周期的AlignP基元之后,恢复发送插入AlignP基元之前要发送的基元,并在之后发送该基元对应的扰码。
其中接收帧时数据流控制过程具体步骤如下:
S21、SATA物理层模块接收从设备发送的数据,并且发送给速率匹配模块,当基元检测和控制模块通过速率匹配模块接收到从设备发送的X_RDYp基元时,发送R_RDYp基元至SATA物理层模块,通过ROM模块输出加扰多项式计算值异或R_RDYp基元得到R_RDYp基元对应的扰码,然后通过SATA物理层模块发送R_RDYp基元及R_RDYp基元对应的扰码至从设备,表明已经准备好接收帧数据;当基元检测和控制模块通过速率匹配模块接收到SOFP基元时,表明接下来将接收到帧数据,基元检测和控制模块控制数据选通模块将帧数据发送给数据加扰和解扰模块进行解扰,将无用的扰码序列进行丢弃,数据加扰和解扰模块解扰后的数据通过CRC计算和校验模块进行校验;传输过程中基元检测和控制模块反馈从设备R_IPp基元响应从设备接收状态为正常。
S22、基元检测和控制模块接收到EOFp基元时,表示帧数据接收完成,基元检测和控制模块根据CRC校验状态,通过SATA物理层模块发送相应基元至从设备,当CRC校验状态为正确时,则通过SATA物理层模块发送R_IPp基元至从设备,当CRC校验状态为不正确时,则通过SATA物理层模块发送R_ERRP基元至从设备。
S23、基元检测和控制模块在接收到从设备发送的SYNCP基元后,表明从设备进入空闲状态,基元检测和控制模块发送SYNCP基元至SATA物理层模块,通过ROM模块输出加扰多项式计算值异或SYNCP基元得到SYNCP基元对应的扰码,然后通过SATA物理层模块发送SYNCP基元及其对应的扰码至从设备;告知进入空闲状态,等待下一帧数据的发送或接收。
其中在步骤S21至S23中,速率匹配模块根据FIFO状态进行速率匹配的打孔或插入操作,其中在打孔操作时写入数据中去掉AlignP基元或无用的扰码序列,在插入操作时在读出的FIFO数据中插入AlignP基元;速率匹配模块将发送的数据时分为两路,一路数据发送给基元检测和控制模块,另一路数据发送给数据选通模块,基元检测和控制模块判断速率匹配模块发送的数据是帧数据还是无用的扰码序列,并且根据数据状态发送控制信号至数据选通模块;数据选通模块接收基元检测和控制模块发送的控制信号,当基元检测和控制模块判断速率匹配模块发送的数据是帧数据时,控制数据选通模块将帧数据发送给数据加扰和解扰模块进行解扰;当基元检测和控制模块判断速率匹配模块发送的数据是无用的扰码序列时,控制数据选通模块将无用的扰码序列丢弃。
在接收数据时数据流控制过程还包括以下步骤:速率匹配模块在收到数据时检测FIFO的状态,当FIFO的状态为非满时,控制数据直接写入FIFO,当FIFO的状态为非空时,控制数据直接从FIFO读出。
接收数据时,速率匹配模块根据FIFO状态进行速率匹配的打孔操作具体如下:所述速率匹配模块在检测到FIFO几乎满时,在检测到写入数据为AlignP基元时,控制不写入FIFO中。
接收数据时,速率匹配模块根据FIFO状态进行速率匹配的插入操作具体如下:速率匹配模块在检测到FIFO几乎空时,在读出FIFO的数据中插入AlignP基元,控制不读取FIFO。
本实施例基元检测和控制模块实现对基元的有效控制,在发送数据时通过基元检测和控制模块针对数据流进行AlignP基元的插入,在接收数据时速率匹配模块根据FIFO状态针去掉AlignP基元或插入AlignP基元以对应实现打孔或插入操作,相比现有技术中依赖于FPGA实现速率匹配打孔和插入操作,本实施例速率匹配方法简单有效的实现对SATA协议的数据流速率匹配,有效解决了由于主机和从设备时钟频偏的时间积累造成接口的FIFO溢出的问题。由于本实施例在速率匹配时针对AlignP基元进行插入和去掉的处理不会对接收到的原数据产生任何影响,因此能够有效消除因为打孔或插入操作对数据接收完整性产生的影响,降低实现SATA接口采用专用芯片或对专用IP的依赖。
本实施例通过ROM模块输出加扰多项式计算针对重复的基元进行加扰,简化了SATA协议链路层和物理层的数据流控制的实现,解决了现有技术中对重复基元进行处理起来要考虑的状态繁多以及容易出错的技术问题。其中本实施例通过ROM模块固定存储一个256个时钟周期的加扰多项式计算值,仅通过该加扰多项式计算值实现各重复基于的加扰,能省掉基元加扰的计算和控制过程,简化设计。
根据SATA协议要求,发送端进入物理层的数据每隔256个时钟周期要插入两个时钟周期的AlignP基元,确保接收端数据能对齐。同时,SATA协议建议重复基元的加扰在发送一段时间后要有恢复重发基元的过程,为了确保传输总线上的状态确定,避免发送端发送基元对应的扰码时间过长,接收侧长时间检测不到基元的问题。本实施例结合两个需求,规定ROM存储多项式计算值的长度也为256个时钟周期,当发送基元对应的扰码遇到需要插入两个时钟周期的AlignP基元的情况时,固定在插入的AlignP基元后面恢复发送扰码加扰之前对应的基元,再发送基元对应的扰码,这样由于两个需求控制的长度都是256个时钟周期,可以同时控制,使得AlignP基元出现的位置和基元加扰恢复的控制位置即CONTP基元位置固定,实现了数据流的简化。如图3a所示,是现有技术中现有技术中发送的数据流模型,如图3b所示,是进行本实施例简化后的数据流模型,如图3b所示为当基元检测和控制模块发送大于2个时钟周期的PRIM1基元时,在输出PRIM1基元2个时钟周期后加CONTP基元,表示基元检测和控制模块重复发送CONTP之前的PRIM1基元,ROM模块输出加扰多项式计算值和CONTP之前的重复基元PRIM1基元进行异或运算,具体为从地址0开始读取ROM模块中的加扰多项式计算值,将各地址对应的加扰多项式计算值分别与CONTP基元之前的重复基元PRIM1基元进行异或得到对应基元的加扰数据,即如图3b所示的XXXX表示,其中图3b所示的CONT即为CONTP基元,PRIM2基元表示的是另一发送的基元。当基元对应的扰码序列中要插入AlignP时,本实施例简化后的数据流会在插入AlignP基元后接着恢复发送两个时钟周期PRIM1基元和CONTP基元,再从地址0开始读取ROM模块中的加扰多项式计算值,异或对应基元后输出。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。