19. (define a (make-wire))
(define b (make-wire))
(define c (make-wire))
(define d (make-wire))
(define e (make-wire))
(define s (make-wire))
(or-gate a b d)
(and-gate a b c)
(inverter c e)
(and-gate d e s)
. (HALF-ADDER)
20. (define (half-adder a b s c)
(let ((d (make-wire))
(e (make-wire)))
(or-gate a b d)
(and-gate a b c)
(inverter c e)
(and-gate d e s)
'ok))
. ( )
22. : (FULL-ADDER)
A B CI S CO
0 0 0 0 0
1 0 0 1 0
0 1 0 1 0
1 1 0 0 1
0 0 1 1 0
1 0 1 0 1
0 1 1 0 1
1 1 1 1 1
23. (define (full-adder a b c-in sum c-out)
(let ((s (make-wire))
(c1 (make-wire))
(c2 (make-wire)))
(half-adder b c-in s c1)
(half-adder a s sum c2)
(or-gate c1 c2 c-out)
'ok))
: (FULL-ADDER)
34. 3.30
“ 3.27 n (ripple-carry adder) .
n . A1,A2,
A3, ...,An B1, B2, B3, ..., Bn ( Ak Bk 0 1).
n S1, S2, S3, ..., Sn , C .
ripple-carry-adder . n
--- Ak, Bk Sk--- , C .
,
. n , ,
, . ”
36. 3.30 (RIPPLE-CARRY
ADDER)
“ 3.27 n (ripple-carry adder) . n
. A1,A2,A3, ...,An B1, B2,
B3, ..., Bn ( Ak Bk 0 1). n S1, S2, S3, ..., Sn ,
C . ripple-carry-adder .
n --- Ak, Bk Sk--- , C
. ”
37. 3.30 (RIPPLE-CARRY
ADDER)
(define (ripple-carry-adder as bs ss c)
(define (iter as bs ss ck-1)
(if (not (null? as))
(let ((ak (car as))
(bk (car bs))
(sk (car ss))
(ck (make-wire)))
(full-adder ak bk ck sk ck-1)
(iter (cdr as) (cdr bs) (cdr ss) ck))))
(let ((c1 (make-wire)))
(full-adder (car as) (car bs) c1 (car ss) c)
(iter (cdr as) (cdr bs) (cdr ss) c-in)))
“ 3.27 n (ripple-carry adder) . n
. A1,A2,A3, ...,An B1, B2,
B3, ..., Bn ( Ak Bk 0 1). n S1, S2, S3, ..., Sn ,
C . ripple-carry-adder .
n --- Ak, Bk Sk--- , C
. ”
38. * 1インバータ遅延(Di)
* 1アンドゲート遅延(Da)
* 1オアゲート遅延(Do)
* Do >= Da + Di と仮定
半加算器の遅延:
Sの遅延(Dhs) = max(Do, Da + Di) + Da
= Do + Da
Cの遅延(Dhc) = Da
“ , . n
, , ,
. ”
3.30 (RIPPLE-CARRY
ADDER)
39. 3.30 (RIPPLE-CARRY
ADDER)
半加算器 Sの遅延(Dhs) = Do + Da
半加算器 Cの遅延(Dhc) = Da
全加算器の遅延:
Sの遅延(Dfs) = max(0, Dhs) + Dhs
= 2Dhs
= 2(Do + Da)
= 2Do + 2Da
Cの遅延(Dfc) = max(Dhs + Dhc, Dhc) + Do
= Dhs + Dhc + Do
= (Do + Da) + (Da) + Do
= 2Do + 2Da
“ , . n
, , ,
. ”