为什么微控制器需要时钟


31

为什么需要按设定的时间间隔(即使用时钟)处理指令?它们不能按顺序执行-在上一条指令完成后立即执行吗?

对微控制器中时钟的必要性进行类比将被证明特别有用。


6
有异步处理器。
Leon Heller

6
您如何确定“上一条指令何时完成”?如果您考虑一下,则需要知道“上一条指令是否已完成?”的时间。计算已完成,并且“是否已完成上一条指令?”计算已完成,........说“完成一条指令需要0.4纳秒”要容易得多。
user253751

4
逻辑门不说何时完成。在稳定一个稳定值之前的某个时间里,信号只是不确定的。本质上,时钟使设计人员能够知道逻辑何时已确定为正确的值。诸如微指令之类的高级策略可以将机器指令分解为更小的片段,因此ADD可能需要4个时钟周期,而内存访问可能需要数百个时钟周期。

Answers:


31

一个或两个说明性示例可能会有所帮助。看一下以下假设电路:

原理图

模拟此电路 –使用CircuitLab创建的原理图

假设开始时A和B都为高(1)。因此,AND的输出为1,并且由于XOR的两个输入均为1,因此输出为0。

逻辑元素不会立即更改其状态-在处理输入更改时会有一个很小但很长的传播延迟。假设B变低(0)。XOR会立即在其第二个输入上看到新状态,但是第一个输入仍然从AND门看到“陈旧” 1。结果,输出短暂地变为高电平-但直到信号通过与门传播,这使得到XOR的两个输入都为低电平,并导致输出再次变为低电平。

毛刺不是电路工作中所需要的部分,但是由于逻辑量或什至只是电线的长度,这种毛刺会在通过电路不同部分的传播速度存在差异的任何时候发生。

一种非常简单的处理方法是在组合逻辑的输出上放置一个边沿触发的触发器,如下所示:

原理图

模拟该电路

现在,任何故障都会被触发器隐藏在电路的其余部分,仅当时钟从0变为1时,触发器才会更新其状态。只要时钟上升沿之间的间隔足够长,信号就可以传播所有信号。通过组合逻辑链,结果将是可靠的确定性和无毛刺的。


6
感谢您几乎立即提到传播延迟,这大概是答案的99%。

1
在Microchip(及其他)微控制器的数字I / O外设上可以看到一个有效的工作示例。如果使用PORT寄存器通过连续的Read-Modify-Write指令更新输出(而不是LATCH),则可以在更改状态时读取引脚的状态。有关更多详细信息,请参见dsPIC33E / 24E文档的10.2.2节。
Evil Dog Pie

我是否正确理解顺序电路迫切需要时钟,不仅因为它们会出现毛刺,还因为某些毛刺,某些触发器可能最终会存储错误的值?
lakesare

20

我觉得这些答案中有很多并没有完全解决核心问题。微控制器仅具有时钟,因为它执行(并由)顺序逻辑驱动。

在数字电路理论中,顺序逻辑是一种逻辑电路,其输出不仅取决于其输入信号的当前值,还取决于过去输入的顺序,输入历史。这与组合逻辑相反,组合逻辑的输出仅是当前输入的函数。即,顺序逻辑具有状态(存储器),而组合逻辑没有。或者,换句话说,顺序逻辑是带有存储器的组合逻辑。

以及:

同步逻辑的主要优点是简单。对数据执行操作的逻辑门需要有限的时间来响应其输入的更改。这称为传播延迟。时钟脉冲之间的间隔必须足够长,以使所有逻辑门都有时间对变化做出响应,并且它们的输出在下一个时钟脉冲出现之前就“稳定”到稳定的逻辑值。只要满足此条件(忽略某些其他细节),就可以保证电路稳定可靠。这决定了同步电路的最大工作速度。


15

简短的答案:经理们需要一种简单,可测试的功能证明,然后再为设计投入数百万(或更多)美元。当前的工具只是不给出异步设计的答案。

