gpt4 book ai didi

emulation - 如何为仿真提供正确的速度?

转载 作者:行者123 更新时间:2023-12-02 20:00:38 27 4
gpt4 key购买 nike

我想为运行速度在 600 千赫兹左右的特别慢的 CPU 编写一个模拟器。如果我以简单的方式为 CPU 编写一个模拟器(即一次模拟一条指令而不做任何其他事情),那么模拟速度将比 600 kHz 快得多。

如何对模拟器进行编程,使其以正确的速度模拟 CPU,而不管主机的速度如何?现实世界的模拟器通常使用什么技术来做到这一点?如何避免抖动减慢仿真速度?

最佳答案

在典型的平台上,唯一可用的“周期性事件”是不准确的和低频的,当然不像 0.6MHz。但是使用“慢速”计时器(可能是 100Hz 左右),您可以“运行许多短冲刺”,在中间有足够的时间“休息”,平均而言,您可以模拟每秒正确的周期数。时间通常可以相当准确地测量,因此您可以在每个“冲刺”中精确模拟正确的周期数。

在较高的层面上,这可能看起来像这样:

int cycle_budget = 0;
time last_sprint = something;

// on timer fire
cycle_budget += (current_time - last_sprint) * clock_rate;
last_sprint = current_time;
while (cycle_budget >= slowest_instruction)
tick(); // emulates one instruction, subtracts from cycle_budget

有一些明显的变化,例如,您可以让预算为负值,而不是测试是否有足够的资金来运行慢速指令。或者您可以解码指令,然后测试是否有足够的预算来运行它。这一切都假设一条指令不会花费任意长的时间,但据我所知,这从来都不是问题(即使是像 z80 的字符串指令,它们实际上是通过分支返回并重新执行自身来循环的)。

关于emulation - 如何为仿真提供正确的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25828370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com