将组合循环转换为锁存器

时间:2014-11-12 19:56:45

标签: algorithm verilog icarus

您能推荐一种将任何循环组合逻辑转换为非循环组合逻辑加锁存器的算法吗? 谢谢

1 个答案:

答案 0 :(得分:1)

这是一个相当开放的问题,可能是一般形式的一个非常棘手的问题。这更像是一个CAD问题,与Verilog没什么关系。只需从循环组合逻辑图创建非循环组合逻辑图很容易:找到一个循环并通过插入一个锁存器来打破它。继续,直到没有剩余的循环。

但是,您还应该定义某种功能正确性和等效性,并在转换后保留它。通过向电路添加锁存器,您可以更改信号的相对时序(也称为同步距离),结果图形可能在功能上与原始图形不同。

一种名为retiming的经典算法尝试移动已存在的锁存器以满足/最小化时钟周期时间。

我认为保留同步距离的算法草图如下:在主输入处添加n个锁存器并运行增强的重定时算法,在该算法中添加额外的约束以保持相等的同步距离距主要输入的距离节点。这些节点是组合门和主要输出的输入。例如,AND门的两个输入a and b的顺序距离应始终保持与所有主要输入相同,即在从每个输入ia的路径中,您应该看到从ib可以看到相同数量的锁存器。

通过这些增加的约束,重新定时将告诉您它是否可以移动锁存器以满足时钟周期时间(在这种情况下可以是非常大的数字,即大于最长周期)。如果n足够,重定时算法应该能够使锁存器中断所有周期。您可以在n的不同值上迭代算法以获得答案。