为什么在8085微处理器中,时钟频率被二分频?

电器工程 8085 微处理器
2022-01-13 06:02:26

为什么产生的时钟频率是 6.144 MHz,但它内部(8085 处理器)只使用 3.072 MHz。还有什么导致时钟中的特定值 6.144。

我在雅虎找到了答案.... http://answers.yahoo.com/question/index?qid=20080810090119AAurr2i

但我必须承认我仍然没有很好地理解它。请你们中的任何人就此扔掉几行字好吗?

4个回答

将时钟除以 2 的原因之一是为了获得偶数为 50% 占空比的方波。可能是 8085 内部使用了两个时钟边沿,如果周期的一半恰好比另一半短得多,则它不会起作用。

在 8085 新的时代,那些漂亮的罐装振荡器并不常见,人们经常用分立的晶体、电容器和逻辑门拼凑时钟电路。除以二可确保您具有等距的上升沿和下降沿。

至于6.144MHz,你会发现它可以除以一个整数得到常见的波特率值,至少可以达到38400。


跟进 ...

查看 8085 的英特尔数据表,有三个有趣的陈述

  1. 8085 集成了 8224 时钟发生器和 8228 系统控制器为 8080A 提供的所有功能

  2. X1 和 X2:连接到晶体、LC 或 RC 网络以驱动内部时钟发生器。输入频率除以 2 得到处理器的内部工作频率。

  3. CLK:用作系统时钟的时钟输出。CLK 的周期是 X1、X2 输入周期的两倍。

因此,关于使用时钟的奇数边沿在内部移动东西的猜测,很明显,当他们设计 8085 时,英特尔通过将该功能集成到芯片中来取代对特殊时钟控制器的需求。在将其作为 CLK 输出之前将 X1-X2 时基分成两半可确保系统获得良好的均匀占空比,如果没有其他问题的话。

在设计此芯片时,人们在 CPU 中使用尽可能少的晶体管,以使它们足够小以适合可用的芯片。

我怀疑那个时代的 CPU 中几乎每个“寄存器”(程序员可见的指令集寄存器和内部微架构锁存器)都将数据存储在透明的门控 D 锁存器或类似的东西中。如今,芯片上有很多晶体管,因此使用完整的主从 D 触发器更简单,即使它们使用的晶体管数量是原来的两倍。

许多指令从某个寄存器 A 获取数据,将其与 ALU 中的一些其他数据组合,然后将结果存储回寄存器 A。如果寄存器 A 是用一个完整的主从 D 触发器实现的,那么这很容易做到。

但如果寄存器 A 是透明的门控 D 锁存器,则需要非重叠时钟。您在一个时钟上使用一个脉冲将一些中间结果存储在某处(而寄存器 A 保持其输出恒定),然后在另一个时钟上使用一个脉冲以将新值加载到寄存器 A 上(而中间寄存器保持其输出恒定)。

这需要一个两相时钟。制作非重叠 2 相时钟的最简单方法(在晶体管稀缺的那个年代)是一个小的外部电路,它接收一个输入时钟并将其除以 2。

随着时间的推移,人们想出了如何将越来越多的晶体管封装到 IC 上。因此,设计 CPU 的人们将整个计算机系统中的 CPU 周围越来越多的东西集成到 CPU 芯片上。

阅读维基百科时钟信号文章的字里行间,我得到的印象是,那个时代设计8085和6502等芯片的人只比上一代集成CPU多一点空间,他们决定了最好的那个房间的用途是把那个小的外部电路放在芯片上。但是他们将所有寄存器都保持在与以前相同的门控 D 锁存器中。

所以这就是时钟频率被二分频的原因。您可以认为第一个外部时钟脉冲在 phase_one 内部时钟信号上生成一个脉冲以更新该中间结果寄存器,而来自外部时钟的第二个脉冲在 phase_two 内部时钟信号上生成一个脉冲以更新程序员可见的寄存器。

将指令周期拆分为多个时钟周期的原因有很多。一个很好的例子是访问主存总线。

大多数现代处理器都是冯诺依曼架构。也就是说,它们的代码和数据都存在于同一个存储芯片中。好吧,如果您想读取一条指令,并且该指令将从内存中加载一个变量……那是两次内存访问。但是大多数内存只是单端口的(即每个周期只能进行一次读取或写入)。那么你如何阅读指令阅读你的变量呢?

解决方案是使用两阶段指令周期。第一阶段将从内存中获取指令,然后第二阶段可以从主内存中读取(或写入!)变量。

一些较旧的芯片走得更远。过去,如果您的芯片具有 16 位可寻址存储器,但外部地址总线只有 8 位,那么您就会熟悉地址锁存器启用。一个时钟周期发送 16 位地址的高 8 位,下一个时钟周期发送低 8 位。然后第三个周期可以从/向内存读取/写入变量。

还有其他更好的理由让指令周期长度为多个时钟周期。最好的原因之一是流水线。这是现代处理器用来更充分地利用芯片中所有可用执行单元的技巧。例如,在执行一条指令时,同时获取下一条指令。

在内部,8085A 的内核需要一个两相时钟。派生两个时钟相位的内部逻辑也将输入时钟除以二。如前所述,使用 6.144MHz 输入时钟的原因是出于波特率目的,芯片在 6MHz 下运行良好。该芯片的实际额定频率为 3MHz,需要 6MHz 晶振,但在 6.144MHz 时运行良好,可以更轻松地生成波特率(Uart 可以使用驱动 8085 的振荡器的 6.144MHz 或 8085 的 CLK 输出的 3.072MHz 时钟提供许多可用的波特率)。我仍然使用这些古老的芯片在我的一些机器人中执行特殊功能。我用自己的振荡器为 Uart 计时,用 6.4MHz 的振荡器为 8085A 计时,该振荡器以 3.2MHz 的频率运行芯片。3. 2MHz 很好地分频,为我的超声波换能器提供 40KHz 时钟。在我的“机器人”中使用更现代的 IC 设备更有意义,但我有很多旧的 8085、Z80、63C09 和 63C09E、68B09 和 68B09E 等,我真的很喜欢玩。