1.内部时钟
除了系统时钟,在设计的时候有时候会需要自己产生一个时钟。内部时钟只是用组合逻辑会产生毛刺,在同步模式的时候并不会有任何的影响,时钟的边缘捕获是一致的,但对于异步逻辑来说这是不一定能够过滤掉的,可能会影响set up time 和hold time。即使时序上可能是OK的,但是寄存器可能会输出奇怪的值。
解决这种办法最简单的法子就是加一个同步。如下图所示,把寄存器的输出作为真正时钟信号。可以在时钟产生的数据之后打一拍来改善这个行为,但其实我这边有个疑问,我觉得如果刚好打一拍的时候,采样到了毛刺出现的时候,这个错误的状态也会被传递下去的。
书中提到了:产生内部时钟的组合逻辑会产生延迟。有时候,时钟线上的延迟会导致时钟的偏移比两个数据之间的数据延迟更长,会违背时序要求。但我觉得之后会有后端的人帮忙修时序,这些简单的使用组合逻辑作为时钟产生的第一级是可以接收的。
2.多路时钟
在实际应用中,可能会需要产生多个频率标准的通信应用常常会使用多个时钟,因此时钟多路操作是需要的。
但需要保证:1.初始化配置之后,时钟多路逻辑就不在改变
2.时钟切换时寄存器时钟处于复位状态
3.时钟切换产生的短暂错误响应没有错误影响(我觉得就是切换会有毛刺)
3.门控时钟
门控时钟是低功耗设计之中的系统级里面很常用的手段,其实就是为了减少不需要的时钟的翻转。
在传统的同步时钟域中,主要功耗包括三个部分:
1.时钟沿变化的组合逻辑产生的功耗
2.有触发器产生的功耗
3设计中时钟树产生的功耗
一般来说,时钟树产生的功耗占总功耗的50%,因此最好在根部产生和关闭时间来让时钟功能变化的更彻底。
3.1 无锁存器的门控时钟电路
不含锁存器的门控时钟,通过与门或者或门来实现(其实看使用哪个边沿,与门就是上升沿)
这种情况会导致时钟的一个周期没有把使能信号保持一个常量。但如果不满足这个情况,会导致时钟产生错误,影响具体功能的实现。
3.2 基于锁存器的门控时钟
其实就是加入了一个电平敏感的锁存器,来让时钟使能信号维持一个完整的时钟的周期。
3.3 门控时钟
其实就是减少大量门翻转的作用。例如:解码器。比如说解码机制中,地址信号会在所有目标模块的解码器中变化。解码器输入断的切断会导致太多的门进行翻转。我们可以用使能或者选择信号来阻止切换行为的传播