基于FPGA的SATA控制器转让专利

申请号 : CN200910089257.8

文献号 : CN101599004B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 苏海冰吴威吴钦章郭帅

申请人 : 中国科学院光电技术研究所

摘要 :

一种基于FPGA的SATA控制器包括:循环冗余校验模块对数据进行循环冗余校验计算;扰码/解扰码模块用于对数据进行扰码/解扰码计算;帧生成模块完成帧的封装;帧发送模块控制帧的发送、暂停、结束;帧接收模块完成帧的解析;寄存器组用来存放控制器的控制、状态信息;用户接口模块分别通过PLB和NPI接口实现处理器和控制器、存储器和控制器之间的信息和数据交换;带外信号控制模块用于控制硬盘上电和硬件复位过程,建立控制器和硬盘之间的通信链接;接口传输率选择模块用于自动选择硬盘的接口传输率;复位模块产生各子模块的复位信号;千兆位级收发器主要完成8B/10B编解码,串并转换,时钟修正等;LED指示模块用于指示硬盘工作状态。

权利要求 :

1.基于FPGA的SATA控制器,特征在于该控制器包括:循环冗余校验模块(1214):在发送帧时,用于计算该帧的第一循环冗余校验值,该第一循环冗余校验值由帧生成模块(1211)置于数据最后作为帧的内容;接收帧时,用于计算经过解扰码后该帧所有数据的第二循环冗余校验值,如果计算得到的第二循环冗余校验值不等于0,则说明数据在传输过程中出现了错误,由帧接收模块(1213)给出帧接收错误信息,如果第二循环冗余校验值等于0,则说明数据在传输过程中没有出现错误,由帧接收模块(1213)给出帧接收正确信息;

扰码/解扰码模块(1215):在发送帧时,用于对发送的原始数据及原始数据的第一循环冗余校验值进行扰码计算;接收帧时,用于对接收帧进行解扰码计算,解出原始数据及原始数据的第一循环冗余校验值;

帧生成模块(1211):完成帧的封装,将发送数据缓冲区(1216)读出来的原始数据分为两路,一路原始数据直接送入循环冗余校验模块(1214)计算第一循环冗余校验值,计算得到的第一循环冗余校验值通过2选1选择器置于原始数据的最后作为帧的内容,计算得到的第一循环冗余校验值与扰码/解扰码模块(1215)的第一输出值进行异或计算得到第一循环冗余校验值对应的扰码值,另一路原始数据经过延时模块(1219)后与扰码/解扰码模块(1215)的第一输出值进行异或计算得到原始数据对应的扰码值,并添加帧头和帧尾封装成帧,最后将封装好的帧写入帧发送缓冲区(1218);

帧发送模块(1212):按照SATA协议的时序和控制要求控制帧的发送、暂停、结束;

帧接收模块(1213):完成帧的解析,将经过延时模块(1219)的接收帧与扰码/解扰码模块(1215)的第二输出值进行异或计算得到接收帧的数据,再将所有数据送入循环冗余校验模块(1214)计算第二循环冗余校验值,同时将数据写入接收数据缓冲区(1217),如果循环冗余校验模块(1214)计算得到的第二循环冗余校验值等于0,则输出帧接收正确信息,如果循环冗余校验模块(1214)计算得到的第二循环冗余校验值不等于0,则输出帧接收错误信息;

寄存器组(128):用于存放SATA控制器(1)的控制信息和状态信息,该寄存器组是软件可读出可写入的;

用户接口模块(11,126):包括PLB和NPI接口,PLB接口实现嵌入式处理器(2)和SATA控制器(1)之间控制信息和状态信息的交换,NPI接口来实现第二片片外存储芯片DDR2(6)和SATA控制器(1)之间数据的交换;

带外信号控制模块(122):用于控制硬盘上电过程和硬件复位过程,从而建立SATA控制器(1)和SATA硬盘(A)之间的通信链接;

