香农展开(),或称香农分解()是对布尔函数的一种变换方式。它可以将任意布尔函数表达为其中任何一个变量乘以一个子函数,加上这个变量的反变量乘以另一个子函数。
:f(X_1, X_2, \dots , X_n) = X_1 \cdot f(1, X_2, \dots , X_n) + X_1' \cdot f(0, X_2, \dots , X_n)
例如:
: f(x, y, z) = yz + xyz' + x'y'z
可以抽取其中的变量 x 及其反变量 x'(x 取反),而得到
:f(x, y, z) = x \cdot f(1, y, z) + x' \cdot f(0, y, z)
:f(x, y, z) = x(yz + (1)yz' + (1)'y'z) + x'(yz + (0)yz' + (0)'y'z)
:f(x, y, z) = x(yz + (1)yz' + (0)y'z) + x'(yz + (0)yz' + (1)y'z)
:f(x, y, z) = x(yz + yz') + x'(yz + y'z)
对逻辑函数使用香农展开,就可以使用抽取的变量作为一个选择信号,然后用数据选择器来实现该函数。
参考文献
*
外部链接
*[https://web.archive.org/web/20070927201537/http://homepages.ius.edu/JFDOYLE/c421/html/Chapter6.htm Shannon’s Decomposition] Example with multiplexers.
*[http://www1.cs.columbia.edu/~sedwards/papers/soviani2007optimizing.pdf Optimizing Sequential Cycles Through Shannon Decomposition and Retiming (PDF)] Paper on application.
评论 (0)