diff --git a/beautiful-racket/br/demo/hdl/Nand2.hdl.rkt b/beautiful-racket/br/demo/hdl/Nand2.hdl.rkt index 139d2db..4c5872e 100644 --- a/beautiful-racket/br/demo/hdl/Nand2.hdl.rkt +++ b/beautiful-racket/br/demo/hdl/Nand2.hdl.rkt @@ -1,13 +1,19 @@ #lang br +(provide (all-defined-out)) -(define Nand-in-a +(struct Nand (a b out) #:transparent) + +(define (make-Nand) + (Nand a b out)) + +(define a (let ([Nand-a-val 0]) (λ ([val #f]) (if val (set! Nand-a-val val) Nand-a-val)))) -(define Nand-in-b +(define b (let ([Nand-b-val 0]) (λ ([val #f]) (if val @@ -15,22 +21,16 @@ Nand-b-val)))) -(define (Nand-out-out) - (if (< (+ (Nand-in-a) (Nand-in-b)) 2) +(define (out) + (if (< (+ (a) (b)) 2) 1 0)) (module+ test (require rackunit) - (check-equal? (begin (Nand-in-a 0) (Nand-in-b 0) (Nand-out-out)) 1) - (check-equal? (begin (Nand-in-a 0) (Nand-in-b 1) (Nand-out-out)) 1) - (check-equal? (begin (Nand-in-a 1) (Nand-in-b 0) (Nand-out-out)) 1) - (check-equal? (begin (Nand-in-a 1) (Nand-in-b 1) (Nand-out-out)) 0)) + (check-equal? (begin (a 0) (b 0) (out)) 1) + (check-equal? (begin (a 0) (b 1) (out)) 1) + (check-equal? (begin (a 1) (b 0) (out)) 1) + (check-equal? (begin (a 1) (b 1) (out)) 0)) - -(struct ins ([a #:auto] [b #:auto]) #:transparent - #:auto-value (open-input-bytes #"")) -(struct outs ([out #:auto]) #:transparent) -(struct Nand (i o) #:transparent) - -(define f (Nand (ins) (outs))) \ No newline at end of file +(define n (make-Nand)) diff --git a/beautiful-racket/br/demo/hdl/Not2.hdl.rkt b/beautiful-racket/br/demo/hdl/Not2.hdl.rkt new file mode 100644 index 0000000..752f7f5 --- /dev/null +++ b/beautiful-racket/br/demo/hdl/Not2.hdl.rkt @@ -0,0 +1,27 @@ +#lang racket +#| + +CHIP Not { + IN in; + OUT out; + + PARTS: + Nand(a=in, b=in, out=out); + + } + +|# + +(provide (prefix-out Not- (all-defined-out))) + +(require "Nand2.hdl.rkt") + +(define in + (let ([in-val 0]) + (λ ([val #f]) + (if val + (set! in-val val) + in-val)))) + +(define n (make-Nand)) +(define (out) (begin ((Nand-a n) (in)) ((Nand-b n) (in)) ((Nand-out n)))) \ No newline at end of file