不说笑话,下面出两个题目,其分别是
问题1:运用数字电路,如何将一个时钟域的上升沿,转换成另一个时钟域的脉冲信号(单周期信号)。
问题2:运用数字电路,如何将一个时钟域的脉冲信号(单周期信号),转换成另一个时钟域的上升沿。
可能乍一看,这两个题目优点难度,特别是第二个问题,答上的就更少了。那再出第三道题目,会不会让这个问题变简单些那。
问题3:运用数字电路,如何将一个时钟域的上升沿,转换成另一个时钟域的上升沿。
题目3,,就会让人觉得太简单了,这既是异步信号的同步化,寄存两拍就可以了。这CLKA信号就被同步到CLKB的方法,有一定数字电路知识的都会 。不论CLKA与CLKB时钟频率的高低。
下面回到题目1,我们按照那个庸医的做法,把未知问题转换成已知问题,那这个问题就转化成了两个部分,A时钟域的上升沿转换成B时钟域的上升沿,,然后B时钟域的上升沿如何变成其单脉冲信号。所以问题就很简单了,最后的输出 B &! B_r(B信号寄存一拍). 电路如下所示。
那回到题目2.这个问题就转换成了A时钟的脉冲信号转换成A信号的上升沿,而A信号的上升沿,再转换成B信号的上升沿。
那么,如何将已是时钟信号的脉冲信号,转换成另一个时钟的脉冲信号?呵呵。
以上只是两个简单的电路,实际设计中,有许多可以进行设计,可以化繁为简或者化未知为已知的方法。
例如,实际设计中,经常有设计变更的情况,比如,原来输出的信号A,但是需要输出信号B。那可能大多数情况,模块不用重新设计,只需要在原有输出信号(或者数据)A上,再添加相应的输出,或者封装一层接口,就可以快速满足需求。并且原有设计模块也可以复用,并且已验证充分。通过化未知问题为已知问题的方式,简化设计和验证,能够快速的设计需要。一方面,而这正是IP复用的好处,另一方面,原有设计如何达到IP复用的标准,也是值得探索的部分。
这个故事,其实还有另一版本,那就是锤子和钉子,那就是如果你已经有一把锤子,那就看什么都是钉子。如何将未知问题转化成你的锤子可以解决的钉子,则是就是设计复用的问题了。