File tree Expand file tree Collapse file tree 1 file changed +90
-0
lines changed
Expand file tree Collapse file tree 1 file changed +90
-0
lines changed Original file line number Diff line number Diff line change 1+ #lang racket
2+ (require "digital-circuit.rkt " )
3+ (require "after-delay.rkt " )
4+
5+ (define (half-adder a b s c)
6+ (let ((d (make-wire))
7+ (e (make-wire)))
8+ (or-gate a b d)
9+ (and-gate a b c)
10+ (inverter c e)
11+ (and-gate d e s))
12+ 'ok )
13+
14+ (define (full-adder a b c-in sum c-out)
15+ (let ((s (make-wire))
16+ (c1 (make-wire))
17+ (c2 (make-wire)))
18+ (half-adder b c-in s c1)
19+ (half-adder a s sum c2)
20+ (or-gate c1 c2 c-out))
21+ 'ok )
22+
23+ (module+ test
24+ (require rackunit)
25+
26+ (test-case "Test for half-adder "
27+ (define a (make-wire))
28+ (define b (make-wire))
29+ (define s (make-wire))
30+ (define c (make-wire))
31+ ;; A B Sum (S) Carry (C)
32+ ;; 0 0 0 0
33+ ;; 0 1 1 0
34+ ;; 1 0 1 0
35+ ;; 1 1 0 1
36+ (half-adder a b s c)
37+ (propagate)
38+ (check-equal? (get-signal s) 0 )
39+ (check-equal? (get-signal c) 0 )
40+
41+ (set-signal! b 1 )
42+ (propagate)
43+ (check-equal? (get-signal s) 1 )
44+ (check-equal? (get-signal c) 0 )
45+
46+ (set-signal! b 0 )
47+ (set-signal! a 1 )
48+ (propagate)
49+ (check-equal? (get-signal s) 1 )
50+ (check-equal? (get-signal c) 0 )
51+
52+ (set-signal! b 1 )
53+ (propagate)
54+ (check-equal? (get-signal s) 0 )
55+ (check-equal? (get-signal c) 1 )
56+ )
57+
58+ (test-case "Test-for full-adder "
59+ ;; A B Cin S Cout
60+ ;; 0 0 0 0 0
61+ ;; 0 0 1 1 0
62+ ;; 0 1 0 1 0
63+ ;; 0 1 1 0 1
64+ ;; 1 0 0 1 0
65+ ;; 1 0 1 0 1
66+ ;; 1 1 0 0 1
67+ ;; 1 1 1 1 1
68+ (define a (make-wire))
69+ (define b (make-wire))
70+ (define c-in (make-wire))
71+ (define s (make-wire))
72+ (define c-out (make-wire))
73+ (full-adder a b c-in s c-out)
74+
75+ (propagate)
76+ (check-equal? (get-signal s) 0 )
77+ (check-equal? (get-signal c-out) 0 )
78+
79+ (set-signal! b 1 )
80+ (set-signal! c-in 1 )
81+ (propagate)
82+ (check-equal? (get-signal s) 0 )
83+ (check-equal? (get-signal c-out) 1 )
84+
85+ (set-signal! a 1 )
86+ (propagate)
87+ (check-equal? (get-signal s) 1 )
88+ (check-equal? (get-signal c-out) 1 )
89+ )
90+ )
You can’t perform that action at this time.
0 commit comments