Nvme控制器设计笔记

小结

1.axi
2.Nvme控制器的设计

简介

1.axi总线有五大接口,其中读写通道是独立的,写地址、写数据、写读地址、读数据、写响应。
2.axi总线分为axi-lite axi-full和axi-stream,其中axi-lite是传输一些控制信号、axi-stream传输数据流,没有地址映射,因此只能点对点、axi-full可以支持突发传输,其中突发传输的数量可以配置XXlen接口


2.Nvme控制器外部与ddr、ps端、xdma连接

  • 其中ps端通过s-axi-lite接口对nvme进行指令寄存器的配置,对xdma进行初始化(BAR空间?)的配置
  • Nvme随后进行指令的组装,确定工作模式是否为数据流;
  • 假如为数据流模式,则要先判断指令为读还是写,读指令需要先组装指令再等待数据读入DDR,进行数据流的转换;写指令需要先将数据流转换为DDR中的缓存,再组装指令,模块通过M-axi-DDR控制DDR的读和写;
  • 组装后的指令根据指令的类别存入fifo缓存中,等待进入SQ,其中SQ又分为admin SQ和若干个IO SQ,当指令的数量到达一定阈值或指令计数器到达一个数时,仲裁模块就会将指令根据一定的策略存入队列中,此外由于SSD处理指令可能会乱序,因此要给每个指令分配单独的ID,等到处理完毕再释放ID号,在此文献中队列存储在BRAM中(速度快),在其他文献中也有存放至DDR中的;
  • 当队列的指令到达一定数量时,会发送门铃信息,此时队列暂停仲裁判断,等待门铃信息发送完毕的标志再进行后续的指令处理,门铃信息也使用axi-lite进行传输;
  • 在发送门铃信息之后,模块会等待SSD的读指令命令,再将命令发送出去,这里SSD作为主机;最后接收完成指令,存入完成队列。
  • 当然这篇文献中也有困惑的地方,比如给出的Block design图和实现方案并不能很好的对应
    (设计参考文献:基于Zynq的Nvme控制器设计与实现)

你可能感兴趣的:(fpga开发)