为什么需要按设定的时间间隔(即使用时钟)处理指令?它们不能按顺序执行-在上一条指令完成后立即执行吗?
对微控制器中时钟的必要性进行类比将被证明特别有用。
为什么需要按设定的时间间隔(即使用时钟)处理指令?它们不能按顺序执行-在上一条指令完成后立即执行吗?
对微控制器中时钟的必要性进行类比将被证明特别有用。
Answers:
一个或两个说明性示例可能会有所帮助。看一下以下假设电路:
模拟此电路 –使用CircuitLab创建的原理图
假设开始时A和B都为高(1)。因此,AND的输出为1,并且由于XOR的两个输入均为1,因此输出为0。
逻辑元素不会立即更改其状态-在处理输入更改时会有一个很小但很长的传播延迟。假设B变低(0)。XOR会立即在其第二个输入上看到新状态,但是第一个输入仍然从AND门看到“陈旧” 1。结果,输出短暂地变为高电平-但直到信号通过与门传播,这使得到XOR的两个输入都为低电平,并导致输出再次变为低电平。
毛刺不是电路工作中所需要的部分,但是由于逻辑量或什至只是电线的长度,这种毛刺会在通过电路不同部分的传播速度存在差异的任何时候发生。
一种非常简单的处理方法是在组合逻辑的输出上放置一个边沿触发的触发器,如下所示:
现在,任何故障都会被触发器隐藏在电路的其余部分,仅当时钟从0变为1时,触发器才会更新其状态。只要时钟上升沿之间的间隔足够长,信号就可以传播所有信号。通过组合逻辑链,结果将是可靠的确定性和无毛刺的。
我觉得这些答案中有很多并没有完全解决核心问题。微控制器仅具有时钟,因为它执行(并由)顺序逻辑驱动。
在数字电路理论中,顺序逻辑是一种逻辑电路,其输出不仅取决于其输入信号的当前值,还取决于过去输入的顺序,输入历史。这与组合逻辑相反,组合逻辑的输出仅是当前输入的函数。即,顺序逻辑具有状态(存储器),而组合逻辑没有。或者,换句话说,顺序逻辑是带有存储器的组合逻辑。
以及:
同步逻辑的主要优点是简单。对数据执行操作的逻辑门需要有限的时间来响应其输入的更改。这称为传播延迟。时钟脉冲之间的间隔必须足够长,以使所有逻辑门都有时间对变化做出响应,并且它们的输出在下一个时钟脉冲出现之前就“稳定”到稳定的逻辑值。只要满足此条件(忽略某些其他细节),就可以保证电路稳定可靠。这决定了同步电路的最大工作速度。
简短的答案:经理们需要一种简单,可测试的功能证明,然后再为设计投入数百万(或更多)美元。当前的工具只是不给出异步设计的答案。
微型计算机和微控制器通常利用时钟方案来确保时序控制。所有过程的角落必须在所有电压,温度,过程等对信号传播速度的影响上保持时序。有没有电流的逻辑门改变瞬间:取决于它是提供的电压每个门开关,它得到的驱动器,它驱动的负载,并且所使用的装置的尺寸,使之,(当然流程节点的(设备尺寸),以及该过程实际执行的速度-通过工厂。为了实现“即时”切换,您必须使用量子逻辑,并且假设量子器件可以立即进行切换;(我不确定)。
时钟逻辑证明了整个处理器的时序在预期的电压,温度和处理变量上均有效。有许多可用的软件工具可帮助测量此时序,网络过程称为“时序收敛”。时钟可能(并且以我的经验)确实需要微处理器功率的1/3至1/2。
那么,为什么不异步设计呢?很少有时序收敛工具来支持这种设计风格。很少有自动布局和布线工具可以处理和管理大型异步设计。如果没有其他要求,管理人员不会批准任何没有直接计算机生成的功能证明的功能。
异步设计需要“大量”同步信号(需要“更多晶体管”)的评论忽略了路由和同步全局时钟的成本以及时钟系统所需的所有触发器的成本。异步设计比(或应该)比它们的时钟同步设计更小,更快。(一个简单地取ONE最慢的信号路径,并使用该一个“就绪”信号反馈给前述逻辑)。
异步逻辑速度更快,因为它无需等待时钟,而该时钟必须扩展到其他地方的另一个块。在寄存器到逻辑到寄存器功能中尤其如此。异步逻辑没有多个“设置”和“保持”问题,因为只有结尾的接收器结构(寄存器)才有这些问题,这与带有触发器的流水线逻辑集相对,散布着一定的空间以隔开逻辑传播延迟到时钟边界。
能做到吗 当然,即使是十亿个晶体管的设计。更难吗?是的,但这仅仅是因为要证明它可以在整个芯片(甚至系统)上工作,要涉及得多。对于任何一个模块或子系统,在纸上确定时序都是合理的直接选择。在自动化的布局和布线系统中控制该时序要困难得多,因为未设置该工具来处理更大的潜在时序约束集。
微控制器还具有大量潜在的其他模块,这些模块与(相对)较慢的外部信号接口,从而增加了微处理器的所有复杂性。这使得时间安排更加复杂,但不多。
实现“先到达”“锁定”信号机制是电路设计的问题,并且有已知的解决方法。比赛条件表示1)。不良的设计实践;或2)。外部信号进入处理器。时钟实际上引入了信号与时钟的竞争状态,这与“设置”和“保持”违规有关。
我个人不了解异步设计如何陷入停滞或任何其他竞争状况。那很可能是我的限制,但是除非它在输入处理器的数据中发生,否则在一个设计良好的逻辑系统中永远不可能发生,即使那样,由于它可能在信号进入时发生,因此您要设计处理它。
(我希望这有帮助)。
话虽如此,如果你有钱...
微控制器需要使用时钟,因为微控制器需要能够响应随时可能发生的事件,包括几乎与其他外部事件或控制器本身生成的事件同时发生,并且经常会有多个电路需要知道是否一个事件X在另一个事件Y之前。所有这样的电路确定X都在Y之前并不重要,还是所有这样的电路都确定X不在Y之前就无关紧要,但是,如果任何一个电路都确定X在Y之前,通常就很关键。是的,那么所有人都必须这样做。不幸的是,很难确保电路在一定时间内就X是否在Y之前达成有保证的共识,甚至就它们是否已经达成共识达成共识。同步逻辑可以极大地帮助您。
在电路上添加时钟可以确保子系统不会经历任何竞争状况,除非系统的输入相对于时钟在很小的窗口内变化,并且还可以保证一个设备的输出是否馈入另一个设备,除非第一台设备的输入在一个甚至更小的临界窗口内变化,否则第一台设备的输出在第二台设备的关键窗口中不会改变。在第一台设备之前添加另一台设备将确保第一台设备的输入不会在那个小窗口中改变,除非新设备的输入在一个非常小的窗口内改变。从实践的角度来看,除非有人故意造成共识失败,
设计运行“尽可能快”的完全异步系统当然是可能的,但是除非系统非常简单,否则很难避免设计因竞争条件而崩溃。尽管有一些方法可以解决比赛条件而无需时钟,但使用时钟通常比没有时钟时可以更快,更轻松地解决比赛条件。尽管异步逻辑通常比时钟逻辑能够更快地解决竞争条件,但是在这种情况下,异步逻辑会带来重大问题,尤其是考虑到难以使系统的某些部分就是否达成共识达成共识。通常,每节可以连续运行一百万条指令的系统比有时可能每秒运行四百万条指令的系统更有用,但是由于竞赛条件,一次可能会停滞数千秒(或更长时间)。
MCU只是同步时序逻辑电路的一个非常复杂的示例。最简单的形式可能是时钟D触发器(D-FF),即同步1位存储元件。
有些存储元素是异步的,例如D锁存器,从某种意义上说,它是D-FF的异步等效物。MCU只不过是数以百万计的这种基本存储元件(D-FF)与大量逻辑门粘合在一起(我简化了)。
现在,让我们来探讨一下:为什么MCU在内部使用D-FF而不是D-闩锁作为存储元件?这本质上是为了提高可靠性和简化设计:D闩锁只要其输入发生变化并尽快更新其输出,就会做出反应。这允许在逻辑电路的不同部分之间进行有害的不必要的交互(意外的反馈回路和竞争)。使用异步构件块设计复杂的时序电路本质上更加困难且容易出错。同步电路通过将构建块的操作限制在检测到时钟沿的时刻来避免此类陷阱。当边沿到达时,同步逻辑电路在其输入处获取数据,但尚未更新其输出。一旦获取输入,就更新输出。这样可以避免将输出信号反馈到尚未完全采集的输入并弄乱事情的风险(简单地说)。
这种从输出更新中“分离”输入数据的策略允许使用更简单的设计技术,对于给定的设计工作,它可以转换成更复杂的系统。
实际上,您将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,这将使每个门相互依赖,并可能导致硬件故障。这也使指令的流水线变得不可能,长期依赖和不规则是时候完成任务了。
所以这是不可取的
时钟解决的根本问题是晶体管并不是真正的数字设备:晶体管使用输入端的模拟电压电平来确定输出,并花费有限的时间来改变状态。除非您已在另一个答案中提到,否则您将进入量子设备,否则将有一段时间输入会从一种状态转换为另一种状态。这花费的时间受电容性负载的影响,电容性负载在一个设备和另一个设备之间会有所不同。这意味着组成每个逻辑门的不同晶体管将在稍有不同的时间做出响应。一旦组件设备的所有输出稳定后,就可以使用时钟来“锁存”它们。
作为类比,考虑SPI(串行外围接口)通信传输层。一个典型的实现将使用三行:数据输入,数据输出和时钟。为了在该传输层上发送字节,主机将设置其数据输出线并置位时钟线以指示数据输出线具有有效值。从设备仅在时钟信号指示下采样其数据输入线路。如果没有时钟信号,从机将如何知道何时采样数据输入?它可以在主机设置线之前或状态之间的过渡期间对其进行采样。异步协议(例如CAN,RS485,RS422,RS232等)通过使用预定义的采样时间,固定比特率和(开销)成帧比特来解决此问题。
换句话说,需要某种常识来确定一组门中的所有晶体管何时都已达到其最终状态并且指令已完成。在上面的链接中提到的(100个蓝眼睛)难题中,并在Math Stack Exchange上的此问题中进行了详细解释,“ oracle”充当岛上居民的时钟。