香农展开(Shannon's expansion)或称香农分解(Shannon decomposition)是对布尔函数的一种变换方式。它可以将任意布尔函数表达为其中任何一个变量乘以一个子函数,加上这个变量的反变量乘以另一个子函数,如下两个公式所示案例。
对逻辑函数使用香农展开定理,就可以使用抽取的变量作为一个选择信号,然后用数据选择器来实现该函数。例如:
从而可形成如下电路:
在这个电路中出现了其中某个输入端口恒为1或恒为0的情形,工具在逻辑综合时会对此做进一步的优化,如下图所示。
实际上,对上述电路可重复使用香农展开定理,形成如下图所示电路。
香农展开定理对逻辑环路的改善尤为明显,如下图所示,由于环路的存在,图中红色标记的路径一旦插入流水寄存器,功能就不正确。
流水寄存器只能添加在环路之外,这就要用到香农展开定理。提取出反馈因子,分别将其设定为0和1,从而打开环路形成两条独立路径,而在路径末端添加二选一数据选择器,其控制端由输出反馈提供,最终形成如下图所示电路。
我们看一个案例:如下图所示代码片段,注意其中的第17行,形成了反馈环路,而恰恰是反馈环路成为了时序性能的瓶颈。这条路径上既有查找表又有DSP(实现乘法操作)且均没有额外的流水寄存器。
我们依据香农展开定理,将代码优化为如下形式,注意代码的第13行和第14行,新增了两个变量,分别对应internal_total大于target和小于target的情形,从而将环路打开。
对比上述两种电路,目标芯片均为xcvp1502,时钟频率为400MHz,采用Vivado2023.2,最终性能如下图所示。可以看到采用香农展开定理之后,WNS由原来的-0.719提升至-0.210。但仍然没有达到目标的400MHz。此时我们还可以进一步优化。
由于此时环路已经打开,那么我们就可以插入适当的流水寄存器,如下图所示。图中红色方框代表流水寄存器。从而可进一步改善WNS,最终WNS为0.841,意味着这部分路径至少可以运行至500MHz。
Copyright @ FPGA技术驿站
转载事宜请私信 | 获得授权后方可转载