FPGA SATA高速存储设计
今天来讲一篇如何在fpga上实现sata ip,然后利用sata ip实现读写sata 盘的目的,如果需要再速度和容量上增加,那么仅仅需要增加sata ip个数就能够实现增加sata盘,如果仅仅实现data的读写整体来说sata ip设计比较简单,下面从sata 协议角度来聊聊sata ip应该如何实现。下图就是在FPGA上实现3张SATA SSD硬盘组成RAID0的结构图。

sata速度分为三个等级,sata在硬件接口上是一对收发差分信号,硬件是全双工模式,但实际SATA协议是半双工工作模式,为什么会如此奇怪,再link层会讲解到。sata gen1 速度1.5Gbps,sata gen2速度3.0 Gbps,sata gen3 速度6.0Gbps,然后编码都是8b/10b编码,所以对于sata gen3的有效带宽速度=6*1000 * 0.8 / 8= 600MB/s(注意这里的速度都是按照1000进制计算),这里的有效带宽包含了FIS数据和一些握手 Primitives,实际的纯data的有效带宽一般是在570MB/s,如果带了sata盘,那么就和每家的ssd盘有一定关联,目前速度做的最快和最稳定的当是三星大哥了。
链路层
物理层不需要我们设计,用xilinx的ip就行,我们从链路层开始讲解。
链路层的帧结构如下所示,Primitives + FIS +CRC组成,FIS在链路层看层是data,我们在传输层时候在讲解,CRC是FIS的CRC,Primitives用于HOST和device之间如何通讯,如何握手。每个FIS的传输都离不开Primitives和CRC.

常见的Primitives如下图所示,这里只列举一些Primitives。
SOF :表示数据传输的start
EOF:表示数据传输的end
X_RDY:向对端发起请求,我要抢占总线传输数据
R_RDY:接受者向发起者发送该Primitives表示我已经准备好了
R_IP:表示一直在收数据或者在发数据,这就是为什么sata是半双工的原因,需要一直握手。
SYNC:表示事情做完了,可以让出总线处于Idle状态


传输层
传输层设计相对简单很多,传输主要是解析FIS帧或者组FIS帧,常用的FIS帧如下所示。

从上图可以看到FIS层一共有8中类型的FIS,我们在设计FPGA SATA IP时可以不用设计BIST Activate FIS,因为该FIS用于验证链路的,下面列举几个常见FIS帧,
从下面FIS帧我们可以清晰的看到lba,count和Command等栏位,lba就是访问sata硬盘的逻辑扇区,count是lba的数量,count最大是16bit表示,那么可以看出单次命令最大的size=32MB,count=0表示32MB,command表示应用层的cmd code,这个在应用层会讲解。
H2D FIS帧格式如下:

D2H FIS帧格式如下:

DATA FIS帧格式如下

SDB FIS帧格式如下,NCQ发送DATA FIS之后需要发送SDB FIS反馈状态。

DMA Activate FIS帧格式如下,DMA Write和NCQ Write命令特有的。

DMA Setup FIS帧格式如下,这个是NCQ命令特有的

PIO Setup FIS帧格式如下,这个是PIO命令特有的。

应用层
应用层常用的是ATA指令集,ATA指令集如下所示。


ATA指令集command偏多,这里讲解identify,trim,flush cache和ncq read write命令,下面贴图都是4KB size,和NCQ qd1,这样是为了方便理解单个命令FIS交互过程。flush cache命令比较简单,就是一个non-data命令,只需要H2D FIS和D2H FIS两个FIS就能完成命令的实现。
identify命令是一个pio read命令,只要不是Error情况,device是不需要响应D2H FIS

NCQ Read命令


NCQ Wrtie命令,细心的同学发现了Write命令比Read命令多了一个DMA Activate,并且这个FIS在第一笔DATA FIS传输是可以省略的(可以在Set feature命令中设置)


最后一个很重要的就是硬复位命令了,这个COMRESET在Primitives实现的。