接口传输率选择模块(123):用于自动选择硬盘的接口传输率;

复位模块(124),负责产生各个子模块的复位信号,该模块包括控制千兆位级收发器(127)同步及复位的发送同步控制模块和接收同步控制模块;

千兆位级收发器(127):完成SATA协议的物理层,主要功能包括8B/10B编码/解码,串并/并串转换,逗点检测,时钟修正,预侧重和线性均衡;

LED指示模块(125):用于指示硬盘工作状态。

2.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:所述的循环冗余校验模块(1214)为32位并行CRC-32循环冗余校验模块,输出也是32位;该模块具有同步复位、异步复位和输入数据有效使能控制功能;该模块的CRC校验码生成多项式是:G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

CRC-32校验产生器的初始值是0x52325032。

3.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:所述的扰码/解扰码模块(1215)为32位并行模块,输出也是32位;该模块具有同步复位和工作使能控制功能;该模块的生成多项式是:G(x)=x16+x15+x13+x4+1

该模块的初始值是0xF0F6。

4.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:所述的带外信号控制模块(122)和接口传输率选择模块(123)通过动态配置端口对千兆位级收发器(127)的时钟频率进行动态调整,能够自动识别硬盘的接口传输率,完成硬盘的上电过程或硬盘硬件复位,并在SATA硬盘(A)和SATA控制器(1)之间建立通信链接。

5.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:SATA控制器(1)通过电源管理能够降低功耗;SATA控制器(1)中设计有一个看门狗,当看门狗检测到一个比较长的时间没有发送数据时或者上层应用软件要求进入低功耗模式时,SATA控制器(1)就会向SATA硬盘(A)发送命令,使其进入低功耗模式,同时设置千兆位级收发器(127)的低功耗使能端口,使千兆位级收发器(127)进入低功耗模式,禁止千兆位级收发器(127)发送数据,从而降低功耗;当SATA硬盘(A)有数据要发送时或者上层应用软件要求退出低功耗模式时,SATA控制器(1)会重新设置千兆位级收发器(127)的低功耗使能端口,并在SATA硬盘(A)和SATA控制器(1)之间重新建立通信链接,使通信双方都回到正常工作模式。

6.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:寄存器组(128)由32个32比特的寄存器组成,用来存放SATA控制器(1)的控制信息和状态信息,该寄存器组是地址映射的,是软件可读出可写入的。

7.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:LED指示模块(125)控制四个LED,指示硬盘工作状态:LED_0灯亮,表明主机已经识别到硬盘,通信链接已经建立,可以开始传输数据,当硬盘被移除时该灯熄灭;LED_1灯亮表明连接的硬盘的接口传输率是3.0Gbps,LED_1灯熄灭表明连接的硬盘的接口传输率是1.5Gbps;发送数据过程中LED_2灯亮,数据发送完毕后该灯熄灭;接收数据过程中LED_3灯亮,数据接收完毕后该灯熄灭。

8.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:SATA控制器(1)中帧的封装、发送、解析分别由独立的控制模块控制;帧生成模块(1211)完成帧的封装,帧发送模块(1212)控制帧的发送、暂停、结束,帧接收模块(1213)完成帧的解析。

9.如权利要求1所述的基于FPGA的SATA控制器(1),特征在于:SATA控制器(1)中使用三个缓冲区:发送数据缓冲区(1216)、帧发送缓冲区(1218)和接收数据缓冲区(1217);发送数据缓冲区(1216)存放的是原始数据,帧发送缓冲区(1218)存放的是封装好的、待发送的帧,接收数据缓冲区(1217)存放的是接收到的经过解扰码后的数据。

说明书 :

技术领域

本发明涉及满足串行高级技术附件规格(Serial Advanced Technology Attachment,SATA)的控制器的实现,采用大规模现场可编程门阵列(Field Programable Gate Array,FPGA)作为实现平台,实现SATA接口标准,管理和控制符合SATA接口设备的数据传入和传出。

