高速ssd存储系统中数据缓存控制器流程控制设计

描述

流程控制模块的框图如图1所示,该模块主要由寄存器、读状态机、写状态机和命令生成模块组成。

存储系统

图1 流程控制模块框图

流程控制模块的工作首先从配置模块中的寄存器组开始,由于只需要配置四个寄存器,因此使用资源占用较小的AXI_Lite总线接口来实现。表1所示为流程控制模块内寄存器的类型与功能描述等信息。

存储系统

表1中的操作码寄存器(OPCODE)用于表示命令类型,流程控制模块通过操作码寄存器不同的值来组装相应的NVMe命令,本设计主要实现了NVMe协议中常用的识别、读、写、SMART、FLUSH以及关机命令。数据地址寄存器(ADDR)用于指定要读取的数据块的起始地址。数据块大小寄存器(SIZE)用于指定要读取的数据块的大小。状态寄存器(STATUS)为只读状态,用来指示当前控制器的状态信息。

为了提升系统性能,将读写划分为两个传输通道,每个通道可独立工作。因此需要通过两个状态机来实现了读写控制。同时,采用乒乓操作的方式进行读写,通过A和B两个缓存区之间的切换来使输入输出数据可以无间断地进行传输,并减小NVMe命令执行过程中产生的延迟。

读状态机跳转图如图2所示。

存储系统

图2 状态机跳转图

写状态机跳转图如图3所示。

存储系统

图3  写状态机跳转图

各状态说明如下:

IDLE:空闲状态,该状态为该模块上电后的初始化状态,在该状态下等待接口转换模块输入的empty信号为低电平时,表示有数据输入,状态跳转至SW_A状态,否则维持在IDLE状态。

SW_A:发送A区域写命令状态,该状态下等待缓存区域A存满后,控制命令生成模块组装区域A的NVMe写命令并通过AXI4_Stream接口发送给NVMe Host控制器。发送完成后若b_busy信号有效且empty信号为低电平时,状态跳转至WAIT,若b_busy信号为低电平且empty信号为低电平时,状态跳转至SC_B状态,此外,在设计中还添加了超时检测机制,通过计数器实现,当长时间无数据输入时,则控制命令生成模块组装相应大小的NVMe写命令,发送至NVMe Host控制器。

SW_B:发送B区域写命令状态,该状态下根据接口转换模块输入的转换数据量信息生成相应的NVMe写命令并通过AXI4_Stream接口发送给NVMe Host控制器。发送完成后若a_busy信号有效且empty信号为低电平时,状态跳转至WAIT,若a_busy信号为低电平且empty信号为低电平时,状态跳转至SC_A状态,该状态下同样使用超时检测。

WAIT:等待状态,在该状态下等待NVMe Host控制器返回done信号,表示命令执行完毕。若上一个状态为SW_A,检测到done信号有效后,且buf_cnt的值不为0,则状态跳转至SW_B。若上一个状态为SW_B,检测到done信号有效后,且buf_cnt的值不为0,则状态跳转至SW_A。否则状态跳转至IDLE。

对它感兴趣,想看视频搜B站用户名:  z专注与守望

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分