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


16

为什么产生的时钟频率为6.144 MHz,但内部(8085处理器)仅使用3.072 MHz。这也是导致时钟中特定值为6.144的原因。

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

但我必须承认,我仍然做得不好。你们中的任何人都可以在这上面写几行吗?


2
雅虎的答案非常非常差。如果你认识作家,请原谅我。
Kortuk

嗯,这个学期刚修完微处理器,所以我不知道那是怎么回事。我想我在这里得到了答案...谢谢。
loxxy 2010年

1
MC6800的要求更高。它有两个时钟输入(phi1,phi2,相移约180度),这些时钟输入必须不重叠,即,一个相位必须在若干ns内保持低电平,然后再允许另一相位上升。还有一个额外的振荡器IC(MC6810?)来生成那些时钟信号。
凝乳

1
@Curd讨厌的时机,它必须非常靠近供应轨(在那几天是稀有的)摆动。pdf.datasheetarchive.com/indexerfiles/Scans-000/... MC6871。MC6810是128 x 8(!)静态RAM芯片。
Spehro Pefhany 2014年

Answers:


15

将时钟二分频的一个原因是获得占空比为50%的偶数方波。可能是8085在内部使用了两个时钟沿,如果周期的一半恰好比另一周期短得多,则将无法工作。

在8085刚问世的日子里,那些精美的固定振荡器并不常见,人们常常用分立的晶体,电容器和逻辑门将时钟电路拼凑在一起。除以2可确保您具有相等间隔的上升沿和下降沿。

至于6.144MHz,您会发现可以将其除以整数以获得常用的波特率值,至少为38400。


跟进 ...

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

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

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

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

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


1
通常,由于逻辑延迟,微控制器中的不同阶段需要异相。使用更高速度的振荡器并对其进行分频并针对不同的逻辑集使用两个不同的边沿可以大大降低器件的成本。JustJeff使用的振荡器是标准时钟速率的倍数。它可以使高速传输非常容易。
Kortuk's

2
您确定占空比说明吗?我的印象是,一个指令周期可能需要多个时钟周期(例如,一个由取指周期和执行周期组成的指令周期)。我非常确定,即使是当今的PIC,也具有4级指令周期,这就是为什么在整个数据表中都有所有Fosc / 4的原因
ajs410

1
@ ajs410-8085肯定会花费多个时钟周期来完成一条指令;从那时起(我知道)所有的8位微控制器至少花了两个时钟来执行任何操作。我在这里指的只是芯片内部。如果您查看这些古老的野兽的框图,您会发现它们具有一些内部总线,临时寄存器等,而我推测这些可能是同时使用了这两个方面。任何外部总线周期都将在相同极性的边沿之间运行。
JustJeff

6

在设计该芯片时,人们在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内部时钟信号上生成脉冲以更新编程器可见寄存器。


如果一个锁存器在不重新加载的情况下永远不会超过几微秒,则可以进一步简化电路,因此“锁存器”无非是一个单晶体管的传输门和一个反相器。
2012年

1
自编写以上内容以来,我研究了6502的设计;许多内部总线在一个时钟相位被无条件驱动为高电平,然后在另一时钟相位期间,一个选定的寄存器可以将适当的位拉低。例如,如果有五个寄存器可以输出到总线,则意味着该芯片无需为每个寄存器的输出使用上拉设备,而只需为每个寄存器使用一个开关上拉设备和两个两个串联的晶体管在适当的情况下拉下巴士。我希望8085几乎肯定会使用类似的技巧。
2013年

2

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

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

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

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

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


3
我不认为OP在问您为什么要在多个时钟之间分配一条指令,而是为什么8085的设计要求您向其提供2倍的时钟(然后在内部对其进行分频),而不是仅仅按照预期的时间进行操作。时钟频率直接。
JustJeff

1
不过,您所说的有关说明的所有内容都已打开。
JustJeff

1

在内部,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等。


0

时钟不过是您希望事件发生的时刻。现在,我们不希望数字电路中的电平触发功能,因为当给出更多的时间时,微处理器中不同电路之间可能会发生相互作用,从而导致短路。因此,我们开始进行边缘触发。现在,微处理器不知道何时发生边沿触发。它只能理解1或0。因此,每当检测到时钟沿时,就需要触发器产生1和0。因此,变得有必要使用触发器。结果,时钟频率被二分频。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.