微型计算机和微控制器通常利用时钟方案来确保时序控制。所有过程的角落必须在所有电压,温度,过程等对信号传播速度的影响上保持时序。有没有电流的逻辑门改变瞬间:取决于它是提供的电压每个门开关,它得到的驱动器,它驱动的负载,并且所使用的装置的尺寸,使之,(当然流程节点的(设备尺寸),以及该过程实际执行的速度-通过工厂。为了实现“即时”切换,您必须使用量子逻辑,并且假设量子器件可以立即进行切换;(我不确定)。

时钟逻辑证明了整个处理器的时序在预期的电压,温度和处理变量上均有效。有许多可用的软件工具可帮助测量此时序,网络过程称为“时序收敛”。时钟可能(并且以我的经验)确实需要微处理器功率的1/3至1/2。

那么,为什么不异步设计呢?很少有时序收敛工具来支持这种设计风格。很少有自动布局和布线工具可以处理和管理大型异步设计。如果没有其他要求,管理人员不会批准任何没有直接计算机生成的功能证明的功能。

异步设计需要“大量”同步信号(需要“更多晶体管”)的评论忽略了路由和同步全局时钟的成本以及时钟系统所需的所有触发器的成本。异步设计比(或应该)比它们的时钟同步设计更小,更快。(一个简单地取ONE最慢的信号路径,并使用该一个“就绪”信号反馈给前述逻辑)。

异步逻辑速度更快,因为它无需等待时钟,而该时钟必须扩展到其他地方的另一个块。在寄存器到逻辑到寄存器功能中尤其如此。异步逻辑没有多个“设置”和“保持”问题,因为只有结尾的接收器结构(寄存器)才有这些问题,这与带有触发器的流水线逻辑集相对,散布着一定的空间以隔开逻辑传播延迟到时钟边界。

能做到吗 当然,即使是十亿个晶体管的设计。更难吗?是的,但这仅仅是因为要证明它可以在整个芯片(甚至系统)上工作,要涉及得多。对于任何一个模块或子系统,在纸上确定时序都是合理的直接选择。在自动化的布局和布线系统中控制该时序要困难得多,因为未设置该工具来处理更大的潜在时序约束集。

微控制器还具有大量潜在的其他模块,这些模块与(相对)较慢的外部信号接口,从而增加了微处理器的所有复杂性。这使得时间安排更加复杂,但不多。

实现“先到达”“锁定”信号机制是电路设计的问题,并且有已知的解决方法。比赛条件表示1)。不良的设计实践;或2)。外部信号进入处理器。时钟实际上引入了信号与时钟的竞争状态,这与“设置”和“保持”违规有关。

我个人不了解异步设计如何陷入停滞或任何其他竞争状况。那很可能是我的限制,但是除非它在输入处理器的数据中发生,否则在一个设计良好的逻辑系统中永远不可能发生,即使那样,由于它可能在信号进入时发生,因此您要设计处理它。

(我希望这有帮助)。

话虽如此,如果你有钱...


当然,这取决于您正在构建的芯片-例如,神经网络硬件往往是异步的,因为这实际上是最简单的事情-他们正在仿真的东西是异步的。我们主要在构建同步顺序硬件,因为软件/固件也主要是同步和顺序的(特别是在“顺序”部分-越来越多地使用异步代码)。实际上,将头缠绕在顺序的同步系统上要容易得多,尤其是当大多数编程是使用鼓励顺序代码的语言完成时。
罗安2015年

现实世界中的事件发生在不可预测的时间。如果设备具有按钮,并且应该在“足够快”地按下时执行一条代码路径,而如果没有按下则执行另一条代码路径,则在没有量子力学限制的情况下,在按下按钮的那一刻之间按下按钮的时间会足够短,以触发备用代码路径,而按下按钮的时间“太晚”,那么在某个确切的时刻,按钮的按下将导致两者之间的某些行为(例如,导致程序计数器的某些位被更改...
supercat

...但其他人除外)。在没有量子力学限制的情况下,可以将任意次减小推压将导致分支的最后时刻与完全推不动的第一次时刻之间的时间,但不能将其缩短为零。量子力学的限制可能使得任何按钮按下的发生可能早于注册或延迟到足以彻底失败的程度,但证明永远不会存在允许按钮按下致命中间时间的量子状态。不可行的。
2015年

通过使用同步逻辑,可以确保竞争条件极有可能逃逸整个设备的很小一部分,从而大大简化了系统将需要响应真正异步事件的情况的分析。与允许几乎在任何地方发生竞争条件并尝试分析其影响以证明它们不太可能引起麻烦相比,分析设备的一小部分以确保不太可能摆脱竞争条件的问题更容易解决。
超级猫

10

