逻辑优化基础-shannon decomposition

1. 简介

在逻辑综合中,香农分解(Shannon decomposition)是一种常用的布尔函数分解方法。它将一个布尔函数分解为两个子函数的和,其中每个子函数包含一个布尔变量的取反和非取反的部分

具体来说,假设对于一个布尔函数 F ( x 1 , x 2 , . . . , x n ) F(x_1, x_2, ..., x_n) F(x1,x2,...,xn)

进行香农分解,首先选定进行分解的变量,假设为 x k x_k xk,则该香农分解可以表示为:

F ( x 1 , x 2 , . . . , x n ) = x k ∗ F k ( x 1 , x 2 , . . . , x n , x k = 1 ) + x k ′ ∗ F k ′ ( x 1 , x 2 , . . . , x n , x k = 0 ) F(x_1, x_2, ..., x_n) = \\ x_k * F_k(x_1, x_2, ..., x_n, x_k=1) + x'_k * F_k'(x_1, x_2, ..., x_n, x_k=0) F(x1,x2,...,xn)=xkFk(x1,x2,...,xn,xk=1)+xkFk(x1,x2,...,xn,xk=0)
其中, x k x_k xk 是函数 F F F 的一个输入变量, x k ′ x'_k xk x k x_k xk 的取反, F k F_k Fk 是当 x k = 1 x_k=1 xk=1 F F F 的取值为真时的部分函数, F k ′ F_k' Fk 是当 x k = 0 x_k=0 xk=0 F F F 的取值为真时的部分函数。

这个分解的意义在于,它将一个布尔函数 F F F 分解成了两个子函数 F k F_k Fk F k ′ F_k' Fk,这两个子函数相互独立,因为它们只与 F F F 的一个输入变量 x k x_k xk 有关。这种分解可以用于减少门电路的复杂度,从而实现更快的逻辑运算和更小的电路面积,如何拿到更小的面积,后续了解到了再补充,本文主要是得到更快的速度。

香农分解的基本思想可以进一步扩展到多个输入变量的情况,即将一个布尔函数 F ( x 1 , x 2 , . . . , x n ) F(x_1, x_2, ..., x_n) F(x1,x2,...,xn) 分解成两个子函数 F0 和 F1,其中 F0 和 F1 分别只与 x 1 x_1 x1 取 0 和 1 时的输入变量 x 2 , x 3 , . . . , x n x_2, x_3, ..., x_n x2,x3,...,xn 有关。这种扩展的香农分解方法被称为递归香农分解(Recursive Shannon Decomposition),在实际的逻辑综合和电路设计中得到了广泛的应用。

2. 示例

假设有一个函数:
F = ( a , b , c , x ) F = (a, b, c, x) F=(a,b,c,x)
以变量 x x x 进行分解,则可以得到以下表达式:
F = x . ( a , b , c , 1 ) + x ′ . F ( a , b , c , 0 ) F = x.(a, b, c, 1) + x′.F(a, b, c, 0) F=x.(a,b,c,1)+x′.F(a,b,c,0)
如果用电路图来表示以上分解的话,如下所示:

在这里插入图片描述

更近一步,常数的信号通常可以被优化掉,变成以下的结构:

在这里插入图片描述

我们可以看到,经过香农分解后,信号 x x x 距离输出 o u t p u t output output 最近, x x x 所在的路径是整个 logic cone 中最快的一条。

所以说如果在电路 output required time 确定的情况下,某一个信号的 arrival time 非常的晚,可以把这个信号向靠近output的方向 push,从而降低电路的延迟。

这种做法的缺点也是显而易见的,至少在这个例子中,面积几乎一直出于增长的状态。

按照上面简介部分介绍的递归香农分解继续执行的话,可以得到如下电路:

在这里插入图片描述

2.1 个人理解

做timing优化的时候主要是将那些 arrival time 比较慢的信号尽可能的往 output 推,所以也就是说要基于这些 arrival time慢的信号进行香农分解。

3. 特殊案例(pipeline loop)

香农分解是优化电路中 l o o p loop loop 的一种有效技术。当你对 l o o p loop loop 中的逻辑执行香农分解时, l o o p loop loop 中的逻辑会移动到 l o o p loop loop 外部。从而可以对移动到循环外部的逻辑进行 p i p e l i n e pipeline pipeline 处理。

假设有以下一个 l o o p loop loop 电路,因为是在一个 l o o p loop loop 里面,所以这一部分信号不能进行 p i p e l i n e pipeline pipeline

在这里插入图片描述

该电路有一个单独的 r e g i s t e r register register 和一个额外的输出,我们可以通过执行香农分解将这个 l o o p loop loop 的逻辑移动到外部以进行 p i p e l i n e pipeline pipeline,具体的做法如下:

我们知道 r e g i s t e r register register o u t p u t output output的值只能为 0 或者 1,所以我们可以将驱动 r e g i s t e r register register 的逻辑复制(duplicate)一份,一份 r e g i s t e r register register 的输入为 0 0 0, 一份为 1 1 1,即对于这个 o u t p u t output output 进行香农分解,即可得到以下的电路:

在这里插入图片描述

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值