(define (ripple-carry-adder lista listb lists c)
(let ((lc '()))
(define (inner-ripple la lb ls ck)
(if (null? la)
'ok
(begin
(let ((cout (make-wire)))
(full-adder (car la) (car lb) ck (car ls) cout)
(append cout lc)
(inner-ripple (cdr la) (cdr lb) (cdr ls)) cout))))
(inner-ripple lista listb lists c)))
뒤쳐지는 시간을 논리곱, 논리합, 인버터 시간으로 표현하면..
inner-ripple은 모두 n번 호출되므로 full-adder 역시 n번 호출된다.
full-adder는 2개의 half-adder와 하나의 논리합으로 구성되어있다.
half-adder는 두개의 논리곱, 하나의 논리합, 하나의 인버터로 구성되어 있다.
따라서 full-adder는 네개의 논리곱, 세개의 논리합, 하나의 인버터 만큼 시간지연이 발생한다.
그러므로 ripple-carry-adder는 총 4n 논리곱 + 3n 논리합 + n인버터 지연시간이 필요하게된다.

댓글 없음:
댓글 쓰기