微控制器需要使用时钟,因为微控制器需要能够响应随时可能发生的事件,包括几乎与其他外部事件或控制器本身生成的事件同时发生,并且经常会有多个电路需要知道是否一个事件X在另一个事件Y之前。所有这样的电路确定X都在Y之前并不重要,还是所有这样的电路都确定X不在Y之前就无关紧要,但是,如果任何一个电路都确定X在Y之前,通常就很关键。是的,那么所有人都必须这样做。不幸的是,很难确保电路在一定时间内就X是否在Y之前达成有保证的共识,甚至就它们是否已经达成共识达成共识。同步逻辑可以极大地帮助您。

在电路上添加时钟可以确保子系统不会经历任何竞争状况,除非系统的输入相对于时钟在很小的窗口内变化,并且还可以保证一个设备的输出是否馈入另一个设备,除非第一台设备的输入在一个甚至更小的临界窗口内变化,否则第一台设备的输出在第二台设备的关键窗口中不会改变。在第一台设备之前添加另一台设备将确保第一台设备的输入不会在那个小窗口中改变,除非新设备的输入在一个非常小的窗口内改变。从实践的角度来看,除非有人故意造成共识失败,

设计运行“尽可能快”的完全异步系统当然是可能的,但是除非系统非常简单,否则很难避免设计因竞争条件而崩溃。尽管有一些方法可以解决比赛条件而无需时钟,但使用时钟通常比没有时钟时可以更快,更轻松地解决比赛条件。尽管异步逻辑通常比时钟逻辑能够更快地解决竞争条件,但是在这种情况下,异步逻辑会带来重大问题,尤其是考虑到难以使系统的某些部分就是否达成共识达成共识。通常,每节可以连续运行一百万条指令的系统比有时可能每秒运行四百万条指令的系统更有用,但是由于竞赛条件,一次可能会停滞数千秒(或更长时间)。


值得注意的是,要确定的状态也可以是内部状态,例如算术运算的结果。由于线长而引起的延迟可能导致MCU的一部分在其他部分之前看到结果,并且没有时钟就对结果起作用。
尼克·约翰逊

@NickJohnson:如果执行操作的顺序从不依赖于尚未计算的事物,那么如果像ALU这样的每个部分都具有“有效”输入和“有效”输出以及事物,那么可以轻松地解决这些问题可以安排为以确定的顺序发生。轮子掉落的地方是操作发生的顺序应取决于时间(例如,如果一个操作有多个并行操作需要使用共享的内存总线,而其中两个并行发出几乎同时的请求,则其中一个仲裁)应该先走...
supercat

...并且应该等待哪一个很棘手。如果一个人事先决定先去哪一个,就可以避免这种问题,但是如果事实证明指定要先去的那个单元直到另一个人之后很长时间才准备好,可能会严重损害性能。 。
2015年

这就是为什么进入太空是如此困难,概率发生不利变化的原因。
Magic Smoke

6

MCU只是同步时序逻辑电路的一个非常复杂的示例。最简单的形式可能是时钟D触发器(D-FF),即同步1位存储元件。

有些存储元素是异步的,例如D锁存器,从某种意义上说,它是D-FF的异步等效物。MCU只不过是数以百万计的这种基本存储元件(D-FF)与大量逻辑门粘合在一起(我简化了)。

现在,让我们来探讨一下:为什么MCU在内部使用D-FF而不是D-闩锁作为存储元件?这本质上是为了提高可靠性和简化设计:D闩锁只要其输入发生变化并尽快更新其输出,就会做出反应。这允许在逻辑电路的不同部分之间进行有害的不必要的交互(意外的反馈回路和竞争)。使用异步构件块设计复杂的时序电路本质上更加困难且容易出错。同步电路通过将构建块的操作限制在检测到时钟沿的时刻来避免此类陷阱。当边沿到达时,同步逻辑电路在其输入处获取数据,但尚未更新其输出。一旦获取输入,就更新输出。这样可以避免将输出信号反馈到尚未完全采集的输入并弄乱事情的风险(简单地说)。

这种从输出更新中“分离”输入数据的策略允许使用更简单的设计技术,对于给定的设计工作,它可以转换成更复杂的系统。


5

您所描述的称为异步逻辑。它可以工作,并且在工作时通常比同步(时钟)逻辑更快,功耗更低。不幸的是,异步逻辑有一些问题使其无法广泛使用。我主要看到的是,由于需要大量独立的同步信号,因此需要更多的晶体管来实现。(微控制器和CPU并行执行许多工作。)这将增加成本。缺乏好的设计工具是一个很大的前期障碍。

