tag 标签: pcie

相关帖子
相关博文
  • 2025-6-18 15:40
    87 次阅读|
    0 个评论
    它分为两部分,这里是第一部分。 NVM Express(NVMe)是一种高性能、可扩展的接口协议,用于通过PCI express(PCIe)总线,实现主机软件与NVM设备之间的通信。目前,由于NVMe SSD相比于SATA SSD具有更高的吞吐量、更快的访问速度和更低的功耗,已经被广泛应用于各种计算领域和存储系统。 # NVMe队列 NVMe协议采用成对的提交队列(Submission Queue,SQ)和完成队列(Completion Queue,CQ)机制。SQ用于存放提交命令,而CQ则用于存放完成信息。队列状态信息通过门铃寄存器(Door Bell,DB)来检测。这两个队列采用了环形队列结构,队列可以映射到任何PCIe可访问的内存中,通常放在主机侧内存。对于提交队列,主机端是生产者,NVMe SSD是消费者。完成队列的情况刚好相反。因此SQ Tail指针和CQ Head指针由主机更新,而其他两个指针由NVMe控制器更新。NVMe的队列结构如图1所示。 图1 队列示意图 NVMe队列的深度是固定的,通过Tail和Head来分别指向队列的首尾位置,队列实际可用的大小是队列大小减1,当Head条目指针等于Tail条目指针时,队列为空。当Head条目指针比Tail条目指针多一个时,队列为满。 NVMe协议中根据命令类型将队列分为了Admin队列和I/O队列,Admin队列用来缓存管理Admin命令,如获取SSD属性、创建I/O队列等。而I/O队列用来缓存管理I/O命令,如读、写、识别等。在一个系统中只能有一对Admin SQ/CQ,但可以存在多对IO SQ/CQ。Admin SQ/CQ仅用来进行Admin命令的交互,I/O SQ/CQ仅用来进行I/O命令的交互。对于多核系统来说,每个核内虽然只有1个I/O CQ,但是可以存在多个I/O SQ,如图2所示。 图2 NVME 多队列示意图 由于Host端可能存在多个流水线,多队列的设计可以让系统的性能最大化。同时,可以通过对不同的队列设置不同的优先级,来保证高优先级队列的命令更快完成。NVMe协议中规定Admin SQ/CQ的队列深度最大可以支持4096(4K),I/O SQ/CQ的队列深度最大可以支持65536(64K)。在一个实际设计中,SQ的个数和深度的设置可以根据项目需求和硬件资源进行配置。队列深度的设置主要和系统中队列消费者和生产者之间的速率有关。 # NVMe分层结构 NVMe协议栈结构分为应用层和传输层两个层次。在应用层中实现NVMe命令生成、队列管理和流程控制,而传输层则借助PCIe协议进行实现。PCIe协议分为三层,即事务层、数据链路层和物理层。事务层负责将数据传输请求和响应打包成事务进行传输,数据链路层则负责数据传输的可靠性和流控制,通过链路层控制器(Link Layer Controller, LLC)实现。物理层则负责物理传输,包括电信号的发射和接收、时序控制和线路管理等。其分层结构图如图3所示。首先,在应用层生成NVMe命令传输至事务层。其次,在事务层会对上层传输的数据添加首部和校验,封装成TLP(Transaction Level Packet)传输至数据链路层。然后,在数据链路层会对TLP添加序列号和校验,封装成DLLP。最后,在物理层对数据包进行编码和并转串处理后,通过SerDes(Serializer/Deserializer)将数据发送至PCIe链路中。 图3 NVMe 分层结构示意图 由于NVMe协议是基于PCIe协议实现的,下面通过在PCIe拓扑结构中介绍NVMe协议中的SQ、CQ和DB的位置,以及数据在Host和NVMe SSD之间的传输流程。NVMe SSD在PCIe拓扑结构中的位置如图4所示。 图4 PCIe拓扑结构图 PCIe的拓扑结构由三部分组成,根联合体(Root Complex, RC)、PCIe交换器(PCIe Switch)和端点(Endpoint, EP)。根联合体位于拓扑结构的根部,最靠近CPU。端点设备位于PCIe的端末。交换机位于根联合体和端点设备之间。PCIe使用串行链路连接,一个链路的两端只能有两个设备。因此PCIe需要通过PCIe Switch扩展PCIe链路后,才能连接多个EP设备。在NVMe存储结构中,NVMe SSD也作为PCIe的一个EP端挂载在RC上。 NVMe协议中的SQ和CQ位于Host内存中,主机在初始化时根据队列的个数和深度在主机内存开辟出相应的内存空间,来存放SQ、CQ命令。DB寄存器位于NVMe SSD中,且被映射到BAR(Base Address Register)空间中,Host可以通过访问BAR空间来更新DB寄存器的值。 当Host需要向NVMe SSD发送命令时,首先将命令存放在主机内存开辟的SQ区域中,其次通过访问BAR空间的DB寄存器来告诉NVMe SSD到主机端内存区域取走待执行的命令。待命令执行完成后,NVMe SSD向主机内存的CQ区域写入完成命令。 想进一步了解相关视频,请搜索B站用户:专注与守望 或者链接:https://space.bilibili.com/585132944/dynamic?spm_id_from=333.1365.list.card_title.click
  • 热度 7
    2025-6-2 23:35
    328 次阅读|
    0 个评论
    SSD优势 与机械硬盘(Hard Disk Driver, HDD)相比,基于Flash的SSD具有更快的数据随机访问速度、更快的传输速率和更低的功耗优势,已经被广泛应用于各种计算领域和存储系统。SSD最初遵循为HDD设计的现有主机接口协议,例如串行高级技术附件(Serial Advanced Technology Attachment, SATA)和串行附加SCSI(SAS)协议,随着SSD的不断发展,这些接口协议已成为关键的性能瓶颈。为了解决这一问题,存储供应商制定了一种新的接口规范,即NVMe协议。 NVMe协议必要性 NVMe协议是专为PCIe接口的SSD而设计的,旨在充分利用SSD内部的并行性实现可扩展性、高吞吐量和低延迟的目标。相较于SATA协议,NVMe协议具有以下几点优势:管理更高效、功能性更强、I/O效率更高、读写延迟和功耗更低。由于NVMe SSD与HDD和SATA/SAS SSD相比具有卓越的性能优势,云平台和数据中心已经开始为大量I/O密集型应用程序提供NVMe SSD。随着NVMe协议的不断完善,推出了NVMe-oF(NVMe over Fabrics)协议。NVMe-oF协议进一步扩展了NVMe协议在网络传输中的应用,该协议定义了使用多种通用的传输层协议来进行数据的传输,包括FC、InfiniBand、RoCE V2、iWARP和TCP。随着协议的不断完善,越来越多的系统和应用采用NVMe存储接口的SSD,这种技术将成为未来存储领域的主流。 NVMe研究进展 目前,一些国内外学者将NVMe SSD应用于嵌入式存储设备。例如Opsero公司的Jeff Johnson在Zynq上挂载NVMe SSD,借助Linux系统中的NVMe驱动程序实现了对NVMe SSD的控制,并在Zynq-7z030芯片上进行了测试,写速度为84.7 MB/s。西安电子科技大学的王琳琳基于Zynq完成了NVMe SSD的读写控制,通过在的PS端运行Linux系统,在PL端通过PCIe硬核IP连接NVMe SSD,实现了135 MB/s的写入速度和143 MB/s的读取速度。 将NVMe SSD应用于嵌入式存储设备相较于SATA SSD可以有效的提高系统的传输性能,但在嵌入式操作系统中,通过NVMe驱动程序来控制NVMe SSD,其性能与嵌入式CPU的主频以及软件协议栈的执行流程密切相关。NVMe Host端的命令需要经过文件系统层、块设备层、驱动层等多个层次的处理,同时NVMe协议栈中的队列设计、乱序执行、完成信息检查等流程也十分复杂,加之嵌入式处理器主频较低,使得其响应速度较慢,无法充分发挥NVMe SSD的速度优势。若想要在嵌入式系统中充分发挥NVMe协议的高速读写性能,一方面可以通过优化软件执行流程,来提高传输性能,但嵌入式处理器的性能较低,性能提升空间有限。另一方面可以通过硬件逻辑的方式来实现软件驱动程序。相较于软件的顺序执行,硬件电路可以通过并行执行来大幅度提高系统性能,这种方式更能充分发挥出NVMe协议高度并行的特点。
  • 2025-5-26 17:00
    293 次阅读|
    0 个评论
    NVMe高速传输之摆脱XDMA设计2
    NVMe IP放弃XDMA原因 选用XDMA做NVMe IP的关键传输模块,可以加速IP的设计,但是XDMA对于开发者来说,还是不方便,原因是它就象一个黑匣子,调试也非一番周折,尤其是后面PCIe4.0升级。 因此决定直接采用PCIe设计,虽然要费一番周折,但是目前看,还是值得的,uvm验证也更清晰。 PCIe 请求模块设计 请求模块的具体任务是将系统的请求转换成为axis接口形式的TLP或配置管理接口信号。这些请求主要包含初始化配置请求和门铃写请求。初始化配置请求由初始化模块发起,当配置请求的总线号为0时,请求通过Cfg_mgmt接口发送给PCIE集成块;当配置请求的总线号不为0时,请求以PCIe配置请求TLP的格式从axis_rq接口发送到PCIE集成块,然后由硬核驱动数据链路层和物理层通过PCIe接口发送给下游设备,下游设备的反馈通过axis_rc接口以Cpl或CplD的形式传回。门铃写请求由NVMe控制模块发起,请求以PCIe存储器写请求TLP的格式从axis_rq接口交由PCIE集成块发送。 由于发起请求的模块存在多个,并且在时间顺序上初始化模块先占用请求,NVMe控制模块后占用请求,不会出现请求的竞争,因此设置一条内部请求总线用于发起请求和接收响应,该请求总线也作为请求模块的上游接口。请求模块的请求总线接口说明如表1所示。无论是配置请求还是门铃写请求,请求的数据长度都只有一个双字,因此设置读写数据位宽均为32比特。 表1 请求总线接口 在接收到请求总线接口的请求事务后,当请求类型的值为0时,表示通过PCIE集成块的配置管理接口发送请求,由于请求接口的接口和时序与配置管理接口基本一致,因此此时直接将请求接口信号驱动到配置管理接口完成请求的发送,请求读数据和响应也通过选通器连接到配置管理接口。当请求类型值不为0时,则需要将请求转换为TLP以axis接口形式发送,这一过程通过请求状态机实现,请求状态机的状态转移图如图2所示。 图2 PCIe请求状态转移图 各状态说明如下: IDLE:空闲状态,复位后的初始状态。当请求写有效或请求读有效,且请求类型值不为0时,如果请求写有效跳转到WR_HEAD状态,如果请求读有效或读写同时有效跳转到RD_HEAD状态,否则保持IDLE状态。实际的上层设计中读写请求不会同时发生,这里的状态跳转条件增加了读优先设计,从而避免异常情况的出现。 WR_HEAD:请求写TLP头发送状态。该状态下根据请求类型、请求地址组装写请求的TLP报文头部,并将报文头部通过axis_rq接口发送。当axis_rq接口握手时跳转到WR_DATA状态。 WR_DATA:请求写TLP数据发送状态。该状态下将请求写的数据通过axis_rq接口发送,当axis_rq接口握手时跳转到DONE状态。 RD_HEAD:请求读TLP头发送状态。该状态下组装读请求TLP报头通过axis_rq接口发送,当接口握手时跳转到RD_DATA状态。 RD_DATA:请求读CplD接收状态。该状态下监测axis_rc接口信号,当出现数据传输有效时,启动握手并接受数据,然后跳转到DONE状态。 DONE:请求完成状态。该状态下使能req_ack请求响应信号,如果是读请求同时将RD_DATA状态下接收的数据发送到req_rdata请求读数据接口。一个时钟周期后回到IDLE状态。
  • 热度 1
    2025-5-26 16:51
    309 次阅读|
    0 个评论
    NVMe高速传输之摆脱XDMA设计1
    NVMe IP放弃XDMA原因 选用XDMA做NVMe IP的关键传输模块,可以加速IP的设计,但是XDMA对于开发者来说,还是不方便,原因是它就象一个黑匣子,调试也非一番周折,尤其是后面PCIe4.0升级。 因此决定直接采用PCIe设计,虽然要费一番周折,但是目前看,还是值得的,uvm验证也更清晰。 对相关视频demo感兴趣者,请移步B站:搜用户名: 专注与守望 或链接:https://space.bilibili.com/585132944/upload/video PCIe 加速模块设计 PCIe 加速模块负责处理PCIe事务层,并将其与NVMe功能和AXI接口直接绑定。如图1所示,PCIe加速模块按照请求发起方分为请求模块和应答模块。请求模块负责将内部请求事务转换为配置管理接口信号或axis请求方请求接口信号(axis_rq),以及解析 axis 请求方完成接口信号(axis_rc);应答模块负责接收axis完成方请求接口信号(axis_cq),将请求内容转换为AXI4接口信号或其它内部信号 做进一步处理,同时将应答事务通过axis完成方完成接口axis_cc)发送给PCIE集成块. 图1 PCIe加速模块结构和连接关系图 PCIe 加速模块不仅承担了TLP与其它接口信号的转换功能,也是降低传输延迟增加吞吐量的核心部件。接下来分别对请求模块和应答模块的结构设计进行具体分析。
  • 2025-3-26 11:07
    0 个评论
    XC7VX690 JFM7VX690 PCIE3.0信号处理模块 FPGA开发板 信号处理板
    PCIe-404全国产化信号处理模块为标准PCIe全高的结构,对外支持PCIe3.0×8通信,也可以采用千兆以太网(RJ45连接器)、万兆以太网(或RapidIO、Aurora,QSFP+连接器)接口进行通信,支持多板级联,模块为100%国产化设计(同时也兼容进口器件)。FPGA芯片可选JFM7VX690T、SMQ7VX690T、BQR7VX690T,两组DDR3的存储容量分别可配置为2~4GByte。板载有1个FMC+(兼容FMC子板)全互联的接口,满足VITA57.1和VITA57.4规范,可以适配大多数ADC/DAC FMC或FMC+子卡。 应用行业: 无线电监测与测向定位、软件无线电处理平台 通信、卫星、雷达、图像等信号处理 数据采集存储、波形生成与回放 高速接口控制、脉冲处理、测控仪器 高性能计算、万兆或PCIe服务器硬件加速、算法验证平台、Net FPGA 产品特点 : 国产化率100%,与进口器件兼容 FPGA:可选配JFM7VX690T36、SMQ7VX690T、XC7V690T-2I FMC+HPC,24路GTX,LA、HA、HB都全互联,可适配各种FMC AD/DA卡,可适配国内外标准的各种FMC或FMC+子卡 板卡采用QSFP+连接器互联,带宽≥5GB/s 单电源+7.5V~+12V供电,支持插入标准服务器或单独千兆、万兆网口使用 板载GPS/BD模块,也支持IRIG-B码时统输入 使用50A电源对其供电,保证在FPGA全资源使用和高低温下工作稳定可靠 具有输入电压、电流监测功能 具有输入反接、过压、过流、过热保护功能 具有板载温度监测功能,支持2个4线风扇口管理 支持板载扩展FLASH(32kb EEPROM、256Mbit~256Gbit数据存储Flash) 可以支持FPGA多版本动态下载 UD PCIe-404 产品原理框图: 主要技术参数: 产品配置: PCIe3.0x8接口,支持带宽≥5GB/s 2组独立DDR3:64bit位宽,最大速率1600Mb/s,紫光2GB、4GB可选配 GPS/BD定位:中科微电子,带秒脉冲 4路光接口:QSFP+,支持UDP/IP、TCP/IP、RapidIO、Aurora协议,速率≥10.3125Gbps,可用于多板级联 温度监控:贴片GX18B20,可以检测PCB板、环境或散热片温度 电压监控:FPGA自带电压监控功能 LED灯:电源指示灯2颗,状态指示灯10颗 支持外触发、外时钟功能 FMC+接口:兼容FMC规范 对外接口: GPIO口:分2组各8路,共16路,支持3.3V或5V,速率最高40MHz RS232口:2路标准RS232电平,速率最高120Kbps RS422口:1路全双工,速率最高12Mbps,兼容RS485电平,可用于B码 RS485口:2路半双工,速率最高12Mbps,兼容RS422电平 千兆网口:1路,RJ45连接器, 支持10M/100M/1000M BASE-T 万兆网口:4路,QSFP+连接器,支持UDP/TCP协议(可做多卡级联用) 外触发接口:SMA,外接信号经过滞回比较器后再到FPGA,3.3V或5V电平 外时钟接口:两个SMA,外接差分信号直接到时钟分配芯片 外接电源口:直流+7.5V~+12V 输出电源:支持输出(500mA电流)+12V或+5V或+3.3V供外接天线使用 JTAG接口:支持2.0间接双排14芯连接器连接到下载器,有电平驱动和保护 其它特性: PCB板尺寸: 111.15mm ×220mm DC +7.5V~+12V(±5%),功耗15~55W(根据FPGA的频率和使用资源消耗) 工作温度:‐20~+70℃、‐40~+85℃、‐55~+85℃可选 测试程序: FPGA的所有管脚已例化 FPGA读写DDR3的IP、RS232/485/422/GPIO接口回环、PCIe接口识别到卡、获取GX18B20温度、千兆以太网PHY与计算机联通IP、LED跑马灯
相关资源