背景技术

在计算机系统中,存储设备都是通过各种接口与计算机相连接,其中,高级技术附件规格(Advanced Technology Attachment,ATA)接口是最常见的接口之一。ATA主要是指硬盘驱动器与计算机的连接规范,可以使用户方便地在PC机上连接硬盘等存储设备,曾是我们最常用的硬盘接口规范。ATA标准从1994年至今共经历了7代标准,2002年最新的ATA-7标准中ATA的最大数据传输速度为133MB/s。在ATA接口发展到100MB/s的时候,这种并行接口的电缆属性、连接器和信号协议都表现出了很大的技术瓶颈,而在技术上突破这些瓶颈存在相当大的难度。新型接口标准的产生也就在所难免。
串行高级技术附件规格(Serial Advanced Technology Attachment,SATA),是指串行ATA接口规范,它是一种完全不同于并行ATA的新型接口类型,因采用串行方式传输数据而知名。SATA是由DELL、IBM、Intel、Maxtor、Quantum,Seagate等公司合作开发用于取代并行ATA接口的技术。
SATA协议借鉴了ISO/OSI和TCP/IP模型的组织方式和对象、服务、层次封装等概念,采用层次化的描述方法,从下向上分别为物理层、链路层、传输层和应用层四层。SATA采用帧作为基本传输单元,支持最大长度达8192字节的帧传输。SATA采用高速串行总线技术,点到点的连接方式使连接设备独享带宽,降低了共享仲裁和配置的复杂性,改善了可扩展性和并发操作能力。SATA具有高带宽、拓扑易扩展、数据完整性、可靠性、存储容量大、支持热拔插等特点。
现代计算机系统中最常用的接口之一就是SATA。与ATA相比,SATA引脚数大大减少,数据带宽更大。第一代SATA接口的数据传输率为150MB/s,第二代SATA接口的数据传输率高达300MB/s,整整比第一代的速度提高了一倍,已经颁布的第三代SATA实现600MB/s的传输率。
SATA的出现是为了取代PATA,其与PATA相比,具有以下几方面优势:
1、在速度上,目前常用的第二代SATA接口的数据传输率高达300MB/s,远高于PATA接口的数据传输率。
2、在传输方式上,SATA硬盘是采用点对点传输协议,使用7芯的数据线,通过低压差分信号进行数据传输,通过将时钟信号嵌入数据中发送等技术,增强信号的抗干扰能力,从而实现高速率的数据传输。
3、SATA的循环冗余校验(Cyclical Redundancy Check,CRC)技术让数据传输也更为安全。由于SATA对传输的指令和数据都进行了CRC校验,从而具备更强的纠错能力,提高了数据传输的可靠性。
4、原生命令队列指令集(Native Command Queuing,NCQ)是SATA硬盘的一项重要新特征,采用第一方DMA对硬盘命令队列进行优化,NCQ能有效提高硬盘读写效率和性能。
5、SATA还具有更轻薄、更灵活的的接线、支持热插拔、功耗更低、安装简便性、有利用减少机箱内部连线和散热、与PATA软件兼容等优点。
为了克服基于专用集成电路的SATA控制装置通用性差,灵活性低,升级困难的不足,同时为了降低功耗,减少PCB(Printed Circuit Board)面积,实现设备小型化,本发明提供一种基于FPGA的SATA控制器。该控制器实现对SATA硬盘及满足SATA协议设备的控制,并且性能高,具有很强通用性和灵活性,方便升级。本发明有利于摆脱对国外核心控制芯片的依赖。

发明内容

