优秀的 Verilog/FPGA开源项目介绍(三十八)- SATA

2a56bdb180e32c54a7c88985c2a9de0b.jpeg

SATA

SATA 于 2000 年发布,与早期的 PATA 接口相比具有多种优势,例如减小了电缆尺寸和成本(40 或 80 根减小到 7 根导线)、本机热插拔、通过更高的信号传输速率实现更快的数据传输,并通过(可选)I/O排队协议实现更高效的传输。该规范的修订版 1.0 于 2003 年 1 月发布。

3c3ba7abd93f85c3db8c3d5b466e4417.png

串行 ATA 行业兼容性规范源自串行 ATA 国际组织(SATA-IO)。SATA-IO 小组协作创建、审查、批准和发布互操作性规范、测试用例和即插即用。与许多其他行业兼容性标准一样,SATA 内容所有权转移给其他行业机构:主要是 INCITS T13 和 INCITS T10 小组委员会( SCSI ),后者是负责串行连接 SCSI (SAS) 的 T10 子小组。

e7d497e81499b8b6134479c9dc90e043.png

世界上第一款 SATA 硬盘驱动器是 Seagate Barracuda SATA V,于 2003 年 1 月发布。

FPGA实现SATA协议

FPGA实现SATA协议主要是通过SERDES实现物理层,后续其他层需要自己写。

7a4a070624a4d740949845224e58dece.png

整个SATA协议需要实现的大致内容如下:

3d3e32ca232dff51625b7459ab3b3666.png图片来源见水印

下面介绍几个SATA协议的实现的开源项目。

FPGA-SATA-HBA

https://github.com/WangXuan95/FPGA-SATA-HBA

28a1d9506e4f90fafe8dfcf05a52d297.png

介绍

5967cf26b6166e2924dd08afc2399e73.png

本项目全中文介绍,关于协议也介绍的异常详细,就不赘述了。

sata3_host_controller/sata_2_host_controller

https://github.com/wove2006/sata3_host_controller/tree/master

https://github.com/CoreyChen922/sata_2_host_controller

介绍

173382aed3aca6b20571964fff4d24e0.png

这是一个 SATA 3 主控制器项目。使用此功能,可以通过简单的内存接口从 fpga 逻辑中读取 sata3 sdd/hdd。该控制器性能如下:写入:275MBps 读取:519MBps(连续读写)(在 SAMSUNG 250GB SATA3 SSD 上测试)。FPGA 型号:Kintex7 xc7k325t(KC705 板)。

nysa-sata

https://github.com/CospanDesign/nysa-sata

介绍

用 Verilog 编写的 Sata 协议栈。

c306ac15974e8acf5edb1fe0a12b5c96.png

详细的介绍,作者有个WIKI可以查看:

https://github.com/CospanDesign/nysa-sata/wiki

请注意,虽然作者开源了源代码,但是开源协议是GPL。

sata_controller

https://github.com/wove2006/sata_controller

ef4128008bd911747dacdc25ead8c755.png

全中文介绍,就不过多赘述了。

sata_ipcore

https://github.com/roman-pogorelov/sata_ipcore

0292b37822a2a0153ef880fedaf37647.png

Intel FPGA实现的SATA IP。

图书

https://github.com/suisuisi/FPGATechnologyGroup/tree/main/SATA_FPGA

a02a429470d4979c0b4fbf4d22db0576.png

最后,还是放一些关于SATA的基础知识。

总结

SATA部分因为基本和FPGA底层息息相关,所以很少有单独的项目实现,国内几个大佬写了几个非常详细的教程,按照教程基本就可以完成协议实现了。

最后,还是感谢各个大佬开源的项目,让我们受益匪浅。后面有什么感兴趣方面的项目,大家可以在后台留言或者加微信留言,今天就到这,我是爆肝的碎碎思,期待下期文章与你相见。

58ca190d2c6a9087671c2af39bca56f5.jpeg

### FPGA中的SATA3接口定义与规范 #### SATA3接口概述 串行 ATA (Serial Advanced Technology Attachment, SATA) 是一种用于连接计算机主机板和大容量存储设备的标准接口。SATA3作为第三代标准,提供了6 Gbps的数据传输速率,相较于前代产品有了显著提升。 #### 物理层特性 在物理层面,SATA3采用了差分信号对来实现高速数据通信。每一对差分线路由一条正向线(Tx+/Rx+) 和负向线(Tx-/Rx-) 组成[^4]。这种设计可以有效减少电磁干扰并提高信噪比,从而支持更高的数据率。 对于FPGA而言,在实现SATA3接口时通常会利用内部硬核IP模块或是软核逻辑配合外部PHY芯片完成整个链路建立过程。具体来说: - **内置GTH/GTY收发器**:现代高端FPGAs如Xilinx Virtex UltraScale系列集成了高性能SerDes(Serializer/Deserializer)单元——GTH或GTY收发器,它们能够满足SATA III所需的电气性能要求。 - **PLL/DLL锁相环**:为了确保稳定可靠的时钟恢复机制,FPGA内还配备了专门针对SATA应用优化过的PLL(Delay Locked Loop) 或者DLL(Phase-Locked Loop),用来生成精确的参考时钟给到SERDES部分以及后续处理流程使用[^3]. #### 协议栈结构 除了硬件上的准备之外,还需要构建完整的协议栈以解析来自SSD或其他兼容装置发出的各种命令和服务请求。典型的SATA协议栈分为以下几个层次: - **物理层(PHY Layer)** : 负责实际比特流的发送接收工作. - **链接层(Link Layer)** :执行初始化握手序列、错误检测纠正等功能. - **传输层(Transport Layer)** :封装拆包SCSI指令集,并管理队列状态机. - **命令层(Command Layer)** :直接面向应用程序提供API调用接口. 当涉及到具体的编程实践时,则可能需要用到特定厂商提供的HDL库文件或者是开源项目资源来进行快速开发验证。 ```verilog // Verilog代码片段展示如何实例化一个简单的SATA PHY IP core module top_level ( input wire refclk_p, input wire refclk_n, output wire txp, output wire txn, input wire rxp, input wire rxn ); // Instantiate the Xilinx GTY transceiver block here... endmodule ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值