总体来说SATA设计比较简单,因为不需要考虑什么low power等,仅仅需要实现NCQ命令就行,NCQ命令可以最大支持qd32,但是速度还是很慢,有条件就上pcie,无论在单lane速率,还是lane得数量上都是吊打sata,反正结合项目实际需求,找到适合自己的设计方案。
相关文章:
FPGA SATA高速存储设计
今天来讲一篇如何在fpga上实现sata ip,然后利用sata ip实现读写sata 盘的目的,如果需要再速度和容量上增加,那么仅仅需要增加sata ip个数就能够实现增加sata盘,如果仅仅实现data的读写整体来说sata ip设计比较简单,下面…...
MySQL----为什么选择使用MySQL
在我们日常做项目的过程中,不论是个人还是企业,大多数会选择使用MySQL数据库作为后端数据库存储,它到底有什么优势,能够做到如此广为流传呢? 优点 稳定性:MySQL具有良好的稳定性和可靠性,能够保…...
01.音视频小白系统入门(新专栏)
目录 一、基础知识 二、音频 三、视频 四、流媒体服务器 五、收获 音视频技术在远程办公、在线教育、远程医疗等领域的应用广泛。 学习音视频技术有助于提升职业竞争力,满足市场需求。 掌握音视频基础知识对未来发展至关重要,基础不牢会导致后续学习…...
C++:enum枚举共用体union
enum枚举 C继承C的枚举用法 (1)典型枚举类型定义,枚举变量定义和使用 (2)枚举类型中的枚举值常量不能和其他外部常量名称冲突: 举例1宏定义,举例2另一个枚举 // 定义一个名为Color的枚举类型 enum Color {RED, // 红色,默认值…...
动手学深度学习(Pytorch版)代码实践 -计算机视觉-47转置卷积
47转置卷积 import torch from torch import nn from d2l import torch as d2l# 输入矩阵X和卷积核矩阵K实现基本的转置卷积运算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…...
LinkedIn被封原因和解封方法
对于初识领英和对领英生态规则不熟悉的人来说,很容易造成领英账号被封号(被限制登录)的情况,那么如何才能避免和解决领英帐号被封号(被限制登录)的难题呢? 领英帐号被封号或被限制登录主要会有两类情况。 首先要搞清楚, Linkedi…...
redis sentinel 部署
安装Redis 建议版本不要太低 > 6.2,我这里是redis 7.2.5 curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by/usr/share/keyrings/redis-archive-keyring.gpg] http…...
spring boot (shiro)+ websocket测试连接不上的简单检测处理
1、用前端连接测试的demo一切正常,但是到了项目中连接不上了 一开始以为是地址错,但是换了apifox测试也是不可以。 2、考虑是shiro进行了拦截了,所以就访问不到了地址,那么就放行。 3、再次用apifox测试,成功了。 当然…...
Jenkins - Python 虚拟环境
Jenkins - Python 虚拟环境 引言Python 虚拟环境创建 Python 虚拟环境安装 virtualenv(可选)创建虚拟环境激活虚拟环境安装依赖包退出虚拟环境(可选)注意 Python 虚拟环境实践 引言 Automation 脚本通常会部署到 Jenkins 上运行&…...
每日一道算法题 面试题 08.08. 有重复字符串的排列组合
题目 面试题 08.08. 有重复字符串的排列组合 - 力扣(LeetCode) Python class Solution:def permutation(self, S: str) -> List[str]:# 以索引记录字符是否用过lelen(S)idx[_ for _ in range(le) ]# 组合得到的字符串combine[]*leans[]# 递归def fu…...
Apache Kylin资源管理全指南:优化你的大数据架构
标题:Apache Kylin资源管理全指南:优化你的大数据架构 摘要 Apache Kylin是一个开源的分布式分析引擎,旨在为大规模数据集提供高性能的SQL查询能力。在Kylin中进行有效的资源管理对于确保查询性能和系统稳定性至关重要。本文将详细介绍如何…...
计算机网络微课堂(湖科大教书匠)TCP部分
计算机网络微课堂(湖科大教书匠)TCP部分 【计算机网络微课堂(有字幕无背景音乐版)】 TCP的流量控制 一般来说,我们希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收&#…...
C++ 字符串介绍
在C编程中,字符串是非常重要的数据类型之一。字符串用于表示文本信息,处理字符串是许多程序的基本需求。C提供了多种方式来处理字符串,包括C风格的字符串(C-strings)和C标准库中的std::string类。本文将介绍这两种字符…...
[Cloud Networking] BGP
1. AS (Autonomous System) 由于互联网规模庞大,所以网络会被分为许多 自治系统(AS-Autonomous system)。 所属类型ASN名称IPv4 数量IPv6数量运营商ISPAS3356LEVEL3 - Level 3 Parent, LLC, US29,798,83273,301,954,048互联网企业AS15169GO…...
Typora failed to export as pdf. undefined
变换版本并没有用,调整图片大小没有用 我看到一个博客后尝试出方案 我的方法 解决:从上图中的A4,变为其他,然后变回A4 然后到处成功,Amazing! 参考: Typora 导出PDF 报错 failed to export…...
windows 10 安装tcping 使用教程
1 官网下载:tcping下载 2 复制tcping 到win10系统目录C:\Windows\System32 3 tcping 网址测试,可以指定端口 4 tcping 测试端口联通 5 tcping http模式...
[leetcode hot 150]第一百二十二题,买卖股票的最佳时机Ⅱ
题目: 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大…...
openstack Y版在ubuntu22.04上不能创建超过8个cpu的虚拟机问题解决
环境 openstack 版本: Y版25.2.1 操作系统:ubuntu22.04 问题 创建16 vcpu的虚拟机,报错: Failed to build and run instance: libvirt.libvirtError: error from service: GDBus.Error:org.freedesktop.DBus.Error.InvalidArgs…...
全国31省细分产品出口数据集(2002-2022年)
数据简介:整理全国31个省直辖市自治区按hs码分的22类细分产品的出口数据,只包含22类的细分,不包含更细的类目。可用来计算出口产品质量,出口产品技术复杂度等指标,数据区间为2002-2022年。 数据名称:31省细…...
1,Windows-本地Linux 系统(WSL)
目录 第一步电脑设置 第二步安装Ubuntu 第三文件传递 开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。 通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arc…...
别再只盯着KNN了:聊聊Wi-Fi指纹定位中那些被低估的匹配算法与实战选择
超越KNN:Wi-Fi指纹定位中的高阶匹配算法与工程化选型指南 商场里找不到心仪店铺的焦虑、仓库中耗时的手动货品盘点、医院里紧急设备定位的延迟——这些场景背后都指向同一个技术痛点:室内定位精度不足。当大多数开发者习惯性采用KNN算法时,我…...
深度学习驱动的图像去雾:2023年最新算法与应用实践
1. 图像去雾技术的现状与挑战 清晨打开窗户,如果外面雾气弥漫,我们往往会等雾散了再拍照。但计算机视觉系统可没这个耐心——自动驾驶汽车必须实时看清路况,无人机巡检得在雾天正常工作。这就是图像去雾技术存在的意义。2023年,随…...
FanControl风扇控制软件:从噪音困扰到静音享受的完整指南
FanControl风扇控制软件:从噪音困扰到静音享受的完整指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending…...
Spring Boot 与 Serverless 集成最佳实践
Spring Boot 与 Serverless 集成最佳实践 引言 大家好,今天想和大家聊聊 Spring Boot 与 Serverless 的集成。Serverless 是一种云原生的计算模型,它允许开发者专注于代码开发,而不需要管理服务器基础设施。在 Spring Boot 应用中,…...
Beyond Compare 5 三步快速激活方案:从评估错误到专业版授权的完整指南
Beyond Compare 5 三步快速激活方案:从评估错误到专业版授权的完整指南 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5 作为业界领先的文件比对与合并工具…...
vue-beautiful-chat避坑指南:从安装配置到WebSocket实时通信的全流程解析
Vue2实时聊天组件深度实践:从vue-beautiful-chat配置到WebSocket全链路优化 当我们需要在Vue2项目中快速实现一个专业级聊天界面时,vue-beautiful-chat组件无疑是优雅的解决方案。但许多开发者在集成WebSocket实时通信功能时,常会遇到各种&q…...
HuTool代理请求遇阻:深入解析HTTP/1.1 407 Proxy Authentication Required的成因与实战解决方案
1. 当HuTool遇上407:代理认证失败的典型场景 最近在项目中使用HuTool发送HTTPS请求时,突然遇到一个让人头疼的错误——HTTP/1.1 407 Proxy Authentication Required。这个错误就像高速公路上的收费站,明明已经交了通行费(设置了代…...
如何快速上手uesave-rs:虚幻引擎存档编辑的终极指南
如何快速上手uesave-rs:虚幻引擎存档编辑的终极指南 【免费下载链接】uesave 项目地址: https://gitcode.com/gh_mirrors/ue/uesave 还在为无法修改心爱游戏的存档而烦恼吗?想要自定义游戏体验却不知从何下手?uesave-rs这款强大的Rus…...
ROS Noetic下大陆ARS408雷达点云数据解析:从CAN原始帧到RVIZ可视化,一个脚本全搞定
ROS Noetic下大陆ARS408雷达点云数据全链路解析与自动化实践 毫米波雷达在自动驾驶、机器人导航等领域扮演着关键角色。大陆ARS408作为一款高性价比的毫米波雷达,其点云数据的获取与可视化是许多开发者需要掌握的核心技能。本文将带您从底层CAN总线通信开始…...
STM32串口环形队列IAP固件更新方案
基于STM32串口环形队列的IAP实现方案1. 项目概述1.1 系统架构本方案实现了一种基于STM32F103C8T6微控制器的串口IAP(In-Application Programming)系统,采用环形队列缓冲机制解决有限SRAM空间下的固件更新问题。系统将64KB Flash空间划分为四个功能区域:B…...
