Answers:
CPU验证的整个问题非常庞大且困难。有些人就是以此为职业。我只给您概述...
编写一个汇编语言程序,以测试每条指令和每条指令的每个微小细节。例如,在测试ADD指令时,您可以同时使用正号,负号和每个数字(两次)来测试它。然后,您将测试进位标志,零标志等。CPU的其他特殊功能(例如分支预测等)在此测试中将有其自己的特殊部分。
使用C / C ++或类似的东西编写您的CPU模型。这是您的虚拟CPU。这也是您的“黄金CPU”,这意味着这是其他所有对象所比较的CPU。理想情况下,编写VHDL 的人与编写C / C ++模型的人不是同一个人。
编写/创建一个系统,在其中可以并行运行C / C ++模型和VHDL模型,并逐周期比较结果。从步骤1运行您的汇编程序,并确保两个模型匹配。
在随机的“指令”上运行两个模型。基本上,用随机数据填充“ ram”,然后像执行真实指令一样执行该随机数据。在VHDL和C / C ++模型上运行相同的随机数据,然后比较结果。此C / C ++模型将在某些工作站和/或服务器(而不是新的CPU本身)上运行。
设置一台或多台计算机,以永久永久重复步骤4。即使您的CPU已“完成”并且已经投入生产一年或更长时间,您仍将运行此测试。
每当有更多要模拟的东西时,请重复这些步骤。例如,您可以在路由后的VHDL上运行它,并提供可用的时间。
无法保证比较VHDL和C / C ++版本会捕获每个错误-确实没有更好的方法。在随机指令上测试CPU需要花费时间,但这也非常有用。唯一的替代方案是雇用很多人整天编写代码来测试CPU的不同部分-大型公司也这样做,但他们也从事随机数据工作。
对于编写VHDL代码的个人来说,通常只需执行步骤1。但是,如果您打算出售CPU,那么至少应该执行其他一些步骤(实际上,您应该全部完成这些步骤)。