CN102880427A - 一种基于fpga的sata主控制器 - Google Patents
一种基于fpga的sata主控制器 Download PDFInfo
- Publication number
- CN102880427A CN102880427A CN2012102947454A CN201210294745A CN102880427A CN 102880427 A CN102880427 A CN 102880427A CN 2012102947454 A CN2012102947454 A CN 2012102947454A CN 201210294745 A CN201210294745 A CN 201210294745A CN 102880427 A CN102880427 A CN 102880427A
- Authority
- CN
- China
- Prior art keywords
- data
- sata
- port
- module
- register
- 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
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明提供一种基于FPGA的SATA主控制器,为更高效更便利地使用FPGA器件实现对SATA接口硬盘的读写控制而设计。包括SATA物理层实现模块、SATA链路层实现模块、SATA传输层实现模块和SATA应用层实现模块等部分。与现有设计相比,本发明实现了更高层次的逻辑封装,为用户提供了更简便的操作接口,用户通过操作本发明提供的FIFO、SRAM、寄存器等形式的简单接口,即可实现对SATA接口硬盘的读写控制。
Description
技术领域
本发明属于电子信息领域,计算机外围设备及关键部件方向,具体涉及一种计算机等产品使用的安全存储设备的控制器。本发明使用现场可编程门阵列(FPGA,Field Programmable Gate Array)芯片作为实现平台,通过硬件描述语言(HDL,Hardware Description Language)构建逻辑,实现对符合SATA(Serial AdvancedTechnology Attachment)协议接口的存储设备(例如SATA接口硬盘)的读写控制。
背景技术
随着近年来高速串行数据传输技术的发展,计算机内部的多种外围设备的互联形式都逐步从并行总线形式过渡到了串行化互联。例如,PCI总线逐步被PCI Express取代。磁盘,包括传统的机械磁盘和近年来快速发展固态盘(SSD),一直是计算机系统的主要存储设备,硬盘设备的互联接口也从ATA并行规范过渡到了数据串行化传输的SATA规范。SATA协议发展至今,经历了第一代1.5Gbps速率,第二代3.0Gbps速率,目前定型在第三代6Gbps速率,即接口的理论数据传输带宽已达到600MBps。
随着半导体工艺的进步,FPGA芯片发展迅速。FPGA器件在IC芯片原型设计、定制化数字逻辑芯片设计、数字信号处理、嵌入式等领域所扮演的角色日益重要。目前较高端的FPGA器件内部集成了数据高速串行化传输所需的电路部件,例如美国Xilinx公司的Virtex5 LXT系列FPGA内部集成的命名为GTP的电路部件。这些电路部件可实现高速串行数据传输所需的8B10B编解码,数据时钟恢复,带外信号(OOB)产生等功能。这样,在FPGA内部实现诸如SATA,PCIE等协议便成为了可能。由于FPGA器件本身具有逻辑可定制的特点,使得在FPGA内部实现的SATA控制器具备了很高的灵活性,能在可编程片上系统(SOPC)的构建过程中充当重要角色,因此具有广阔的市场需求。
现有的基于FPGA实现的SATA协议主控制器IP核款型有限,并且一般只实现到SATA协议的传输层,留给用户的使用接口仍然较为复杂,需要用户对SATA协议以及磁盘相关技术规范进行一定的学习后才能有效使用,这不利于普通用户快速地使用FPGA实现对磁盘的读写控制。
发明内容
本发明是为了提供一种基于FPGA实现的,用户接口简单友好而且逻辑结构简洁高效的SATA协议主控制器IP核,从而使得用户能够快速地使用FPGA器件实现对SATA接口磁盘的读写控制。
本发明所涉及的一种基于FPGA的SATA主控制器,主要包括:SATA应用层实现模块(1),SATA传输层实现模块(2),SATA链路层实现模块(3),SATA物理层实现模块(4)。
所述的SATA应用层实现模块(1)具有用户使用接口,所述的用户使用接口由用户指令寄存器(101),用户参数寄存器(102),用户数据SRAM端口(103),用户数据FIFO端口(104),应用层状态报告端口(107)5个端口组成;SATA应用层实现模块(1)内部还具有应用层状态机(105)和应用层数据传输控制器(106)。
所述的用户指令寄存器(101):用于设置硬盘读写启动等指令并查询关键状态。
所述的用户参数寄存器(102):用于参数设置,可设置的参数有读写指令类别、读写地址、读写数据数量、读写数据通过用户数据SRAM端口(103)传输还是通过用户数据FIFO端口(104)传输等等。
所述的用户数据SRAM端口(103):用于数据传输,其端口信号与常见的SRAM器件端口信号类似,能够直接与FPGA内部的SRAM连接。
所述的用户数据FIFO端口(104):用于数据传输,其端口信号与常见的FIFO器件端口信号类似,能够直接与FPGA内部的FIFO连接。
所述的应用层状态报告端口(107):报告SATA应用层实现模块(1)的工作状态。
所述的应用层状态机(105):接收来自用户指令寄存器(101)以及用户参数寄存器(102)的指令参数,并控制应用层数据传输控制器(106)和SATA传输层实现模块(2)的端口,从而控制用户数据与SATA接口硬盘(5)之间的输入输出交互。
所述的应用层数据传输控制器(106):接收来自应用层状态机(105)的指令,起到数据传输流向选择开关的作用,使数据流在用户数据SRAM端口(103)与SATA接口硬盘(5)之间交互,或者使用户数据在用户数据FIFO端口(104)与SATA接口硬盘(5)之间交互。
所述的SATA传输层实现模块(2):内部包含传输层指令寄存器(201),传输层参数寄存器(202),传输层状态报告端口(207),传输层状态机(206),数据帧参数存储区(203),存盘数据写出存储区(204),存盘数据读入存储区(205);在写硬盘时,传输层状态机(206)根据传输层指令寄存器(201)和传输层参数寄存器(202)接收到的指令,将数据帧参数写入数据帧参数存储区(203),再命令SATA链路层实现模块(3)启动,将数据帧参数存储区(203)和存盘数据写出存储区(204)中的数据整合后写出到硬盘;在读硬盘时,经过SATA链路层实现模块(3)处理后的帧参数存入数据帧参数存储区(203),存盘内容数据存入存盘数据读入存储区(205),同时传输层状态机(206)得知数据帧被接收,继而通过传输层指令寄存器(201)和传输层参数寄存器(202)告知SATA应用层实现模块(1)。
所述的SATA链路层实现模块(3):包括链路层指令状态寄存器(301),链路层状态机(302),SATA原语数据存储区(303),数据选择复选器(304),循环冗余校验值插入器(305),扰码器(307),数据发送端口(310),数据接收端口(311),原语检查器(308),解扰器(309),循环冗余校验检查器(306),数据甄别器(312);在写硬盘时,链路层状态机(302)根据链路层指令状态寄存器(301)接收到的指令,选择SATA原语数据存储区(303)中存储的某些原语,并控制数据选择复选器(304)选择不同数据源,使数据经过循环冗余校验值插入器(305)和扰码器(307)的处理后,形成最终要发送到SATA接口硬盘(5)的数据帧;在读硬盘时,数据帧首先经过解扰器(309)进行解扰处理,然后原语检查器(308)将检查到的原语告知链路层状态机(302),循环冗余校验检查器(306)对数据帧进行循环冗余校验检查,将检查结果告知链路层状态机(302);经过检查的数据再被数据甄别器(312)分别筛选出帧参数数据并存入数据帧参数存储区(203),筛选出原始存盘数据并存入存盘数据读入存储区(205)。
所述的SATA物理层实现模块(4)基于FPGA芯片内部集成的高速串行数据收发器设计,通过数据发送端口(310)和数据接收端口(311)与SATA链路层实现模块(3)连接,SATA物理层实现模块(4)通过SATA协议规范定义的两对高速串行差分数据线与SATA接口硬盘(5)通信。
所述的循环冗余校验值插入器(305)以及循环冗余校验检查器(306)都采用了CRC-32位模式,计算公式符合SATA协议规范要求的CRC计算公式,
即:G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1,并且计算初始值设定为Ox52325032。
所述的扰码器(307)以及解扰器(309)都采用了符合SATA协议规范要求的扰码计算公式,即:G(X)=X16+X15+X13+X4+1,并且计算初始值设定为OxF0F6。
本发明能够达到的有益效果是:
1、设计具有高度灵活性,可移植性。除了SATA协议的物理层使用FPGA片内专门电路实现外,该主控制器IP核的其余逻辑全部使用HDL代码编写,完全可综合实现,可实现在多种FPGA器件上,也可用于定制化IC的设计。
2、本发明所提供给使用者的接口非常简单,用户只要控制SRAM和FIFO类型的接口,以及寄存器接口即可实现对磁盘的读写控制,这使得用户在无需学习SATA协议的情况下即可使用本发明在FPGA器件上实现对SATA接口存储设备的读写控制。
3、本发明性能优异,设计精巧,丰富了数字逻辑芯片IP库,有利于用户使用本发明搭建更高层次的存储设备或相关专业设备,有利于进一步提升我国在这一细分市场的竞争力。
附图说明
图1是IP核功能模块拓扑图;
图2是IP核测试模型拓扑图;
图3是IP核实现所需的FPGA资源消耗统计图;
图4是用户指令寄存器端口101信号定义图;
图5是用户参数寄存器端口102信号定义图;
图6是用户参数寄存器的具体使用定义图;
图7是用户指令类型定义图;
图8是用户数据SRAM端口103信号定义图;
图9是用户数据FIFO端口104信号定义图;
图10是读硬盘厂商信息并存入用户数据SRAM流程图;
图11是读硬盘数据并存入用户数据SRAM流程图;
图12是用户数据SRAM中的数据写入硬盘流程图;
图13是用户数据FIFO中的数据写入硬盘流程图;
图14是读硬盘数据并存入用户数据FIFO流程图;
图15是IP核测试程序串口指令主菜单示意图
图16是IP核对西数WD1002FAEX的读取速度测试图
附图标记说明如下:
99-SATA主控制器,
1-SATA应用层实现模块,
2-SATA传输层实现模块,
3-SATA链路层实现模块,
4-SATA物理层实现模块,
5-SATA接口硬盘,
101-用户指令寄存器,
102-用户参数寄存器,
103-用户数据SRAM端口,
104-用户数据FIFO端口,
105-应用层状态机,
106-应用层数据传输控制器,
107-应用层状态报告端口,
201-传输层指令寄存器,
202-传输层参数寄存器,
203-数据帧参数存储区,
204-存盘数据写出存储区,
205-存盘数据读入存储区,
206-传输层状态机,
207-传输层状态报告端口,
301-状态寄存器,
302-链路层状态机,
303-SATA原语数据存储区,
304-数据选择复选器,
305-循环冗余校验值插入器,
306-循环冗余校验检查器,
307-扰码器,
308-原语检查器,
309-解扰器,
310-数据发送端口,
311-数据接收端口,
312-数据甄别器。
具体实施方式
本发明在设计时遵循的核心设计思想有两条:
(1)、为使用者提供尽量简洁的应用接口,可以让使用者感觉到读写磁盘和读写SRAM芯片一样容易。
(2)、结构清晰地实现SATA协议,并且为了到达简化用户接口的目的,在SATA协议之外,对设计进行更上一层封装。即除了SATA协议规范中说明的物理层、链路层,传输层之外、还封装了一层逻辑,命名为应用层。
本发明以美国Xilinx公司的Virtex5系列FPGA器件(具体型号为XC5VLX110T-1FFG1136C)为开发平台。其中,SATA物理层逻辑使用FPGA芯片内部集成的名为GTP的高速串行数据收发器为基础实现;链路层、传输层、应用层使用VHDL编码,经过逻辑综合之后使用FPGA中的寄存器、查找表、块存储器等资源实现。最终SATA主控制器99经过Xilinx公司开发软件ISE 13.2综合后,其所耗资源统计如图3。
如图1所示,本发明包括SATA应用层实现模块1,SATA传输层实现模块2,SATA链路层实现模块3,SATA物理层实现模块4。SATA应用层实现模块1具有用户使用接口,所述的用户使用接口由用户指令寄存器101,用户参数寄存器102,用户数据SRAM端口103,用户数据FIFO端口104,应用层状态报告端口107等5个端口组成;SATA应用层实现模块1内部还具有应用层状态机105和应用层数据传输控制器106。
用户指令寄存器101:用于设置硬盘读写启动等指令并查询关键状态。
用户参数寄存器102:用于参数设置,可设置的参数有读写指令类别、读写地址、读写数据数量、读写数据通过用户数据SRAM端口103传输还是通过用户数据FIFO端口104传输等等。
用户数据SRAM端口103:用于数据传输,其端口信号与常见的SRAM器件端口信号类似,能够直接与FPGA内部的SRAM连接。
用户数据FIFO端口104:用于数据传输,其端口信号与常见的FIFO器件端口信号类似,能够直接与FPGA内部的FIFO连接。
应用层状态报告端口107:报告SATA应用层实现模块1的工作状态。
应用层状态机105:接收来自用户指令寄存器101以及用户参数寄存器102的指令参数,并控制应用层数据传输控制器106和SATA传输层实现模块2的端口,从而控制用户数据与SATA接口硬盘5之间的输入输出交互。
应用层数据传输控制器106:接收来自应用层状态机105的指令,起到数据传输流向选择开关的作用,使数据流在用户数据SRAM端口103与SATA接口硬盘5之间交互,或者使用户数据在用户数据FIFO端口104与SATA接口硬盘5之间交互。
用户使用本发明对硬盘进行读写控制时,基本的流程是:
1、使用用户数据FIFO端口104或者用户数据SRAM端口103,准备好写入磁盘的数据或者磁盘读出数据的接收缓冲区。具体来讲,将用于存储数据的FIFO或者SRAM连接到上述两种接口即可。
2、向用户参数寄存器102写入指令参数,例如写入本次磁盘读写的扇区地址。
3、向用户指令寄存器101接口发出启动信号,例如一个由0至1的脉冲信号。
4、等待用户指令寄存器101状态标识位提示操作完成。
本发明同时提供了RAM形式和FIFO形式的两套数据缓冲接口与硬盘交换数据。典型的应用场景是:
1、RAM形式接口提供了可逐字节寻址的Cache模式缓冲,主要用于小块的数据读写,例如存储在磁盘上的文件系统信息的读写。
2、FIFO接口为大批量流式数据的读写提供了便利,例如ADC或者DAC采样数据流、视频数据流的读写。
用户指令寄存器101的具体信号定义如图4是用户指令寄存器端口101信号定义图4所示。
UsrCmd_Rst信号复位整个控制器,重新建立与磁盘的连接,并进行相关初始化工作。
UsrCmd_Req上产生一个由0变1的脉冲将启动一次磁盘操作。
UsrSts_DevReady表示磁盘就绪,物理层链路初始化成功,可以进行操作了。
UsrSts_Busy表示控制器繁忙,不能接受新的磁盘操作指令。
UsrSts_Error磁盘操作有错。启动新的磁盘操作后,该标志位自动清除。
用户参数寄存器102接口是一个FPGA片内的RAM接口,该RAM的组织形式为8位数据宽度和16个地址深度。该RAM用来存储指令参数。具体的信号定义如图5所示。
CmdRAM_Usr_Addr是地址总线信号。
CmdRAM_Usr_Din是数据输入端口,用户设定的指令参数由此端口写入。
CmdRAM_Usr_Dout是数据输出端口,用户设定的指令参数由此端口读出。
CmdRAM_Usr_WrEna是写使能信号,高电平有效。
CmdRAM_Usr_CLK是数据写入时钟信号,上升沿有效。
具体的16个地址空间的参数功能如图6所示。
用户参数寄存器102所定义的16个寄存器中,最后一个寄存器,即地址偏移等于15的寄存器用于定义指令类型,例如,是读硬盘还是写硬盘。具体的指令代码定义如图7。
用户数据SRAM端口103用于对控制器外部的一个RAM进行读写。磁盘数据可借由该RAM缓冲。例如,用户写磁盘时,可先将数据写入到该RAM;用户读数据时,从磁盘读出的数据可被存入该RAM。该RAM的数据读出节拍延迟应设定为1,具体的信号定义如图8。
UpRam_App_Addr连接RAM的地址总线端口。
UpRam_App_Din连接RAM的数据输入端口。
UpRam_App_Dout连接RAM的数据输出端口。
UpRam_App_WrEna连接RAM的写使能端口,高电平有效。
UpRam_App_CLK连接RAM的时钟端口,上升沿有效。
用户数据FIFO端口104用于对控制器外部的两个FIFO进行读写。磁盘数据可借由这两个FIFO缓冲。例如,用户写磁盘时,可先将数据写入到用于数据输出的FIFO;用户读数据时,从磁盘读出的数据可被存入用于数据读入的FIFO。FIFO的数据读出节拍延迟应设定为1,具体的信号定义如图7。
图10至图14分别给出了5种用户控制指令的执行流程图。为了简化流程图的表示,图中用“Command RAM”表示用户参数寄存器102,用“DPRAM”表示用户数据SRAM端口103,用“FIFO”表示用户数据FIFO端口104。
应用层状态机105根据用户指令控制SATA传输层实现模块2以及应用层数据传输控制器106。因为SATA协议规定每次数据帧传输最多传输8K字节数据,对于大批量硬盘数据读写的,应用层状态机105会对SATA传输层实现模块2进行多次控制以实现多于8KB的读写控制。
应用层数据传输控制器106在用户数据SRAM端口103和用户数据FIFO端口104之间进行数据源导向选择,并在数据源与存盘数据写出存储区204与存盘数据读入存储区205之间发起DMA数据传输。
SATA传输层实现模块2的主要功能是对数据进行帧封装以及帧解析处理。例如,SATA协议规定的数据传输帧由4个字节的帧信息部分和最多8192字节的数据部分组成,在向硬盘写数据帧时,传输层状态机206就需要在数据帧参数存储区203里准备好那4个字节的帧信息。
SATA传输层实现模块2:内部包含传输层指令寄存器201,传输层参数寄存器202,传输层状态报告端口207,传输层状态机206,数据帧参数存储区203,存盘数据写出存储区204,存盘数据读入存储区205;在写硬盘时,传输层状态机206根据传输层指令寄存器201和传输层参数寄存器202接收到的指令,将数据帧参数写入数据帧参数存储区203,再命令SATA链路层实现模块3启动,将数据帧参数存储区203和存盘数据写出存储区204中的数据整合后写出到硬盘;在读硬盘时,经过SATA链路层实现模块3处理后的帧参数存入数据帧参数存储区203,存盘内容数据存入存盘数据读入存储区205,同时传输层状态机206得知数据帧被接收,继而通过传输层指令寄存器201和传输层参数寄存器202告知SATA应用层实现模块1。
传输层指令寄存器201和传输层参数寄存器202的信号定义与应用层的用户指令寄存器101和用户参数寄存器102的信号定义基本相同,只是传输层不支持多于8K字节的数据传输指令。多余8K字节的读写操作是通过应用层控制传输层进行多次读写操作而实现的。
数据帧参数存储区203使用FPGA内部的一块RAM资源实现,配置大小为1KB。
存盘数据写出存储区204和存盘数据读入存储区205也使用FPGA内部的RAM资源实现,配置大小为16KB。
SATA链路层实现模块3的主要功能是对封装好的数据帧进行进一步处理,处理内容包括与硬盘进行原语交互,例如发送帧起始SOF,帧结束EOF,帧接收成功,同步等原语信息;处理内容也包括了对数据帧进行CRC计算,数据扰码等处理。
SATA链路层实现模块3:包括链路层指令状态寄存器301,链路层状态机302,SATA原语数据存储区303,数据选择复选器304,循环冗余校验值插入器305,扰码器307,数据发送端口310,数据接收端口311,原语检查器308,解扰器309,循环冗余校验检查器306,数据甄别器312;在写硬盘时,链路层状态机302根据链路层指令状态寄存器301接收到的指令,选择SATA原语数据存储区303中存储的某些原语,并控制数据选择复选器304选择不同数据源,使数据经过循环冗余校验值插入器305和扰码器307的处理后,形成最终要发送到SATA接口硬盘5的数据帧;在读硬盘时,数据帧首先经过解扰器309进行解扰处理,然后原语检查器308将检查到的原语告知链路层状态机302,循环冗余校验检查器306对数据帧进行循环冗余校验检查,将检查结果告知链路层状态机302;经过检查的数据再被数据甄别器312分别筛选出帧参数数据并存入数据帧参数存储区203,筛选出原始存盘数据并存入存盘数据读入存储区205。
循环冗余校验值插入器305以及循环冗余校验检查器306都采用了CRC-32位模式,计算公式符合SATA协议规范要求的CRC计算公式,即:
G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1,
并且计算初始值设定为0x52325032。
扰码器307以及解扰器309都采用了符合SATA协议规范要求的扰码计算公式,即:G(X)=X16+X15+X13+X4+1,并且计算初始值设定为0xF0F6。
SATA物理层实现模块4基于FPGA芯片内部集成的高速串行数据收发器设计,通过数据发送端口310和数据接收端口311与SATA链路层实现模块3连接,SATA物理层实现模块4通过SATA协议规范定义的两对高速串行差分数据线与SATA接口硬盘5通信。
为了方便测试验证如图1所示的SATA主控制器99,搭建如图2所示的IP核测试模型。
如图2所示,FPGA芯片999通过串口与串口终端77进行连接,串口终端77可以使用一台带有串口的计算机和运行在计算上的串口通信软件实现。通过串口终端77的使用,SATA主控制器99的状态信息可以得到显示,测试指令可以通过串口向主控制器99发送。错误!未找到引用源。显示了用于本发明测试的串口终端指令主菜单。
如图2所示,FPGA芯片999内部,除了SATA主控制器99还设计了两大模块:
处理器模块66:以Xilinx公司提供的32位Microblaze软核处理器605为核心,并为软核处理器605配置了第1通用输入输出寄存器组604,第2通用输入输出寄存器组602,双口RAM存储器603,异步串口601等几个外设。通过上述几个外设的使用,软核处理器605就可以控制数据测试模块88和SATA主控制器99,并且可以与串口终端77进行通信了。
数据测试模块88:包括数据生成器804,数据比较器803,测试数据输出缓冲区801,测试数据输入缓冲区802。测试数据输出缓冲区801和测试数据输入缓冲区802都使用FPGA片内RAM构成FIFO存储器。
在写硬盘测试时,根据串口终端77的指令,处理器模块66赋予数据生成器804初始值,命令它在测试数据输出缓冲区801可写的情况下连续计数,并将计数值写入测试数据输出缓冲区801,处理器模块66同时启动SATA主控制器99,把来自用户数据FIFO端口的数据连续不断地写入SATA接口硬盘5。在写数据过程中,处理器模块66可以读取数据生成器804的计数值,通过参考两次读取操作之间的时间差和计数值之差,就可以得到SATA主控制器99写磁盘的速度了。
在读硬盘测试时,根据串口终端77的指令,处理器模块66赋予数据比较器803计数初始值,并命令SATA主控制器99把硬盘数据连续不断地读出到用户数据FIFO端口。数据比较器803将自己的计数值与来自FIFO端口的读出数值进行比较,如果数值不一致,则设置标志位告知处理器模块66。处理器模块66通过读取数据比较器803就可以得到SATA主控制器99读磁盘的速度,并且通过比较读出的数据是否与事先写入的数据一致,也就可以得知硬盘读写是否存在错误了。
使用本发明对多块固态盘以及普通磁盘进行了测试,结果表明本发明性能优异。固态盘的读写速度普遍能达到或超过固态盘产品手册的标称值,例如典型的读写速度达到每秒200兆字节。磁盘由于其机械结构特点,在不同寻址地址上,读写速度不同。一般而言,在磁盘外圈(低地址)范围读写时速度高,在磁盘内圈读写时速度低。图16显示了对一块1TB容量磁盘(产品型号为西数WD1002FAEX)的读数据测试结果,图中横坐标是磁盘地址,兆字节单位;纵坐标是速度,兆字节每秒单位。
Claims (3)
1.一种基于FPGA的SATA主控制器(99),其特征在于包括:SATA应用层实现模块(1),SATA传输层实现模块(2),SATA链路层实现模块(3),SATA物理层实现模块(4);
SATA应用层实现模块(1)具有用户使用接口,所述的用户使用接口由用户指令寄存器(101),用户参数寄存器(102),用户数据SRAM端口(103),用户数据FIFO端口(104),应用层状态报告端口(107)5个端口组成;SATA应用层实现模块(1)内部还具有应用层状态机(105)和应用层数据传输控制器(106);
用户指令寄存器(101):用于设置硬盘读写启动等指令并查询关键状态;
用户参数寄存器(102):用于参数设置,可设置的参数有读写指令类别、读写地址、读写数据数量、读写数据通过用户数据SRAM端口(103)传输还是通过用户数据FIFO端口(104)传输等等;
用户数据SRAM端口(103):用于数据传输,其端口信号与常见的SRAM器件端口信号类似,能够直接与FPGA内部的SRAM连接;
用户数据FIFO端口(104):用于数据传输,其端口信号与常见的FIFO器件端口信号类似,能够直接与FPGA内部的FIFO连接;
应用层状态报告端口(107):报告SATA应用层实现模块(1)的工作状态;
应用层状态机(105):接收来自用户指令寄存器(101)以及用户参数寄存器(102)的指令参数,并控制应用层数据传输控制器(106)和SATA传输层实现模块(2)的端口,从而控制用户数据与SATA接口硬盘(5)之间的输入输出交互;
应用层数据传输控制器(106):接收来自应用层状态机(105)的指令,起到数据传输流向选择开关的作用,使数据流在用户数据SRAM端口(103)与SATA接口硬盘(5)之间交互,或者使用户数据在用户数据FIFO端口(104)与SATA接口硬盘(5)之间交互;
SATA传输层实现模块(2):内部包含传输层指令寄存器(201),传输层参数寄存器(202),传输层状态报告端口(207),传输层状态机(206),数据帧参数存储区(203),存盘数据写出存储区(204),存盘数据读入存储区(205);在写硬盘时,传输层状态机(206)根据传输层指令寄存器(201)和传输层参数寄存器(202)接收到的指令,将数据帧参数写入数据帧参数存储区(203),再命令SATA链路层实现模块(3)启动,将数据帧参数存储区(203)和存盘数据写出存储区(204)中的数据整合后写出到硬盘;在读硬盘时,经过SATA链路层实现模块(3)处理后的帧参数存入数据帧参数存储区(203),
存盘内容数据存入存盘数据读入存储区(205),同时传输层状态机(206)得知数据帧被接收,继而通过传输层指令寄存器(201)和传输层参数寄存器(202)告知SATA应用层实现模块(1);
SATA链路层实现模块(3):包括链路层指令状态寄存器(301),链路层状态机(302),SATA原语数据存储区(303),数据选择复选器(304),循环冗余校验值插入器(305),扰码器(307),数据发送端口(310),数据接收端口(311),原语检查器(308),解扰器(309),循环冗余校验检查器(306),数据甄别器(312);在写硬盘时,链路层状态机(302)根据链路层指令状态寄存器(301)接收到的指令,选择SATA原语数据存储区(303)中存储的某些原语,并控制数据选择复选器(304)选择不同数据源,使数据经过循环冗余校验值插入器(305)和扰码器(307)的处理后,形成最终要发送到SATA接口硬盘(5)的数据帧;在读硬盘时,数据帧首先经过解扰器(309)进行解扰处理,然后原语检查器(308)将检查到的原语告知链路层状态机(302),循环冗余校验检查器(306)对数据帧进行循环冗余校验检查,将检查结果告知链路层状态机(302);经过检查的数据再被数据甄别器(312)分别筛选出帧参数数据并存入数据帧参数存储区(203),筛选出原始存盘数据并存入存盘数据读入存储区(205);
SATA物理层实现模块(4)基于FPGA芯片内部集成的高速串行数据收发器设计,通过数据发送端口(310)和数据接收端口(311)与SATA链路层实现模块(3)连接,SATA物理层实现模块(4)通过SATA协议规范定义的两对高速串行差分数据线与SATA接口硬盘(5)通信。
2.如权利要求1所述的一种基于FPGA的SATA主控制器(99),其特征在于:所述的循环冗余校验值插入器(305)以及循环冗余校验检查器(306)都采用了CRC-32位模式,计算公式符合SATA协议规范要求的CRC计算公式,
即:G(X)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1,并且计算初始值设定为0x52325032。
3.如权利要求1所述的一种基于FPGA的SATA主控制器(99),其特征在于:所述的扰码器(307)以及解扰器(309)都采用了符合SATA协议规范要求的扰码计算公式,
即:G(X)=X16+X15+X13+X4+1,并且计算初始值设定为0xF0F6。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012102947454A CN102880427A (zh) | 2012-08-20 | 2012-08-20 | 一种基于fpga的sata主控制器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012102947454A CN102880427A (zh) | 2012-08-20 | 2012-08-20 | 一种基于fpga的sata主控制器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102880427A true CN102880427A (zh) | 2013-01-16 |
Family
ID=47481775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012102947454A Pending CN102880427A (zh) | 2012-08-20 | 2012-08-20 | 一种基于fpga的sata主控制器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102880427A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593315A (zh) * | 2013-11-20 | 2014-02-19 | 中国船舶重工集团公司第七二四研究所 | 一种基于fpga的直接多块硬盘高速并行读写方法 |
CN106598889A (zh) * | 2016-08-18 | 2017-04-26 | 湖南省瞬渺通信技术有限公司 | 一种基于fpga夹层板的sata主控器 |
CN108605055A (zh) * | 2016-02-01 | 2018-09-28 | 高通股份有限公司 | 串行链路中的可编程分布式数据处理 |
CN110781116A (zh) * | 2019-11-15 | 2020-02-11 | 广州健飞通信有限公司 | 高速点对点串行接口系统 |
CN111414325A (zh) * | 2020-02-29 | 2020-07-14 | 苏州浪潮智能科技有限公司 | 一种Avalon总线转Axi4总线的方法 |
CN112699062A (zh) * | 2020-12-28 | 2021-04-23 | 湖南博匠信息科技有限公司 | 数据高速存储系统 |
CN113176850A (zh) * | 2021-03-12 | 2021-07-27 | 湖南艾科诺维科技有限公司 | 基于srio接口的共享存储盘及其存取方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11250031A (ja) * | 1998-02-26 | 1999-09-17 | Hitachi Ltd | プログラマブルロジックおよび情報処理装置 |
US20050183042A1 (en) * | 2003-12-02 | 2005-08-18 | Danny Vogel | Customizable development and demonstration platform for structured ASICs |
CN101339492A (zh) * | 2008-08-11 | 2009-01-07 | 湖南源科创新科技股份有限公司 | 原生sata的固态硬盘控制器 |
CN101634936A (zh) * | 2008-07-23 | 2010-01-27 | 深圳市中深瑞泰科技有限公司 | 通过fpga实现arm架构处理器与硬盘之间接口的方法 |
-
2012
- 2012-08-20 CN CN2012102947454A patent/CN102880427A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11250031A (ja) * | 1998-02-26 | 1999-09-17 | Hitachi Ltd | プログラマブルロジックおよび情報処理装置 |
US20050183042A1 (en) * | 2003-12-02 | 2005-08-18 | Danny Vogel | Customizable development and demonstration platform for structured ASICs |
CN101634936A (zh) * | 2008-07-23 | 2010-01-27 | 深圳市中深瑞泰科技有限公司 | 通过fpga实现arm架构处理器与硬盘之间接口的方法 |
CN101339492A (zh) * | 2008-08-11 | 2009-01-07 | 湖南源科创新科技股份有限公司 | 原生sata的固态硬盘控制器 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103593315A (zh) * | 2013-11-20 | 2014-02-19 | 中国船舶重工集团公司第七二四研究所 | 一种基于fpga的直接多块硬盘高速并行读写方法 |
CN108605055A (zh) * | 2016-02-01 | 2018-09-28 | 高通股份有限公司 | 串行链路中的可编程分布式数据处理 |
CN106598889A (zh) * | 2016-08-18 | 2017-04-26 | 湖南省瞬渺通信技术有限公司 | 一种基于fpga夹层板的sata主控器 |
CN110781116A (zh) * | 2019-11-15 | 2020-02-11 | 广州健飞通信有限公司 | 高速点对点串行接口系统 |
CN111414325A (zh) * | 2020-02-29 | 2020-07-14 | 苏州浪潮智能科技有限公司 | 一种Avalon总线转Axi4总线的方法 |
CN111414325B (zh) * | 2020-02-29 | 2021-09-17 | 苏州浪潮智能科技有限公司 | 一种Avalon总线转Axi4总线的方法 |
US11657011B2 (en) | 2020-02-29 | 2023-05-23 | Inspur Suzhou Intelligent Technology Co., Ltd. | Avalon-to-Axi4 bus conversion method |
CN112699062A (zh) * | 2020-12-28 | 2021-04-23 | 湖南博匠信息科技有限公司 | 数据高速存储系统 |
CN113176850A (zh) * | 2021-03-12 | 2021-07-27 | 湖南艾科诺维科技有限公司 | 基于srio接口的共享存储盘及其存取方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102880427A (zh) | 一种基于fpga的sata主控制器 | |
CN106815157A (zh) | 一种数据采集模块及数据采集系统 | |
CN104021107A (zh) | 一种支持NVMe PCIE SSD系统设计方法 | |
CN102495920B (zh) | 一种FPGA用基于PCIe的集成化逻辑分析模块 | |
CN107168644B (zh) | 基于sfp光纤接口的高速大容量宽带i/q数据记录仪 | |
CN104991880B (zh) | 一种基于pci‑e接口的fc‑ae‑asm通讯板卡 | |
CN105512084A (zh) | 一种Zynq平台数据交互装置 | |
CN204166088U (zh) | 局部放电信号采集装置 | |
CN103294836A (zh) | 基于pcie的雷达数据采集显控系统及其方法 | |
CN205692166U (zh) | 基于PowerPC架构中央处理器的核心板 | |
CN107908587A (zh) | 基于usb3.0的实时数据采集传输装置 | |
CN109656856A (zh) | 利用fpga实现非复用总线与复用总线互联装置及方法 | |
US9558129B2 (en) | Circuits for and methods of enabling the access to data | |
CN209624766U (zh) | 一种基于fpga的高速信号采集存储及回放系统 | |
CN201378851Y (zh) | 一种ccd图像数据采集装置 | |
Mendon et al. | A high performance, open source SATA2 core | |
CN104484302B (zh) | 基于usb接口的实现两台主机之间双向通信与控制的系统 | |
CN110765066B (zh) | 一种片上系统 | |
CN102158679B (zh) | 通用数字图像处理系统 | |
CN105389282B (zh) | 处理器和arinc429总线的通信方法 | |
CN104281082A (zh) | 局部放电信号采集方法和系统 | |
CN101968856A (zh) | 移动存储扩展卡及计算机 | |
CN104156336A (zh) | 一种usb2.0接口芯片的控制方法 | |
CN106094625B (zh) | 一种基于soc的采集传输装置 | |
CN201449607U (zh) | 基于usb2.0的数据采集器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130116 |