FPGA SATA高速存储设计 今天来讲一篇如何在fpga上实现sata ip,然后利用sata ip实现读写sata 盘的目的,如果需要再速度和容量上增加,那么仅仅需要增加sata ip个数就能够实现增加sata盘,如果仅仅实现data的读写整体来说sata ip设计比较简单,下面从sata 协议角度来聊聊sata ip应该如何实现。下图就是在FPGA上实现3张SATA SSD硬盘组成RAID0的结构图。
FPGA NVME高速存储设计 690T高速存储硬件设计框图如下,switch下面挂载6张ssd,一路x8 到fpga host,1路x8到fpga ep,pcie端采用nvme ip实现ssd盘的读写,40Gbps以太网数据,以及多通道的srio和GTX数据,整个架构中最核心的就是nvme ip,nvme ip扮演了大脑的角色,负责枚举ssd,分配地址,以及nvme协议处理等。关于nvme ip资源消耗情况,目前整个高速存储使用的资源如下,其实代码中有个细节可以优化很多bram接口,因为前期设计考虑冗余了,导致资源消耗过多。
zynq qemu模拟器环境搭建 qemu是硬件模拟器,方便有些同学没得开发板想验证一些driver是否在指定板卡上可以测试,qemu就实现了该功能,选择qemu模拟器最好是选择cpu厂商指定qemu源码,这样测试结果更加逼真。方法二:通过peatalinux工具和xsa硬件描述文件生成zImage和dts,rootfs文件等,这种方法比较常见,因为xsa文件通过vivado生成,在有真实的硬件环境,开发流程可以保持一致。通过petalinux编译生成的zImage,dtb和rootfs后,就可以启动qemu。2. 准备内核和dtb文件。
ubuntu22.04 修改内核源码教程 sudo make menuconfig ##什么都不用做 就保存。sudo make -jn #n就是上面查找的CPU核数量。到此为止就编译完成了,然后重启电脑就要可以看到修改的源码已经生效。2. 去ubuntu官网下载对应版本内核源码。将下图箭头部分配置成空,不然编译会报错。1. 确认当前内核版本。修改源码后开始编译代码。
zynq多host高速存储方案设计 前面文章讲解了《zynq高速存储方案》,那种方案是针对单个pcie host设计的方案,当项目需求记录速度很高,并且没有国产化要求时,可以考虑使用Zynq UltraScale+ 系列的ZU11EG芯片,该芯片成本低,且支持4个PCIe硬核,可以将该4个pcie都配置成host模式,在每个host下挂载pcie 3.0 x4的SSD固态硬盘,这样每个pcie host能够跑的速率就是ssd盘能够支持的最大速率,如果选择三星的SSD盘,那么PCIe3.0 x4读写速率能够到3GB/s,那么4个...
zynq nvme高速存储之ext4文件系统 前面文章分析了高速存储的各种方案,目前主流的三种存储方案是,pcie + switch高速存储方案,zynq高速存储方案,fpga高速存储方案。虽然三种高速存储方案都可以实现高速存储,但是fpga高速存储方案是最烂的,fpga存储方案在速度上没有前两种高,对于Error Handler上处理也不友好,同时fpga高速存储方案不支持标准的EXT4文件,不能够支持NFS文件系统等,所以有读者向我咨询高速存储方案,我会毫不犹豫的推荐前面两种。对于pcie + switch高速存储方案硬件框图如下。
ftp/nfs卸载自定义文件系统数据 在存储领域对于数据卸载有很多种方式,比如通过高速GTX接口流模式卸载,或者通过网络卸载数据,通过网络卸载数据可以开发上位机定制化卸载数据,但是开发上位机软件比较麻烦,已经需要安装软件,软件容易出现BUG等诸多问题,这篇文章分享通过自定义文件系统管理数据,并且通过windos自带的nfs客户端卸载存储办卡中的数据,windos端通过nfs映射磁盘到共享文件夹,用户看到的储存办卡存储空间就像看电脑本地磁盘一样方便,这种方式安全可靠,不需要专门定制客户端,并且具有通用性,并且客户是最喜欢这种方式卸...
PCIe+Switch高速存储方案设计 上篇文章分享了《zynq高速存储方案》,zynq存储方案实现了1.2GB/s的存储速率,这篇文章分享pcie+switch常规方案,这种方案在存储领域很常见,目前作者实现switch方案存储速度有5GB/s和6.5GB/s,以及没有国产化要求并且不使用switch方案储存速率5GB/s。具体速度多少根实际的SSD盘数和switch选择都有很大关系,高速存储在设计存储方案时会有很多考虑,比如是否全国产化,速度指标,SSD盘容量,数据是否需要备份,硬件成本,开发难度系数等诸多因素,只有结合实际项...
linux系统raid0测试实验 本篇文章介绍嵌入式平台linux系统中raid0如何使用,并了解raid0磁盘阵列的工作原理,在后面文章中介绍pcie+switch存储方案raid0阵列的实现。在linux系统中raid0配置使用的mdadm命令,在嵌入式平台中,mdadm命令一般默认是没有的,需要手动安装mdadm命令。本次编写块设备驱动用两片内存模拟磁盘做raid0,在块设备中提供读写内存接口,打印内存接口,方便跟踪mdadm命令工作原理。安装mdadm命令下载mdadm.tar.gz tar –xzvf m...
全网最全PCIe枚举算法分析(以ZYNQ平台实例讲解) 本篇文章分析PCIe上电是如何枚举的,BAR空间访问在以前文章已经讲解,可以参考《从cpu角度理解PCIe》和《从cpu角度理解PCIe续集》。本文篇幅较长,读者需要耐心阅读。PCIe上电枚举算法主要是分配总线号和分配BAR空间,分配的总线号用于访问配置空间,BAR空间用于与PCIe设备进行数据交互。PCIe协议包括物理层,链路层和事务层,本次分析从事务层开始着手,事务层数据交互的单元是TLP包,TLP有公共的头部和载荷数据,载荷数据最大为4KB,根据公共头部TLP可以分...
zynq srio枚举id方案设计 常见的SRIO枚举分配ID操作在Powerc平台比较常见,本文使用zynq7045实现SRIO枚举功能,PL端有SRIO IP,只需要将AXI维护端口挂到AXI-GP接口上,PS软件就可以通过AXI总线访问SRIO IP实现枚举自动分配ID功能。本次测试硬件拓扑图如下图所示。srio交换芯片采用的时1848交换芯片,SRIO1和SRIO2本次实验室环回到ZYNQ的SRIOIP上,也可以直接将端口引到外部让用户使用,本次方便实验分析和抓信号,SRIO三个x4的IP都是...
zynq实现二层网络加密转发 二层网络加密转发是加密端将所有二层网络数据实现加密,然后发送出去,接收端接收到数据后解密,然后以二层报文发送出去。常规的网络加密仅仅局限于网络应用数据加密,对底层的ARP(IP地址到MAC地址的解析,可通过ARP广播包寻找MAC地址),ICMP(ping命令),IP(TCP和UDP的下一层)包通通实现加密传输。
高效无锁环形队列 在linux零拷贝技术中提到高效无锁环形队列,这篇文章分享这个知识点,这个知识点不是很复杂。环形队列多用于多线程之间数据异步传输,提高数据处理性能。下面介绍常规环形队列和高效无锁队列两种处理方式。常规环形队列如下图所示,队列头代表写指针,队列尾代表读指针,通过判断读写的位置判断队列是否为空,是否满,通过线程锁来保证读写指针在使用时只被一个线程使用,从而保证数据不会出错。(出错原因,当一个线程在对读写指针修改时,调度器将该线程切换出去访问另外一个线程,如果该线程正好也会对读写指针进行修改,那么就会导致读写指
linux内核零拷贝技术 1. 设计思想零拷贝技术主要用于磁盘数据通过网络进行交互,常见用法卸载磁盘文件从网络发送出去。常规的卸载文件方法流程如下所示。从上图可以看出软件流程一共复制了4次数据,内核态到用户态切换4次。读操作(复制两次,上下文切换两次):1.用户进程通过 read() 函数向内核(kernel)发起系统调用,上下文从用户态(user space)切换为内核态(kernel space)2.CPU利用DMA控制器将数据从主存或硬盘拷贝到内核空间(kernel space)的读缓冲区(read buffer)
zynq/nvme/ext4/fpga高速存储设计 1.概述很久没有写文章了,有空余时间还是分享一点技术干货。今天写一下zynq+nvme高速存储设计思想,zynq处理器是将ARM和FPGA集成在一起的处理器,区别于以前ARM+FPGA的板间架构,采用AXI内部总线实现ARM和FPGA内部的通讯,支持低速AXI-GP接口(类型Local Bus),高速AXI-HP接口,ARM端简称PS,FPGA端简称PL。如果数据过PS端,那么数据会经过HP接口,软件上的数据解析和拷贝,这样存储速率大约为130MB/s,速率比较慢,所以就引入了本文方案,控制走PS,数据P
以太网PHY寄存器分析 以太网PHY寄存器分析 11、以太网PHY标准寄存器分析 21.1 Control Register 21.2 Status register 51.3 PHY Identifier Register &...