首先,我们知道给定一个 n n n元命题公式 A A A,其真值表有 2 n 2^{n} 2n个条目(所有的 n n n元命题公式可以产生 2 2 n 2^{2^{n}} 22n个条目)
集合定义: S = { 1 , ⋯ , 2 n − 1 } S=\{1,\cdots,2^{n}-1\} S={1,⋯,2n−1}
若公式 A A A中含有 n n n个命题变项,则 A A A的主析取范式含有 s ( 0 ⩽ s ⩽ 2 n ) s(0\leqslant{s}\leqslant{2^{n}}) s(0⩽s⩽2n)个极小项,且 A A A恰好有 s s s个成真赋值,这些成真赋值恰好是所含极小项下标的二进制串表示,其余 2 n − s 2^{n}-s 2n−s个赋值都是成假赋值
例如二进制半加器(不考虑上一位的进位,但是考虑下一位进位;其输入变元 x , y x,y x,y其输出变元包含半 h h h和半进位 d d d),我们根据半加器的真值表来求取一个真值表和半加器相同的命题公式
x | y | 本位和位h | 下一位进位d |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
分析此表,其包含了两个公式(输出半和位,半进位)
下面我尝试给出主析取范式 h ( x , y ) h(x,y) h(x,y), d ( x , y ) d(x,y) d(x,y)
根据公式和其主范式的关系,如果要求主析取范式,则我们只需要关注真值表中的成真赋值
若想要求主合取范式
x | y | h |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
x | y | d |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
h = m 1 ∨ m 2 h=m_1\vee{m_2} h=m1∨m2= ( ¬ x ∧ y ) ∨ ( x ∧ ¬ y ) (\neg{x}\wedge{y})\vee(x\wedge{\neg{y}}) (¬x∧y)∨(x∧¬y),
d = m 3 d=m_{3} d=m3= x ∧ y x\wedge{y} x∧y;
全加器不仅考虑了下一位的进位(carry out,简记为cout,或 c c c),同时考虑了上一位的进位
为此,输入也要有一个进位(carry in,简记为cin
,或 c ′ c' c′)来使上一位进位进入加法运算
1 , ⋯ , 2 n − 1 1,\cdots,{2^{n}-1} 1,⋯,2n−1 | x | y | 上一位进位cin(c’) | 本位和位s | 下一位进位cout© |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 | 0 |
2 | 0 | 1 | 0 | 1 | 0 |
3 | 0 | 1 | 1 | 0 | 1 |
4 | 1 | 0 | 0 | 1 | 0 |
5 | 1 | 0 | 1 | 0 | 1 |
6 | 1 | 1 | 0 | 0 | 1 |
7 | 1 | 1 | 1 | 1 | 1 |
s s s= ( ¬ x ∧ ¬ y ∧ c ′ ) (\neg{x}\wedge{\neg y}\wedge{{c'}}) (¬x∧¬y∧c′) ∨ \vee ∨ ( ¬ x ∧ y ∧ ¬ c ′ ) (\neg{x}\wedge{y}\wedge{\neg c'}) (¬x∧y∧¬c′) ∨ \vee ∨ ( x ∧ ¬ y ∧ ¬ c ′ ) (x\wedge{\neg{y}}\wedge{\neg c'}) (x∧¬y∧¬c′) ∨ \vee ∨ ( x ∧ y ∧ c ′ ) (x\wedge{y}\wedge{c'}) (x∧y∧c′)
c c c= ( ¬ x ∧ y ∧ c ′ ) (\neg{x}\wedge{y}\wedge{{c'}}) (¬x∧y∧c′) ∨ \vee ∨ ( x ∧ ¬ y ∧ c ′ ) ({x}\wedge{\neg y}\wedge{c'}) (x∧¬y∧c′) ∨ \vee ∨ ( x ∧ y ∧ ¬ c ′ ) (x\wedge{{y}}\wedge{\neg c'}) (x∧y∧¬c′) ∨ \vee ∨ ( x ∧ y ∧ c ′ ) (x\wedge{y}\wedge{c'}) (x∧y∧c′)
(1)
,异或门嵌套(2)
,其中 c ′ c' c′是全加器用来接受上一位进位的输入变量(1)
,容易仅需要两个半加器(分别记为半加器 a 1 , a 2 a_1,a_2 a1,a2)即可实现 s s s的计算
(1.1)
(1.1),(2)
,再加上一个或门就可以计算 c c c,Note:
设半加器本位输出和 h = ( ¬ x ∧ y ) ∨ ( x ∧ ¬ y ) h=(\neg{x}\wedge{y})\vee(x\wedge{\neg{y}}) h=(¬x∧y)∨(x∧¬y);全加器下一位进位输出 s s s:
s s s ⇔ \Leftrightarrow ⇔ ( ¬ x ∧ ¬ y ∧ c ′ ) (\neg{x}\wedge{\neg y}\wedge{{c'}}) (¬x∧¬y∧c′) ∨ \vee ∨ ( ¬ x ∧ y ∧ ¬ c ′ ) (\neg{x}\wedge{y}\wedge{\neg c'}) (¬x∧y∧¬c′) ∨ \vee ∨ ( x ∧ ¬ y ∧ ¬ c ′ ) (x\wedge{\neg{y}}\wedge{\neg c'}) (x∧¬y∧¬c′) ∨ \vee ∨ ( x ∧ y ∧ c ′ ) (x\wedge{y}\wedge{c'}) (x∧y∧c′)