基于FPGA的SATA控制器包括:循环冗余校验模块1214,扰码/解扰码模块1215,帧生成模块1211,帧发送模块1212,帧接收模块1213,寄存器组128,用户接口模块11和126,带外信号控制模块122,接口传输率选择模块123,复位模块124,千兆位级收发器127,LED指示模块125。
循环冗余校验模块1214,在发送帧时,用于计算该帧的第一循环冗余校验值,该值由帧生成模块1211置于数据的最后作为帧的内容;接收帧时,用于计算经过解扰码后该帧所有数据(包括接收到的第一循环冗余校验值)的第二循环冗余校验值,如果计算得到的第二循环冗余校验值不等于0,则说明数据在传输过程中出现了错误,由帧接收模块1213给出帧接收错误信息,如果计算得到的第二循环冗余校验值等于0,则说明数据在传输过程中没有出现错误,由帧接收模块1213给出帧接收正确信息。
扰码/解扰码模块1215,在发送帧时,将发送的原始数据及原始数据的第一循环冗余校验值与扰码模块1215的第一输出值进行异或计算得到对应的扰码值;接收帧时,将经过延时模块1219的接收帧与解扰码模块1215的第二输出值进行异或计算得到接收帧的数据。
帧生成模块1211,完成帧的封装,将发送数据缓冲区1216读出来的原始数据分为两路,一路原始数据直接送入循环冗余校验模块1214计算第一循环冗余校验值,计算得到的第一循环冗余校验值通过2选1选择器置于原始数据的最后作为帧的内容,计算得到的第一循环冗余校验值与扰码/解扰码模块(1215)的第一输出值进行异或计算得到第一循环冗余校验值对应的扰码值,另一路原始数据经过延时模块1219后与扰码模块1215的第一输出值进行异或计算得到原始数据对应的扰码值,并添加帧头和帧尾封装成帧(帧的结构图如图10所示),最后将封装好的帧写入帧发送缓冲区1218。
帧发送模块1212,按照SATA协议的时序和控制要求控制帧的发送、暂停、结束。
帧接收模块1213,完成帧的解析,将经过延时模块1219的接收帧与解扰码模块1215的第二输出值进行异或计算得到接收帧的数据,再将所有数据送入循环冗余校验模块1214计算第二循环冗余校验值,同时将数据写入到接收数据缓冲区1217;如果循环冗余校验模块1214计算得到的第二循环冗余校验值等于0,则输出帧接收正确信息,如果循环冗余校验模块1214计算得到的第二循环冗余校验值不等于0,则输出帧接收错误信息。
寄存器组128由32个32比特的寄存器组成,用来存放SATA控制器1的控制信息和状态信息,该寄存器组是地址映射的,是软件可读出可写入的。
用户接口模块11和126,包括PLB和NPI(Native Port Interface)接口,PLB接口实现嵌入式处理器2和SATA控制器1之间控制信息和状态信息的交换;NPI接口来实现第二片片外存储芯片DDR2 6和SATA控制器1之间数据的交换。
带外信号控制模块122,用于控制硬盘上电过程和硬盘硬件复位过程,从而建立SATA控制器1和SATA硬盘A之间的通信链接。
接口传输率选择模块123,用于自动选择硬盘的接口传输率。
复位模块124,负责产生各个子模块的复位信号,该模块包括控制千兆位级收发器127同步及复位的发送同步控制模块和接收同步控制模块。发送同步控制模块和接收同步控制模块(由tx_sync_control.vhd和rx_sync_control.vhd实现)分别控制千兆位级收发器127时钟相位同步以及复位信号。
千兆位级收发器127完成SATA协议的物理层,主要功能包括8B/10B编码/解码,串并/并串转换,逗点检测,时钟修正,预侧重和线性均衡等。
LED指示模块125用来指示硬盘工作状态。
方案所述的循环冗余校验模块1214为32位并行CRC-32循环冗余校验模块,一个工作时钟输出一个32位的循环冗余校验值。该模块具有同步复位、异步复位和输入数据有效使能功能,当同步复位或异步复位信号有效时,输出值全是0;当并行输入的32位数据有效时,经过两个工作时钟延时后就输出对应的32位循环冗余校验值。该模块的循环冗余校验码生成多项式是:
G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
CRC32校验产生器的初始值是0x52325032。
方案所述的扰码/解扰码模块1215为32位并行模块,一个工作时钟输出一个32位的扰码值。该模块具有同步复位和工作使能功能,当同步复位有效时,输出值全是0;当工作使能信号有效时,经过一个工作时钟延时后就输出一个32位的扰码。该模块的生成多项式是:
G(x)=x16+x15+x13+x4+1
该模块的初始值是0xF0F6。
方案所述的带外信号控制模块122和接口传输率选择模块123,通过动态配置端口对千兆位级收发器127模块的时钟频率进行动态调整,能够自动识别硬盘的接口传输率,完成硬盘的上电过程或硬件复位过程,并在SATA硬盘A和SATA控制器1之间建立通信链接。
电源和低功耗管理功能,SATA控制器1中设计有一个看门狗,当看门狗检测到一个比较长的时间不发送数据时或者上层应用软件要求进入低功耗模式时,SATA控制器1就会向SATA硬盘A发送命令,使其进入低功耗模式,同时设置千兆位级收发器127的低功耗使能端口,使千兆位级收发器127进入低功耗模式,禁止千兆位级收发器发送数据,从而降低功耗;当SATA硬盘A有数据要发送时或者上层应用软件要求退出低功耗模式时,SATA控制器1会重新设置千兆位级收发器127的低功耗使能端口,并在SATA硬盘A和SATA控制器1之间重新建立通信链接,使通信双方都回到正常工作模式。
方案所述的用户接口模块11和126,包括PLB和NPI接口。其中,PLB接口实现嵌入式处理器PPC4402和SATA控制器1之间控制信息和状态信息的交换。嵌入式处理器PPC440 2通过PLB总线访问寄存器组128中的Error_reg,Command,Status,Device_Control,Alt_status,Device,Sector_Count,Features,LBA_Low,LBA_Mid,LBA_High等一共32个寄存器。NPI接口实现第二片片外存储芯片DDR26和SATA控制器1之间数据的交换。从第二片片外存储芯片DDR2 6中读数据时,NPI接口控制模块126按照NPI接口协议将访问地址、数据长度和控制信号给多端口存储控制器5,在NPI接口控制模块126和多端口存储控制器5的共同控制下,几个时钟周期后第二片片外存储芯片DDR2 6中的数据就经过NPI接口写入发送数据缓冲区1216中;向第二片片外存储芯片DDR2 6中写数据时,NPI接口控制模块126按照NPI接口协议将访问地址、数据长度和控制信号给多端口存储控制器5,然后在NPI接口控制模块126的控制下,接收数据缓冲区1217中的数据经过NPI接口传到多端口存储控制器5,多端口存储控制器5就会将数据存入第二片片外存储芯片DDR2 6中的指定位置。
方案所述的LED指示模块125控制四个LED,指示硬盘工作状态:LED_0灯亮,表明主机已经识别到硬盘,通信链接已经建立,可以开始传输数据,当硬盘被移除时该灯熄灭;LED_1灯亮表明连接的硬盘的接口传输率是3.0Gbps,LED_1灯熄灭表明连接的硬盘的接口传输率是1.5Gbps;发送数据过程中LED_2灯亮,数据发送完毕后该灯熄灭;接收数据过程中LED_3灯亮,数据接收完毕后该灯熄灭。
如图4所示,本发明的方案中,SATA控制器1中帧的封装、发送、解析分别由独立的控制模块控制;帧生成模块1211完成帧的封装,帧发送模块1212控制帧的发送、暂停、结束,帧接收模块1213完成帧的解析。这样的模块化设计可以减小单个模块的规模和调试难度,还有利于提高系统的工作频率和并行性。
如图4所示,本发明的方案中,SATA控制器1中使用三个缓冲区:发送数据缓冲区1216、帧发送缓冲区1218和接收数据缓冲区1217。发送数据缓冲区1216存放的是原始数据,帧发送缓冲区1218存放的是封装好的、待发送的帧,接收数据缓冲区1217存放的是接收到的经过解扰码后的数据。发送数据缓冲区1216可以使不连续的发送数据形成一定长度的持续数据流,便于帧生成模块1211完成帧的封装。帧发送模块1212通过控制帧发送缓冲区1218的读使能信号即可及时控制帧的发送、暂停、结束,控制简单,响应延迟时间短。此外,帧发送缓冲区1218在发送帧的同时发送数据缓冲区1216可以接收数据,并行操作提高了数据的传输效率和性能。
本发明能够获得的技术效果为:
1:一片FPGA就可以实现SATA协议的所有功能,减少了PCB面积,提高了可靠性,使设备更加小型化。
2:该控制器既可以作为主设备控制器又可以作为从设备控制器,既支持第一代SATA接口标准(接口传输率是1.5Gbps)又支持第二代SATA接口标准(接口传输率是3.0Gbps),而且可以自动识别连接的设备是符合第一代SATA接口标准还是第二代SATA接口标准,并选择相应的接口传输率与其建立通信链接。图1是控制器1支持的传输帧类型。
3:在FPGA中实现SATA控制器,通用性好,易升级,易移植,性能高。采用模块化和层次化的设计使得控制器可以移植到不同厂商生产的FPGA上或者一片FPGA中实现多个SATA控制器。
4:支持热拔插和电源、低功耗管理。
图6和图7分别是该控制器连接不同型号SATA硬盘的持续顺序读写性能图,硬盘的接口传输率都是3.0Gbps。需要说明的是不要理解为该控制器的持续数据传输率最高不能够超过120MB/s,因为图2实例中实验数据的测得受到SATA硬盘持续读写速率的限制,而非来自控制器本身。从图6和图7的数据上来看,该控制器在对单个SATA硬盘的持续顺序读控制上,分别达到了硬盘持续读速率极限值的65.1%,97.2%,81.7%;对单个SATA硬盘的持续顺序写控制上,分别达到了硬盘持续写速率极限值的64.7%,72.1%,81.1%。图9是该控制器在XC5VFX130T-2FF1738中资源占用情况,从图9可以看出在XC5VFX130T-2FF1738中实现一个SATA控制器PLB2SATAIP只占用4%左右的可编程逻辑资源,所以在该片FPGA中就可以6到20个同样的SATA控制器,同时与SATA硬盘或者满足SATA协议的设备进行通信。

