1 / 24

CS220 Programming Principles

CS220 Programming Principles. 프로그래밍의 이해 2002 가을학기 Class 12: Logic Circuit Simulation 한 태숙. Event-driven Simulation. Example: Digital Circuit function box : logic gates wire : connections delay: characteristics Model

xaria
Download Presentation

CS220 Programming Principles

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS220Programming Principles 프로그래밍의 이해 2002 가을학기 Class 12: Logic Circuit Simulation 한 태숙

  2. Event-driven Simulation • Example: Digital Circuit • function box : logic gates • wire : connections • delay: characteristics • Model • wire : computational objects which “hold” the signals -> make-wire • function boxes : procedure that enforce the correct relationships among signals

  3. Half Adder (define a (make-wire)) (define b (make-wire)) (define d (make-wire)) (or-gate a b d) D A S E C B

  4. Half-Adder (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))

  5. Full Adder (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))

  6. Wire + Delay • Constructor : (make-wire) • (get-signal <wire>) • returns the current value of the signal on the wire • (set-signal! <wire> <new-value>) • changes the value of the signal on the wire • (add-action! <wire> <procedure of no args>) • asserts that the designated procedure should be run whenever the signal on the wire changes value • after-delay : simulates propagation delay

  7. Gate Not (define (inverter input output) (define (invert-input) (let ((new-value (logical-not (get-signal input)))) (after-delay inverter-delay (lambda () (set-signal! output new-value))))) (add-action! input invert-input) 'ok) (define (logical-not s) (cond ((= s 0) 1) ((= s 1) 0) (else (error "Invalid signal" s))))

  8. Gate AND (define (and-gate a1 a2 output) (define (and-action-procedure) (let ((new-value (logical-and (get-signal a1)(get-signal a2)))) (after-delay and-gate-delay (lambda () (set-signal! output new-value))))) (add-action! a1 and-action-procedure) (add-action! a2 and-action-procedure) 'ok)

  9. Gate OR : exercise 3.28 (define (or-gate o1 o2 output) (define (or-action-procedure) (let ((new-value (logical-or (get-signal o1) (get-signal o2)))) (after-delay or-gate-delay (lambda () (set-signal! output new-value))))) (add-action! o1 or-action-procedure) (add-action! o2 or-action-procedure) 'ok)

  10. Logical And, Logical Or (define (logical-and s1 s2) (cond ((and (= s1 1)(= s2 1)) 1) ((and (= s1 0)(= s2 1)) 0) ((and (= s1 1)(= s2 0)) 0) ((and (= s1 0)(= s2 0)) 0) (else (error "Invalid signal" s)))) (define (logical-or s1 s2) (cond ((and (= s1 1)(= s2 1)) 1) ((and (= s1 0)(= s2 1)) 1) ((and (= s1 1)(= s2 0)) 1) ((and (= s1 0)(= s2 0)) 0) (else (error "Invalid signal" s))))

  11. Representing Wires (define (make-wire) (let ((signal-value 0) (action-procedures '())) (define (set-my-signal! new-value) (if (not (= signal-value new-value)) (begin (set! signal-value new-value) (call-each action-procedures)) 'done)) (define (accept-action-procedure! proc) (set! action-procedures (cons proc action-procedures)) (proc))

  12. (define (dispatch m) (cond ((eq? m 'get-signal) signal-value) ((eq? m 'set-signal!) set-my-signal!) ((eq? m 'add-action!) accept-action-procedure!) (else (error "Unknown operation --WIRE" m)))) dispatch)) (define (call-each procedures) (if (null? procedures) 'done (begin ((car procedures)) (call-each (cdr procedures)))))

  13. (define (get-signal wire) (wire 'get-signal)) (define (set-signal! wire new-value) ((wire 'set-signal!) new-value)) (define (add-action! wire action-procedure) ((wire 'add-action!) action-procedure))

  14. The Agenda • (make-agenda) • constructor: returns a new empty agenda • (empty-agenda? <agenda>) • is true if the specified agenda is empty • (first-agenda-item <agenda>) • returns the first item on the agenda • (remove-first-agenda-item! <agenda>) • modifies the agenda by removing the first item • (add-to-agenda! <time> <action> <agenda>) • modifies the agenda by adding the given action procedure to be run at the specified time

  15. Implementing Delay: After-delay • (current-time <agenda>) • return the current simulation time • We will define the-agenda as agenda data structure (define (after-delay delay action) (add-to-agenda! (+ delay (current-time the-agenda)) action the-agenda))

  16. Driver Program - Propagate (define (propagate) (if (empty-agenda? the-agenda) ’done (let ((first-item (first-agenda-item the-agenda))) (first-item) (remove-first-agenda-item! the-agenda) (propagate))))

  17. Probe - Detecting Signal (define (probe name wire) (add-action! wire (lambda () (newline) (display name) (display ” ”) (display (current-time the-agenda)) (display ” New-value= ”) (display (get-signal wire)))))

  18. Setting Up Environment (define the-agenda (make-agenda)) (define inverter-delay 2) (define and-gate-delay 3) (define or-gate-delay 5) ; circuit description (define input-1 (make-wire)) (define input-2 (make-wire)) (define sum (make-wire)) (define carry (make-wire)) (probe 'sum sum) (probe 'carry carry) (half-adder input-1 input-2 sum carry)

  19. Running the simulation > (set-signal! input-1 1) 'done > (propagate) sum 8 New-value = 1 'done > (set-signal! input-2 1) 'done > (propagate) carry 11 New-value = 1 sum 16 New-value = 0 'done

  20. Implementing Agenda(I) (define (make-time-segment time queue) (cons time queue)) (define (segment-time s) (car s)) (define (segment-queue s) (cdr s)) (define (make-agenda) (list 0)) (define (current-time agenda) (car agenda)) (define (set-current-time! agenda time) (set-car! agenda time)) (define (segments agenda) (cdr agenda)) (define (set-segments! agenda segments) (set-cdr! agenda segments)) (define (first-segment agenda) (car (segments agenda))) (define (rest-segments agenda) (cdr (segments agenda)))

  21. Implementing Agenda(II) (define (empty-agenda? agenda) (null? (segments agenda))) (define (remove-first-agenda-item! agenda) (let ((q (segment-queue (first-segment agenda)))) (delete-queue! q) (if (empty-queue? q) (set-segments! agenda (rest-segments agenda))))) (define (first-agenda-item agenda) (if (empty-agenda? agenda) (error "Agenda is empty -- FIRST-AGENDA-ITEM") (let ((first-seg (first-segment agenda))) (set-current-time! agenda (segment-time first-seg)) (front-queue (segment-queue first-seg)))))

  22. Implementing Agenda(III) (define (add-to-agenda! time action agenda) (define (belongs-before? segments) (or (null? segments) (< time (segment-time (car segments))))) (define (make-new-time-segment time action) (let ((q (make-queue))) (insert-queue! q action) (make-time-segment time q)))

  23. (define (add-to-segments! segments) (if (= (segment-time (car segments)) time) (insert-queue! (segment-queue (car segments)) action) (let ((rest (cdr segments))) (if (belongs-before? rest) (set-cdr! segments (cons (make-new-time-segment time action) (cdr segments))) (add-to-segments! rest)))))

  24. (let ((segments (segments agenda))) (if (belongs-before? segments) (set-segments! agenda (cons (make-new-time-segment time action) segments)) (add-to-segments! segments))))

More Related