FPGA搭建nvme读写硬盘系统探索
FPGA搭建nvme读写硬盘系统。 cpu通过pcie模块操作硬盘读写。 图片是sdk下面枚举到硬盘过程中的打印。 FPGA用的是xc7z100ps跑的Linuxpl用pciex1接到硬盘x4也可以的最近搞了个挺有意思的项目用FPGA搭建nvme读写硬盘系统今天来和大家分享一下过程中的一些经验和发现。咱这个系统呢是通过cpu借助pcie模块来操作硬盘读写的。先说说硬件方面FPGA用的是xc7z100ps跑的Linuxpl则通过pciex1接到硬盘其实用pciex4也是没问题的哈。在这个过程中有个很关键的步骤就是通过SDK枚举硬盘。当我在SDK下面进行枚举硬盘操作时会有一系列的打印信息这些打印就像是系统和硬盘之间沟通的桥梁能让我们清楚地看到枚举过程中的各种状态。FPGA搭建nvme读写硬盘系统。 cpu通过pcie模块操作硬盘读写。 图片是sdk下面枚举到硬盘过程中的打印。 FPGA用的是xc7z100ps跑的Linuxpl用pciex1接到硬盘x4也可以的下面简单说一下代码部分吧。在进行pcie相关的配置时会有类似这样的代码module pcie_config ( input wire clk, input wire rst_n, // 其他相关信号 ); // 这里定义一些内部信号 wire [31:0] config_data; // pcie配置的具体逻辑实现 always (posedge clk or negedge rst_n) begin if (!rst_n) begin // 初始化一些状态 end else begin // 进行配置数据的生成和发送等操作 config_data {32{1b0}}; // 这里根据具体的协议和需求填充config_data // 比如设置pcie的工作模式、速率等参数 end end endmodule这段代码呢就是负责pcie配置的模块。在时钟上升沿或者复位信号有效时会进行相应的操作。复位时会初始化一些状态正常工作时会生成并发送配置数据。这里把配置数据初始化为全0然后根据实际情况去填充它像设置pcie的工作模式、速率这些关键参数都要在这里精心调整。再来说说硬盘读写的代码部分。module nvme_disk_io ( input wire clk, input wire rst_n, // 与pcie交互的信号 input wire [511:0] pcie_read_data, output reg [511:0] pcie_write_data, // 与硬盘交互的信号 output reg [31:0] disk_addr, output reg [511:0] disk_write_data, input wire [511:0] disk_read_data ); // 读写命令相关信号 reg read_cmd; reg write_cmd; always (posedge clk or negedge rst_n) begin if (!rst_n) begin // 复位各种信号状态 read_cmd 1b0; write_cmd 1b0; disk_addr {32{1b0}}; pcie_write_data {512{1b0}}; end else begin // 根据pcie传来的数据判断读写操作 if (pcie_read_data[511:510] 2b01) begin read_cmd 1b1; disk_addr pcie_read_data[31:0]; end else if (pcie_read_data[511:510] 2b10) begin write_cmd 1b1; disk_addr pcie_read_data[31:0]; pcie_write_data pcie_read_data[511:0]; end // 与硬盘进行实际的数据交互 if (read_cmd) begin // 这里发送读命令到硬盘并等待读取数据 disk_read_data disk_read_data; end if (write_cmd) begin // 这里发送写命令到硬盘并写入数据 disk_write_data pcie_write_data; end end end endmodule这段代码负责处理nvme硬盘的读写操作。根据从pcie接收到的数据判断是读操作还是写操作然后相应地设置读写命令和硬盘地址等信息。在时钟上升沿或者复位信号有效时进行状态的更新。当接收到读命令时会向硬盘发送读请求并等待读取数据接收到写命令时会向硬盘发送写请求并写入数据。这里通过巧妙地判断和处理不同的命令实现了硬盘读写的控制。整个搭建过程中遇到了不少问题像是信号同步的问题啦协议兼容性的问题等等。不过通过不断地调试代码、查看打印信息一个个都被解决啦。感觉自己又积累了不少宝贵的经验也希望能给有同样需求的小伙伴们一些参考和启发呀。#FPGA #nvme #硬盘读写 #pcie
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2429332.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!