为什么有些微控制器会有如此大的同步延迟?

电器工程 手臂 爱特梅尔 同步
2022-01-25 16:51:04

在 Atmel SAM-D21 系列单片机上,许多外设使用与主 CPU 时钟异步的时钟,对这些外设的访问必须经过同步逻辑;在时钟相对于 CPU 时间较慢的外围设备上,这可能会增加一些非常大的延迟。例如,如果 RTC 配置为使用 1024Hz 时钟(似乎是设计意图)并且 CPU 以 48Mhz 运行,则读取“当前时间”寄存器将导致总线逻辑插入超过 200,000 个等待状态(最少1024Hz 时钟的五个周期)。尽管可以让 CPU 发出读取请求,执行一些其他不相关的代码,并在 200,000 多个周期后返回以获取时间,但似乎没有任何方法可以更快地实际读取时间。

根据我对同步的理解,单比特同步电路会将信号延迟目标时钟的2-3个周期;同步多比特量有点困难,但有多种方法可以保证目标时钟在五个周期内的可靠行为,如果它比源时钟快,如果不是,则只多几个周期。Atmel SAM-D21 将需要在时钟域中进行六个周期进行同步,哪些因素会支持同步延迟足够长以至于需要“同步完成”中断的设计,而不是确保同步延迟足够短以至于不需要这样的中断?

1个回答

这对我来说是一种不同的做事方式,我已经习惯了我的架构,我的寄存器要么在我的 CPU 时钟上,要么至少是那个时钟的 1/2。所以你写你的寄存器,它们马上就准备好了。也许他们这样做是为了省电?如果他们将外设寄存器放在自己独立的非常慢的时钟域中,他们可能不必唤醒并运行主振荡器或 CPU 时钟,但可以不断更新外设上的值。

如果是这种情况,那么您可以在您的超慢外围模块中写入一个寄存器,然后禁用整个 CPU 的电源岛或时钟门控,让慢速同步器读取它直到它满意,然后中断 CPU 将其取出的睡眠。

或者,它可以让你将最大数量的指令塞进你的清醒时间,而不是旋转六个周期并等待每次写入。

至于他们为什么使用如此多的同步周期,可能是偏执狂,或者他们可能正在为他们的一位客户满足一些高可靠性标准。我不能肯定地说,但我知道我见过客户的要求,比如每个 ram 都应该有 ecc 并预加载到设定值等。

我想这不是一个确定的答案,但这些是我在浏览数据表后的想法。