避免处理器中的时序问题

时间:2009-03-21 05:27:11

标签: language-agnostic cpu

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

例如:假设时钟速度恒定为1赫兹。我认为这意味着每秒可以处理1条指令。有些说明比其他说明要长。添加1 + 0所需的时间少于1 + 7.(后者会导致进位的纹波,这需要非零的时间。)

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

我需要:

  1. 时间最长指令需要多长时间并将时钟速度设置为大于此值?
  2. 创建一个有状态的观察者,不会允许将来执行指令直到上一个完成
  3. 我完全误解了这个问题吗?
  4. 在#1中,似乎我仍然冒着在下一个开始之前教学不完整的竞争条件。在#2中,似乎我冒着不可预测/可变的时钟速度的风险,这可能会在以后引起我的问​​题。

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

4 个答案:

答案 0 :(得分:3)

您熟悉instruction pipeline吗?

答案 1 :(得分:3)

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

对于更复杂的微控制器,还有一个指令流水线(如cat提到的那样),这意味着处理器可以在前一个on完成之前开始执行下一条指令的一部分。使用预测分支等概念可能会变得非常复杂。

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

答案 2 :(得分:2)

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

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

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

重复一遍,没有办法解决这个问题。

答案 3 :(得分:1)

(1)是时钟。你不应该有竞争条件;执行添加需要x ns;时钟是y ns。 x<年。因此,添加将始终首先完成(好吧,如果y足够大,由于例如温度变化导致的时序变化不会使x

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