我是 Scheme 语言的初学者,所以我在编写一个程序来接收一个 n 位数字并将其放入 ALU 时遇到了麻烦。ALU 应该使用 1 位 ALU 构建。
这是 1 位 ALU:
(define ALU1
(lambda (sel a b carry-in)
(multiplexor4 sel
(cons (andgate a b) 0)
(cons (orgate a b) 0)
(cons (xorgate a b) 0)
(multiplexor2 sub
(full-adder a b carry-in)
(full-adder a (notgate b) carry-in)))))
它与多路复用器和全加器一起工作。
这是我尝试使用几个程序来模拟 n 位 ALU:
(define ALU-helper
(lambda (selection x1 x2 carry-in n)
(if (= n 0)
'()
(ALU1 (selection x1 x2 carry-in)))))
(define ALUn
(lambda (selection x1 x2 n)
(ALU-helper (selection x1 x2 c n))))
完成后,它应该根据“选择”取 2 个 n 位数字并将它们相加或相减等。这将是输入:
(define x1 '(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) )
(define x2 '(1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1) )
(ALUn 'add x1 x2 32)
而且我在运行它时遇到错误,这似乎是由于“选择”参数而发生的。我确定我只是对所有参数感到困惑,但我不确定如何解决问题并让 ALU 工作。我正在使用 Dr. Racket 程序,语言 R5RS 运行它。