软 CPU 验证

电器工程 FPGA 视频文件 中央处理器 测试
2022-01-09 18:34:46

我目前正在使用 Xilinx ISE 和 ISIM 在 VHDL 中设计一个简单的 CPU。设计部分进展非常顺利,但我似乎无法找到一种以一致方式进行验证的方法。

现在我有一个 VHDL 测试台,我更新它以测试我在任何特定时刻正在处理的功能。这是非常临时的,它不能帮助我捕捉回归,也不能用于验证是否符合规范/指令集。

我曾考虑开发一个广泛的测试套件,但问题是通用部件作为 CPU 的潜在状态与不太通用的组件相比是巨大的。

我正在寻找一种允许我以更可控的方式执行设计和测试的方法。如果您愿意,可以使用某种“硬件 TDD”。这样的事情存在吗?它可以相对容易地应用于 CPU 等通用部件吗?

1个回答

整个CPU验证问题超大难度。有些人就是以此为职业。我只是给你一个概述...

  1. 编写一个汇编语言程序来测试每条指令和每条指令的每一个微小细节。例如,在测试 ADD 指令时,您可能会使用既是正数又是负数的数字来测试它,并且每个数字都是一个(两次)。然后,您将测试进位标志、零标志等。CPU 的其他特殊功能(如分支预测等)将在此测试中有自己的特殊部分。

  2. 使用 C/C++ 或其他工具编写您的 CPU 模型。这是您的虚拟 CPU。这也是您的“黄金 CPU”,这意味着这是与其他所有东西相比的 CPU。理想情况下,编写 VHDL人与编写 C/C++ 模型的人不同。

  3. 编写/创建一个系统,您可以在其中并排运行 C/C++ 模型和 VHDL 模型,并逐个周期地比较结果。从步骤 1 运行您的装配程序,并确保两个模型匹配。

  4. 根据随机“指令”运行您的两个模型。基本上,用随机数据填充“ram”并执行该随机数据,就好像它是真正的指令一样。在 VHDL 和 C/C++ 模型上运行相同的随机数据并比较结果。此 C/C++ 模型将在某些工作站和/或服务器(而不是新 CPU 本身)上运行。

  5. 设置一台或多台机器,基本上永远重复第 4 步。即使您的 CPU 已“完成”并且已经投入生产一年或更长时间,您仍将运行此测试。

  6. 只要有更多的东西要模拟,就重复这些步骤。例如,您可以在路由后 VHDL 上运行它,并在可用时使用时序。

无法保证比较 VHDL 和 C/C++ 版本会发现每一个错误——但确实没有更好的方法。在随机指令上测试 CPU 需要时间,但这也非常有用。唯一真正的替代方法是雇佣很多人整天编写代码来测试 CPU 的不同部分——大公司这样做,但他们也做随机数据的事情。

对于一个编写 VHDL 代码的人来说,通常只需完成第 1 步。但是,如果您要出售 CPU,那么至少应该完成其他一些步骤(实际上,您应该全部完成)。