附图说明

图1是控制器支持的传输帧类型;
图2是基于FPGA的SATA控制器的一个实例结构图;
图3是SATA控制器PLB2SATAIP的结构图;
图4是SATA_CONTROL子模块的结构图;
图5是SATA控制器PLB2SATAIP的硬件描述语言实现模块的层次图;
图6是控制器采用DMA方式持续顺序读不同型号硬盘的平均带宽曲线图;
图7是控制器采用DMA方式持续顺序写不同型号硬盘的平均带宽曲线图;
图8是先向硬盘写数据然后读数据的程序流程图;
图9是XC5VFX130T-2FF1738中实现控制器PLB2SATAIP的资源占用情况一览表;
图10是帧的结构图。
附图标记说明如下:
1--PLB2SATAIP,
2-嵌入式处理器PPC440,
3--PPC440MC_DDR2控制器,
4--第一片片外存储芯片DDR2,
5-多端口存储控制器,
6--第二片片外存储芯片DDR2,
7--网口控制器,
8--串口控制器,
9--通用端口控制器,
A--SATA接口硬盘,
12-UER_LOGIC模块,
11--PLB_IPIF模块,
121--SATA_CONTROL模块,
122--带外信号控制模块,
123-接口传输率选择模块,
124--复位模块,
125-LED指示模块,
126-NPI接口控制模块,
127-千兆位级收发器,
128-寄存器组,
1211--帧生成模块,
1212--帧发送模块,
1213--帧接收模块,
1214--循环冗余校验模块,
1215--扰码/解扰码模块,
1216--发送数据缓冲区,
1217--接收数据缓冲区,
1218--帧发送缓冲区,
1219-延时模块。

