本文主要交流NVMe设计思路,在本博客已给出相关博文约四十篇,希望对初学者有用。注意这里只是抛砖引玉,切莫认为参考这就可以完成商用IP设计。
4) 删除队列边界测试结果
测试步骤 7 关键信号波形如图 1所示, 在创建一个 I/O 完成队列和提交队列后,连续删除 3 次 I/O 提交队列。 第一次删除成功, cr_status 返回值为 0, 表示队列成功删除, 对应的 sq_enable 也为 0, 表示队列不使能, 后续两次删除操作返回 cr_status值为 2, 表示操作数量错误。 同样对于 I/O 完成队列, 连续删除 3 次, 测试结果表示第一次成功删除, 后两次删除操作返回数量错误, 仿真行为符合设计预期, 测试通过。

图1 删除队列边界测试波形图
5) 操作顺序测试结果
测试步骤 8 关键信号波形如图 2 所示。 在没有创建 I/O 完成队列时, 先创建I/O 提交队列, 创建操作返回 cr_status 值为 8, 表示操作顺序错误, 没有新的队列创建, 也没有 NVMe 指令写入, 仿真行为符合设计预期, 测试通过。

图2 操作顺序测试波形图一
测试步骤 9 关键信号波形如图 3 所示。 在成功创建一个 I/O 完成队列和一个I/O 提交队列后, 删除 I/O 提交队列, 删除操作返回 cr_status 值为 8, 表示操作顺序错误, I/O 提交队列没有被删除, 也没有 NVMe 指令写入, 仿真行为符合设计预期,测试通过。

图3 操作顺序测试波形图二
|