由于微控制器的外围设备通常需要测量时间,因此它们可能总是需要时钟。定时器和PWM以固定的时间间隔工作,ADC采样率会影响其带宽,异步通信协议(如CAN和USB)需要参考时钟来恢复时钟。我们通常希望CPU尽可能快地运行,但是其他数字系统并非总是如此。


3

实际上,您将MCU视为一个完整的单元,但事实是它本身是由不同的门以及TTL和RTL逻辑的(通常是FF阵列)组成的,它们都分别需要时钟信号,

更具体地说,请考虑简单地访问地址从存储器来看,这个简单的任务本身可能涉及多种操作,例如使BUS可用于数据线和地址线。
说最好的办法是,指令本身发生在需要的时钟周期操作的小单位,这些组合对于机器周期,占像速度各种MCU性质(FLOPS **在复杂MCU的),管内衬等

响应OP的评论

确切地说,我举一个例子,有一个名为ALE的芯片(地址锁存使能)通常用于多路复用低位地址总线以在同一引脚上传输地址和数据,我们使用振荡器(intel 8051使用11.059MHz本地振荡器作为时钟)来获取地址,然后获取数据。

如您所知,MCU的基本部分是CPU,ALU和内部寄存器等,在8051的情况下,CPU(控制s / g)将地址发送到所有地址引脚16,这发生在定时时刻T1及之后。该地址是电容器的相应存储矩阵(电荷作为信号)(*内存映射*)被激活并选择。

选择后,激活ALE信号,即ALE引脚在下一个时钟变为 T2时变为高电平通常为高信号,但根据处理单元设计而变化),此后,低地址总线的作用就像数据线,数据被写入或读取(取决于MCU的RD / WR引脚上的输出)。
您可以清楚地看到所有事件都是按时间顺序进行的

如果我们不使用时钟会发生什么呢? 那么我们将不得不使用异步时钟方法ASQC,这将使每个门相互依赖,并可能导致硬件故障。这也使指令的流水线变得不可能,长期依赖和不规则是时候完成任务了。
所以这是不可取的


这样说是有道理的。但是,为什么MCU的这些不同部分需要时钟信号才能工作?如果他们不使用时钟,理论上会发生什么?
MR

1
@Martin,逻辑门在输入改变时立即改变状态。时钟时序逻辑仅在时钟事件期间评估其输入。这是驱动数字存储电路的基本原理。它使我们能够通过绝对控制有选择地将数据从一个位置移动到另一位置,从而允许创建可以通过软件感知进行编程的通用硬件,从而可以完成任何事情。
肖恩·博迪

3
@SeanBoddy:逻辑门不会立即出现状态,在示波器上可以看到很短的延迟。如果我们不使用时钟,那么组件之间这些时序的差异可能会导致竞争条件产生错误的结果。
BlueRaja-Danny Pflughoeft 2015年

@BlueRaja-很好的欢乐胶质糖,怎么样。也许我会回顾4年的电力电子笔记和8年的海军训练,以找出我错过那件事的地方。
肖恩·博迪

2

时钟解决的根本问题是晶体管并不是真正的数字设备:晶体管使用输入端的模拟电压电平来确定输出,并花费有限的时间来改变状态。除非您已在另一个答案中提到,否则您将进入量子设备,否则将有一段时间输入会从一种状态转换为另一种状态。这花费的时间受电容性负载的影响,电容性负载在一个设备和另一个设备之间会有所不同。这意味着组成每个逻辑门的不同晶体管将在稍有不同的时间做出响应。一旦组件设备的所有输出稳定后,就可以使用时钟来“锁存”它们。

作为类比,考虑SPI(串行外围接口)通信传输层。一个典型的实现将使用三行:数据输入,数据输出和时钟。为了在该传输层上发送字节,主机将设置其数据输出线并置位时钟线以指示数据输出线具有有效值。从设备仅在时钟信号指示下采样其数据输入线路。如果没有时钟信号,从机将如何知道何时采样数据输入?它可以在主机设置线之前或状态之间的过渡期间对其进行采样。异步协议(例如CAN,RS485,RS422,RS232等)通过使用预定义的采样时间,固定比特率和(开销)成帧比特来解决此问题。

换句话说,需要某种常识来确定一组门中的所有晶体管何时都已达到其最终状态并且指令已完成。在上面的链接中提到的(100个蓝眼睛)难题中,并在Math Stack Exchange上的此问题中进行了详细解释,“ oracle”充当岛上居民的时钟。

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.