如何将电路分解为高级模块

时间:2017-07-18 14:27:41

标签: yosys

我感兴趣的是采用逻辑中描述的电路,并将其分解为高级连接模块,其中每个模块最多有6个输入和5个输出。因此,除了模块可以具有多个输出之外,它在某种意义上类似于FPGA,并且它们不需要实现为LUT。我计划分别优化这些模块的逻辑。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

因此,您希望将电路划分为具有最多6个输入和最多5个输出的小电路。 Yosys或ABC中没有现成的功能。 (ABC是用于Yosys中大多数低级逻辑优化的工具。)

你可以尝试为它写一个传递(关于图分区算法的文献很多,我确信有一些东西可以合理地工作),但是你的需求存在根本问题: / p>

显然,例如,它会非常简单将任何逻辑划分为具有6个输入和3个输出的单元:简单地将逻辑映射到2输入门,然后将3个门随机打包到一个单元中。这将是一个有效的分区,但它不是一个非常有用的分区,因为每个输出取决于不同的输入。仅当至少一些输入在单元的输出之间共享时,分区才有用。这就是问题所在:您会发现,在几乎所有现实世界的电路中,只有极少数信号可以通过这种方式共享,即使使用完美的分区算法,您的单元也将包含大多数独立输出或只有一个非常少量产出。

我不确切知道您的应用是什么,但一种简单的方法可以是例如首先简单地映射整个电路说4-LUT然后有一个简单的通道,检测共享一些输入的4-LUT并合并到其中的三个(如果它们共享足够的输入,那么它们一起最多有6个输入) 。但我担心你会发现只有少数4-LUT可以共享。