为什么产生的时钟频率为6.144 MHz,但内部(8085处理器)仅使用3.072 MHz。这也是导致时钟中特定值为6.144的原因。
我在yahoo上找到了答案。... http ://answers.yahoo.com/question/index ? qid= 20080810090119AAurr2i
但我必须承认,我仍然做得不好。你们中的任何人都可以在这上面写几行吗?
为什么产生的时钟频率为6.144 MHz,但内部(8085处理器)仅使用3.072 MHz。这也是导致时钟中特定值为6.144的原因。
我在yahoo上找到了答案。... http ://answers.yahoo.com/question/index ? qid= 20080810090119AAurr2i
但我必须承认,我仍然做得不好。你们中的任何人都可以在这上面写几行吗?
Answers:
将时钟二分频的一个原因是获得占空比为50%的偶数方波。可能是8085在内部使用了两个时钟沿,如果周期的一半恰好比另一周期短得多,则将无法工作。
在8085刚问世的日子里,那些精美的固定振荡器并不常见,人们常常用分立的晶体,电容器和逻辑门将时钟电路拼凑在一起。除以2可确保您具有相等间隔的上升沿和下降沿。
至于6.144MHz,您会发现可以将其除以整数以获得常用的波特率值,至少为38400。
查看8085的英特尔数据表,有以下三个有趣的陈述
8085包含了8224时钟发生器和8228系统控制器为8080A提供的所有功能。
X1和X2:连接到晶体,LC或RC网络以驱动内部时钟发生器。输入频率除以2得到处理器的内部工作频率。
CLK:时钟输出,用作系统时钟。CLK的周期是X1,X2输入周期的两倍。
因此,关于使用时钟的奇数边缘在内部移动东西的猜测,很明显,当他们设计8085时,英特尔正在通过将该功能集成到芯片中来取代对特殊时钟控制器的需求。在将X1-X2时基输出为CLK之前,将其分成两半可确保系统获得良好的均匀占空比(如果没有其他条件)。
在设计该芯片时,人们在CPU中使用了尽可能少的晶体管,以使其足够小以适合现有芯片。
我怀疑实际上那个时代的CPU中的每个“寄存器”(包括程序员可见的指令集寄存器和内部微体系结构锁存器)都将数据存储在透明的门控D锁存器中或类似的东西中。如今,芯片上有许多晶体管,因此即使使用两倍的晶体管,使用完整的主从D触发器也更为简单。
许多指令从某个寄存器A中获取数据,并通过ALU将其与其他数据组合,然后将结果存储回寄存器A中。如果使用完整的主从D触发器实现寄存器A,这将非常容易。
但是,如果寄存器A是透明的门控D锁存器,则需要不重叠的时钟。您在一个时钟上使用一个脉冲将某个中间结果存储在某个位置(而寄存器A保持其输出常数),然后在另一个时钟上使用一个脉冲向寄存器A加载新值(而中间寄存器保持其输出常数)。
这需要一个两相时钟。制作不重叠的两相时钟的最简单方法(在那些晶体管稀缺的年代)是一个小的外部电路,它需要一个输入时钟并将其除以2。
随着时间的流逝,人们想出了如何在集成电路上封装越来越多的晶体管。因此,设计CPU的人们将越来越多的东西集成到整个计算机系统中的CPU上。
在Wikipedia时钟信号文章的两行之间阅读,我得到的印象是,设计8085和6502以及那个时代的其他芯片的人比上一代集成CPU的空间略多一点,他们决定最好那个房间的用途是将很少的外部电路放在芯片上。但它们仍将所有寄存器保持为与以前相同的门控D锁存器。
这就是时钟频率被二分频的原因。您可以想到第一个外部时钟脉冲在phase_one内部时钟信号上生成脉冲以更新中间结果寄存器,而第二个来自外部时钟的脉冲在phase_two内部时钟信号上生成脉冲以更新编程器可见寄存器。
将指令周期分成多个时钟周期有很多原因。一个很好的例子是访问主存储器总线。
大多数现代处理器都是Von-Neumann架构。也就是说,它们的代码和数据都存在于同一存储芯片中。好吧,如果您想读取一条指令,并且该指令将从内存中加载变量,那就是两次内存访问。但是大多数内存仅是单端口的(也就是说,每个周期只能读取或写入一次)。那么,如何阅读指令并读取变量?
解决方案是使用两阶段的指令周期。第一阶段将从内存中获取指令,第二阶段则可以从主内存中读取(或写入!)变量。
一些较旧的芯片甚至更进一步。过去,如果您的芯片具有16位可寻址内存,但是外部地址总线只有8位,那么您将熟悉地址锁存使能。一个时钟周期发送16位地址的高8位,下一个时钟周期发送低8位。然后,第三个周期可以从/向存储器读取/写入变量。
还有其他更好的理由是指令周期的长度应为多个时钟周期。最好的原因之一是流水线。这是现代处理器用来更充分地利用芯片中所有可用执行单元的技巧。例如,当一条指令正在执行时,下一条指令将同时被提取。
在内部,8085A的内核需要一个两相时钟。得出两个时钟相位的内部逻辑也将输入时钟除以二。如前所述,使用6.144MHz输入时钟的原因是出于波特率的目的,该芯片将在6MHz下正常运行。该芯片的实际额定频率为3MHz,需要6MHz的晶体,但可以在6.144MHz的频率下愉快地运行,从而可以更轻松地生成波特率(Uart可以通过驱动8085的振荡器以6.144MHz时钟或从8085的CLK输出以3.072MHz时钟运行)提供许多可用的波特率)。我仍然使用这些古老的芯片在某些机器人中执行特殊功能。我用自己的振荡器为Uarts计时,我用6.4MHz振荡器为8085A计时,后者使芯片工作在3.2MHz。3。2MHz可以很好地分频,为我的超声换能器提供40KHz时钟。在我的“机器人”中使用更多现代的IC设备更有意义,但我确实喜欢玩很多旧的8085,Z80、63C09和63C09E,68B09和68B09E等。