Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 避免处理器中的定时问题_Language Agnostic_Cpu - Fatal编程技术网

Language agnostic 避免处理器中的定时问题

Language agnostic 避免处理器中的定时问题,language-agnostic,cpu,Language Agnostic,Cpu,我正在写一个(非常缓慢和原始的)处理器的模拟 例如:假设时钟速度为恒定的1Hz。我假设这意味着每秒可以/将处理1条指令。有些指令比其他指令耗时更长。添加1+0所需的时间少于1+7。(后者会导致进位波动,这需要非零的时间。) 我需要在所有其他指令完成后才能执行指令 我是否需要: 时间最长的指令需要多长时间并将时钟速度设置为大于该值 创建一个有状态的监视程序,在前一条指令完成之前不允许执行未来的指令 我完全误解了这个问题吗 在#1中,似乎我仍在冒着在下一次开始之前指令不完整的竞争条件的风险。在#2中

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

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

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

我是否需要:

  • 时间最长的指令需要多长时间并将时钟速度设置为大于该值
  • 创建一个有状态的监视程序,在前一条指令完成之前不允许执行未来的指令
  • 我完全误解了这个问题吗
  • 在#1中,似乎我仍在冒着在下一次开始之前指令不完整的竞争条件的风险。在#2中,我似乎冒着不可预测/可变时钟速度的风险,这可能会在以后导致问题


    我如何解决这个问题?对于真正的处理器如何处理这个问题,有什么提示吗?

    您熟悉吗?

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

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


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

    (1)就是时钟。你不应该有比赛条件;执行add需要x ns;这只钟慢了。x 既然您说它是一个简单而原始的处理器,您就不必担心缓存、流水线、无序执行、分支预测等问题(尽管了解这些情况会很好)

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

    再说一遍,没有一条路可以走