具体实施方式
为了更清楚地说明本发明实施例的技术方案,下面将结合附图对本发明的实施例进行详细的介绍,下面的描述仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些实施例获得本发明的其他的实施方式。
为了便于理解本发明实施例的技术方案,如图4所示,首先以一帧数据的传输为例,对本发明实施例中提供的数据发送方和数据接收方之间的数据传输过程进行介绍,主要包括如下步骤:
步骤A:发送方准备好发送FIS数据,向接收方发送X_RDYp,在发送两次以后,采用CONTp来替代,后面带无效数据。X_RDYp和CONTp都为原语,下述表1对常用的原语进行了描述:
表1
原语 |
相关描述 |
ALIGNp |
用来进行数据对齐的原语 |
CONTp |
重复先前的原语,在收到一个非ALIGNp原语之前和CONTp之间的数据都无效 |
EOFp |
帧结束标志原语 |
HOLDp |
发送方表明希望开始流控的请求原语 |
HOLDAp |
接收方应答发送方的流控请求原语 |
R_IPp |
接收方表明当前正在接收数据 |
R_OKp |
接收方表明本次帧接收正常,没有出现错误 |
R_ERRp |
接收方表明本次帧接收不正常,出现错误 |
R_RDYp |
接收方表明已经准备好,可以开始接收数据 |
SOFp |
发送方发送帧的帧头 |
SYNCp |
接收方和发送方进行同步的原语 |
WTRMp |
发送方表明帧已经发送完成,等待接收方返回接收状态 |
X_RDYp |
发送方表明发送准备好,准备发送帧 |
DMATp |
接收方表明要提前终止本次帧 |
步骤B:接收方表明自己准备好,向发送方发送R_RDYp,在发送两次以后,采用CONTp来替代,后面带无效数据;图4中的XXXX表示发送方或接收方当前未发送数据。
步骤C:发送方收到R_RDYp以后,向接收方发出帧头SOFp、以及帧数据DATA,接收方向发送方发送R_IPp,表明接收正在进行;
步骤D:发送方暂时无法进行数据发送,同时帧没有结束,就向接收方发出HOLDp,在发送两次以后,采用CONTp来替代,后面带无效数据,表明希望开始流控;
步骤E:接收方收到流控请求,发送HOLDAp来确认应答,在发送两次以后,采用CONTp来替代,后面带无效数据,表明应答发送方的流控请求;当发送方能重新开始数据传输的时候,首先发送一个非ALIGNp原语(如,HOLDp)来唤醒先前的CONTp,然后把余下的数据发送完成;
步骤F:发送方发送CRC和帧结束标志EOFp;随后发出WTRMp,表明发送完成,在发送两次WTRMp以后,采用CONTp来替代,后面带无效数据,等待接收方对该帧的接收确认;接收方确认帧无误后发送R_OKp表明本次帧传输正常;
步骤G:发送方收到R_OKp以后,发送SYNCp来和接收方进行同步,进入总线空闲,直到接收方回应SYNCp。
本发明实施例一提供的原语处理方法,如图5所示,该方法包括:
步骤51:数据接收方判断当前接收到的数据是否为ALIGNp原语,若是,丢弃该ALIGNp原语,若否,存储该数据;
数据接收方可事先存储匹配项,该匹配项包含了ALIGNp原语的专有信息,例如,可以是ALIGNp原语的代码,当接收到数据后,数据接收方比较接收到的数据与该匹配项是否相同,若相同,说明接收到的数据为ALIGNp原语,则丢弃该ALIGNp原语;若不同,说明接收到的数据不是ALIGNp原语,是进行CRC校验时必需的数据,存储该数据。但不限于此,包括任何相似或相关判断数据为ALIGNp原语的方法。
在SATA系统中,数据接收方每收到一个DWord数据,判读该DWord数据是否为ALIGNp原语,例如,当接收到DWord数据为帧数据DATA时,数据接收方判断出该帧数据DATA不是ALIGNp原语,存储该帧数据DATA。
步骤52:数据接收方读取当前已存储的数据,确定期望循环冗余码校验码CRC。
由于已存储的数据中,已经剔除了随机插入的ALIGNp原语,确保了帧结束标志EOFp之前的数据一定是CRC,从而能够根据EOFp准确确定期望CRC。
由于数据接收方对接收到的数据的存储和读取是同时且连续进行的,进一步的,为了保证能够正常读取数据,在读取数据之前,如图6所示,还包括:
步骤53:数据接收方确定已存储的数据不小于两个DWord或者数据接收方确定已存储的数据为一个DWord且为帧结束标志EOFp时,执行数据读取。即只有满足了该项条件数据接收方才有效读使能信号,进行数据读取。
由于在SATA系统中,数据接收方对存储的每个DWord数据,按照数据读取周期依次顺序读取,为了保证数据读取的正常进行,当存储的数据只剩一个时不进行数据读取,但若存储的数据只剩一个却为EOFp时,即表示一个FIS数据传输完毕,读取该EOFp。
为了能够确定出存储的数据为EOFp,数据接收方需要设置帧尾标识,以指示存储的数据为EOFp,即当存储的数据只剩一个,且根据该帧尾标识判断出该数据为EOFp,读取EOFp。
由于在步骤51中当接收到ALIGNp原语时,丢弃了该ALIGNp原语,按照SATA协议,丢弃ALIGNp对LINK是没有影响的,接收通道及LINK状态机都可保持在当前状态,不进行任何其他操作。但丢弃该ALIGNp原语,会导致接收通道出现一个工作周期(cycle)的空闲,即这段时间中没有进行数据存储,由于数据的存储和读取都是连续进行的,从而数据接收方无法读取数据。
进一步的,当数据接收方判断当前接收到的数据为ALIGNp原语,丢弃该ALIGNp原语时,还包括:
步骤54:数据接收方暂停数据读取,延时一个数据读取周期后,重新执行数据读取。
若数据接收方当前接收到了ALIGNp原语,并进行了剔除,数据接收方无效读使能信号,即暂停数据读取,等到下一个数据读取周期到来时,再进行数据读取。
进一步的,当数据接收方确定期望循环冗余码校验码CRC,数据接收方将所述期望CRC与根据已存储的数据计算出的CRC进行比较,对接收到的数据进行校验。
由于在SATA系统中数据发送方和数据接收方进行数据传输时,会使用多种标志原语以控制数据的传输,CONTp跟在不同的原语后面就有不同的含义,如上述表1中的HOLDp、R_Okp、R_ERRp、R_RDYp、SYNCp、WTRMp、X_RDYp等原语,在进行状态处理的时候需要明确CONTp代表的不同含义,进一步的,本发明实施例一还包括:
数据接收方或数据发送方根据接收到的原语,调整相应的原语标识位的状态,以指示数据传输状态;其中,数据接收方或数据发送方分别设置有原语标识位。
可为每一个需要进行状态标识的原语都设置原语标识位,下面以任一原语,即第一原语为例,说明本发明实施例一提供的调整原语标识位的具体方法:
数据接收方或数据发送方接收到第一原语时,将第一原语的原语标识位调整为有效;或者,
数据接收方或数据发送方接收到第二原语时,将第一原语的原语标识位调整为无效,其中,所述第一原语为数据接收方或数据发送方上次所接收到的原语,所述第二原语为与所述第一原语不同的原语,且所述第二原语不包括CONTp原语和ALIGNp原语;或者,
数据接收方或数据发送方接收到CONTp时,保持所述原语标识位当前的状态。
数据接收方或数据发送方可以根据接收到的原语的情况具体选择上述的一个或多个调整方式,其中,可通过将原语标识位置为高电平(如,置1)的方式有效原语标识位,可通过将原语标识位置为低电平(如,置0)的方式无效原语标识位。
上述调整方法的具体实现方式有多种,以调整数据接收方为HOLDp设置的原语标识位(hold_rx_flag)为例,说明本发明实施例一提供的具体处理方式。首先,对相关的控制信号进行说明,如表2所示。
表2
信号名称 |
位宽 |
描述 |
cont_rx_en |
1 |
表明收到CONTp原语 |
data_scr_dis |
1 |
表明此时收到的数据是跟在CONTp原语之后,无效数据,不需要进行解扰 |
pri_rx_en |
1 |
表明收到原语 |
link_df_fifo_rinc_ff1 |
1 |
接收方的读使能信号 |
hold_rx_flag |
1 |
HOLDp原语的标志位 |
根据表2中的控制信号可获知接收到原语和数据的类型,例如,
当数据接收方的读使能信号link_df_fifo_rinc_ff1有效,并且此时读到的数据的低4位为4’b0001的时候,表明收到原语;当link_df_fifo_rinc_ff1有效,并且读取到的数据是CONTp原语(32’h9999_aa7c)的时候,表明收到了CONTp原语;当data_scr_dis有效但pri_rx_en无效,表明此时收到的都是CONTp之后带的无效数据。
下面对通过一个具体的场景,以调整HOLDp原语的原语标识位为例进行具体描述。
数据发送方请求流控,首先向数据接收方连续发送两个HOLDp原语、CONTp原语,随后发送无效数据,
当数据接收方接收到第一个HOLDp原语后,将HOLDp原语的原语标识位调整为有效;
当数据接收方接收到第二个HOLDp原语后,保持HOLDp原语的原语标识位有效;
当数据接收方接收到CONTp原语后,保持HOLDp原语的原语标识位有效;
其中,当考虑到频差,在发送的帧数据中随机插入ALIGNp原语,数据接收方接收到ALIGNp原语,剔除ALIGNp原语后,将数据接收方的读使能信号link_df_fifo_rinc_ff1无效,暂停数据读取,这时,数据接收方保持HOLDp原语的原语标识位有效。
只有当收到一个与HOLDp不同的原语,且该原语不为ALIGNp或CONTp原语时,即表明先前CONTp所重复的原语HOLDp已经被取消,开始的是新的有效数据时,将HOLDp原语的原语标识位调整为无效。
下面以一个具体的应用场景说明本发明实施例一提供的通过原语标识位,解决CONTp原语多样性的方法,如图7所示。
步骤A:发送方准备发送数据,首先向接收方发出X_RDYp,请求链路建立;
步骤B:接收方收到X_RDYp以后,如果此时能够进行数据接收,就发出R_RDYp,告诉接收方可以开始数据传输;
步骤C:发送方收到R_RDYp以后,开始发送帧头SOFp以及帧数据;
步骤D:在发送过程中,发送方出现暂时无法获取数据的情况,发送HOLDp来向接收方请求开始流控;
步骤E:凑巧的是,此时接收方也刚好不能进行数据接收,也就是说在发送方发送HOLDp的时候,接收方也发出了HOLDp来请求发送方流控。
由于在SATA链路上有一定的时间延迟,此时出现的情况就是,当发送方发送HOLDp等待接收方HOLDAp应答的时候,收到的是接收方发送的HOLDp;当接收方发送HOLDp等待发送方HOLDAp应答的时候,收到的是发送方发送的HOLDp。
步骤F:发送方收到来自接收方的HOLDp后,会将其HOLDp的原语标识位调整为有效;接收方收到来自发送方的HOLDp,也会将其HOLDp的原语标识位调整为有效。当发送方有数据可以发送,开始解除流控的时候,判断接收方的HOLDp标志位还一直有效,那么就开始以HOLDAp应答。
步骤G:当接收方可以开始接收数据的时候,判断发送方的HOLDp标志位还一直有效,就解除流控,开始发送R_IPp,表明可以接收数据;
步骤H:当发送方收到R_IPp的时候,知道接收方解除流控,就重新发起数据传输,并一直发送直到帧尾EOFp发送完成;随后发出WTRMp,表明发送完成,等待接收方对该帧的接收确认;
步骤I:接收方确认帧无误后发送R_OKp表明本次帧传输正常;
步骤J:发送方发送SYNCp来进行两边同步。
上述只对为HOLDp原语设置原语标识位的情况进行了描述,相关内容同样适用于其它原语,如R_Okp、R_ERRp、R_RDYp或SYNCp等,不再赘述。
本发明实施例二提供了一种原语处理装置,如图8所示,该装置包括:
判断处理单元81,用于判断当前接收到的数据是否为ALIGNp原语,若是,丢弃该ALIGNp原语,若否,存储该数据;读取确定单元82,用于读取所述判断处理单元81当前已存储的数据,确定期望循环冗余码校验码CRC。
所述读取确定单元82包括:确定模块,用于确定已存储的数据不小于两个双字DWord或者确定已存储的数据为一个DWord且为帧结束标志EOFp时,执行数据读取。
进一步的,该装置还包括:延时单元,用于当判断出当前接收到的数据为ALIGNp原语,丢弃该ALIGNp原语时,暂停数据读取,延时一个数据读取周期后,重新执行数据读取。
进一步的,该装置还包括:原语标识位调整单元,用于根据接收到原语,调整相应的原语标识位的状态,以指示数据传输状态;其中,数据接收方或数据发送方分别设置有原语标识位。
本发明装置实施例中各功能模块的具体工作方法参见本发明的方法实施例。
本发明实施例提供的技术方案,通过剔除数据中随机插入的ALIGNp原语,利用不含ALIGNp原语的数据确定期望CRC,解决了现有技术中因随机插入ALIGNp原语,在确定期望CRC时带来的问题,能够在无需大量额外寄存器的情况下,稳定且有效地获取期望CRC,以保障数据校验的正确性。
本发明实施例三提供了一种原语处理系统,如图9所示,该系统包括数据发送方91和数据接收方92,
所述数据接收方92,用于判断当前接收到的来自所述数据发送方91的数据是否为ALIGNp原语,若是,丢弃该ALIGNp原语,若否,存储该数据;读取当前已存储的数据,确定期望循环冗余码校验码CRC。
进一步的,所述系统还包括:数据接收方92或数据发送方91根据接收到的原语,调整相应的原语标识位的状态,以指示数据传输状态;其中,数据接收方92或数据发送方91分别设置有原语标识位。
本发明系统实施例中各功能模块的具体工作方法参见本发明的方法实施例。
本发明实施例提供的技术方案,通过剔除数据中随机插入的ALIGNp原语,
利用不含ALIGNp原语的数据确定期望CRC,解决了现有技术中因随机插入ALIGNp原语,在确定期望CRC时带来的问题,能够在无需大量额外寄存器的情况下,稳定且有效地获取期望CRC,以保障数据校验的正确性。
本领域普通技术人员可以理解实现上述实施例中的全部或部分步骤,可以通过程序指令相关硬件完成。所述实施例对应的软件可以存储在一个计算机可存储读取的介质中。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。