3

我正在编写一个(非常缓慢和原始的)处理器的模拟。

例如:假设时钟速度是恒定的 1 hz。我假设这意味着每秒可以/将处理 1 条指令。有些指令比其他指令需要更长的时间。添加 1 + 0 比 1 + 7 花费更少的时间。(后者会导致进位位的波动,这需要非零的时间量。)

只有在所有其他指令完成后,我才需要能够执行指令。

我需要:

  1. time 最长指令需要多长时间并将时钟速度设置为大于该时间?
  2. 创建一个有状态的观察者,在前一个指令完成之前不允许执行未来的指令
  3. 我完全误解了这个问题吗?

在#1中,似乎我仍然冒着在下一个开始之前指令不完整的竞争条件的风险。在 #2 中,似乎我冒着不可预测/可变时钟速度的风险,这可能会导致我以后出现问题。

我该如何解决这个问题?有没有关于真正的处理器如何处理这个问题的提示?

4

4 回答 4

3

你熟悉指令流水线吗?

于 2009-03-21T05:44:05.947 回答
3

首先,处理器每个时钟周期执行一组微指令,这些通常涉及诸如将总线切换到寄存器或 ALU(算术逻辑单元)之类的事情,下一条微指令可能会为寄存器或 ALU 计时以处理数据在一辆公交车上。大多数汇编级指令都是由一系列微指令组成的。一条加法指令只需要几条微指令,但除法可能需要更多。大多数微控制器记录每个汇编级指令需要多少个周期。

对于更复杂的微控制器,还有一条指令管道(如 cat 所述),这意味着处理器可以在前一条指令完成之前开始执行下一条指令的一部分。对于预测分支等概念,这可能会变得非常复杂。

通常,当您模拟数字电子设备时,您会使用基于事件的模型,因为电子系统是并发的,但也有需要建模的传播延迟。我记得在 Uni 使用 PSpice 和 MicroSim 等工具做得很好。

于 2009-03-21T06:00:14.707 回答
2

实际处理器如何处理时序与处理器仿真如何处理时序之间存在许多差异。而且,没有一种方法可以让实际的处理器处理时序!

既然你说它是一个简单而原始的处理器,你就不必担心缓存、流水线、乱序执行、分支预测等(尽管了解这些会很好)。

您可以简单地将时钟间隔设置为最长指令的间隔。或者,您可以将所有较短的指令集中在一组中,找到该组中最长的指令,并将时钟间隔设置为该值。现在,可以为剩余的长指令分配一个等于时钟间隔倍数的间隔。

再说一遍,没有一种方法可以解决这个问题。

于 2009-03-21T06:03:05.930 回答
1

(1) 时钟是什么。你不应该有竞争条件;执行一次加法需要 x ns;时钟是 y ns。x < y。因此,添加总是首先完成(好吧,只要 y 足够大,以至于由于例如温度变化而导致的时序变化不会使 x<y 为假)。

当然,如果你把 y 设置得太小,就会发生不好的事情。但这很现实。当您超频芯片时会发生这种情况。随着时钟频率的上升,它们变得不稳定。

于 2009-03-21T06:01:22.643 回答