具体实施方式

本发明中,SATA协议的应用层由嵌入式处理器PPC440 2来实现,主要完成硬盘的参数配置和读写操作命令。SATA协议的传输层和链路层由SATA_CONTROL模块121来完成,该模块是通过硬件描述语言设计在FPGA中生产相应的电路来实现,参见图3-5。该模块完成帧的封装,帧的发送、暂停、结束控制,帧的解析和校验。SATA协议的物理层由千兆位级收发器127、带外信号控制模块122和接口传输率选择模块123实现。千兆位级收发器127的主要功能包括8B/10B编码/解码,串并/并串转换,逗点检测,时钟修正,预侧重和线性均衡等。带外信号控制模块122和接口传输率选择模块123能够自动识别硬盘的接口传输率,完成硬盘的上电过程或硬件复位过程,并在8ATA硬盘A和SATA控制器1建立通信链接。
参照图5可知PLB2SATAIP分为四个模块plbv46_slave_single.vhd,soft_reset.vhd,interrupt_control.vhd,user_logic.vhd.user_logic.vhd子模块包括NPI_control.vhd,led.vhd,mgt_userclk_source.vhd,tx_sync_control.vhd,rx_sync_control.vhd,oob_control.v,interface_rate_sel.v,sata.vhd,registers.vhd,sata_control.vhd几个部分。sata.vhd还包括sata_tile.vhd模块。sata_control.vhd又包括如下几个子模块:frame_send_fifo.vhd,receive_data_fifo.vhd,send_data_fifo.vhd,frame_send_control.vhd,frame_gen_control.vhd,frame_rvd_control.vhd,crc_module.vhd,scramble.vhd。
plbv46_slave_single.vhd,soft_reset.vhd,interrupt_control.vhd,sata.vhd,sata_tile.vhd五个模块都是XILINX公司提供给用户使用的模块,plbv46_slave_single.vhd主要实现PLB2SATAIP 1的PLB总线接口协议,soft_reset.vhd实现PLB2SATAIP 1的软件复位功能,interrupt_control.vhd负责PLB2SATAIP 1的中断控制。sata.vhd和sata_tile.vhd就是经过配置了的千兆位级收发器127,主要功能包括8B/10B编码/解码,串并/并串转换,逗点检测,时钟修正,预侧重和线性均衡等。其余模块是本发明作者设计、编写的。
结合图2-5对本发明做进一步的描述:
向SATA硬盘A写数据时,NPI接口控制模块126按照NPI接口协议将访问地址,数据长度和控制信号给多端口存储控制器5,在NPI控制模块126和多端口存储控制器5的共同控制下,几个时钟周期后第二片片外DDR2 6中的原始数据就经过NPI接口写入发送数据缓冲区1216中。发送数据缓冲区1216中数据聚集到一定数量时,帧生成模块1211就读出发送数据缓冲区1216的原始数据,读出的原始数据分为两路,一路送给循环冗余校验模块1214计算第一循环冗余校验值,计算得到的第一循环冗余校验值通过2选1选择器置于数据的最后作为帧的内容,计算得到的第一循环冗余校验值与扰码/解扰码模块(1215)的第一输出值进行异或计算得到第一循环冗余校验值对应的扰码值,另一路原始数据经过延时模块1219后与扰码模块1215的第一输出值进行异或计算得到原始数据对应的扰码值,帧头和帧尾在读数据的时候分别写入了帧发送缓冲区1218。帧发送缓冲区1218中存放的是一个完整的、待发送的帧(帧结构如图10所示)。当帧发送缓冲区1218中数据聚集到一定数量时,帧发送模块1212就发送请求原语,然后按照SATA协议的时序控制要求控制帧发送缓冲区1218的读使能,从而控制帧的发送、暂停和结束。帧发送缓冲区1218读出的并行数据送入千兆位级收发器127,经过8B/10B编码,并串转换等处理后变成低压差分信号,该低压差分信号通过TX_N和TX_P端口送到SATA电缆上;
从SATA硬盘A读数据时,SATA电缆上的低压差分信号通过RX_N和RX_P端口进入千兆位级收发器127,经过串并转换,8B/10B解码,逗点检测等处理后变成并行数据并送入帧接收模块1213处理。帧接收模块1213先将经过延时模块1219的接收帧与解扰码模块1215的第二输出值进行异或计算得到接收帧的数据,再将所有数据送入循环冗余校验模块1214计算第二循环冗余校验值,同时将数据写入接收数据缓冲区1217;如果循环冗余校验模块1214计算得到的第二循环冗余校验值等于0,则表示该帧在传输过程中没有发生错误,帧接收模块1213就输出帧接收正确信息;如果计算得到的第二循环冗余校验值不等于0,则表示该帧在传输过程中发生了错误,帧接收模块1213就输出帧接收错误信息。等接收数据缓冲区1217中数据聚集到一定数量时,NPI接口控制模块126按照NPI接口协议将访问地址、数据长度和控制信号给多端口存储控制器5,在NPI控制模块126的控制下,接收数据缓冲区1217中的数据就经过NPI接口传入多端口存储控制器5,多端口存储控制器5就会将数据存入第二片片外DDR2 6中的指定位置。
本实施案例的FPGA平台采用XILINX公司的XC5VFX130T-2FF1738芯片,嵌入式处理器选用其内嵌的硬核PPC4402,1.01A版本。PPC4402通过MC接口与IP核PPC440MC_DDR2 3相连,IP核PPC440MC_DDR23是第一片片外存储芯片DDR2 4的控制器。第一片片外存储芯片型号是WD2RE512X809-667D,用于存放系统的软件代码。PPC4402通过PLB接口(4.6版本)与多端口存储控制器5相连,多端口存储控制器5是第二片片外存储芯片DDR2 6的控制器。第二片片外存储芯片型号也是WD2RE512X809-667D,用于存放数据。SATA控制器PLB2SATAIP1也连接在PLB总线上,PPC4402通过PLB总线就可以访问PLB2SATAIP1的寄存器组。PPC4402与外部设备(如图3中的串口、网等口)都是通过PLB连接。PPC440 2通过访问SATA控制器1的32个寄存器完成对SATA硬盘的参数配置和读写命令控制。
LED显示模块125控制四个LED,指示硬盘工作状态:LED_0灯亮,表明主机已经识别到硬盘,通信链接已经建立,可以开始传输数据,当硬盘被移除时该灯熄灭;LED_1灯亮表明连接的硬盘的接口传输率是3.0Gbps,LED_1灯熄灭表明连接的硬盘的接口传输率是1.5Gbps;发送数据过程中LED_2灯亮,数据发送完毕后该灯熄灭;接收数据过程中LED_3灯亮,数据接收完毕后该灯熄灭。
按照图2所示搭建硬件平台,将产生的比特流下载到XC5VFX130T-2FF1738芯片中产生相应的硬件电路,图9是控制器1下载到XC5VFX130T-2FF1738芯片中资源占用情况,然后将编写好的SATA控制器的驱动程序和测试代码下载到第一片DDR2 4中,使用CHIPSCOPE和硬件描述语言编写的测试逻辑来观察、分析数据的正误,使用编写的软件测试并计算持续读、写的数据带宽,软件流程图如图8所示。持续读、写带宽等于总的读、写数据量除以总的读、写时间。总的时间是通过对固定频率的时钟计数换算得到的,总的数据量是通过对发送帧计数换算得到的,图6,图7分别是控制器对不同型号硬盘进行持续顺序读和写的平均带宽。