26 lines
665 B
Scala
26 lines
665 B
Scala
object FourBitAdder {
|
|
type Nibble=(Boolean, Boolean, Boolean, Boolean)
|
|
|
|
def xor(a:Boolean, b:Boolean)=(!a)&&b || a&&(!b)
|
|
|
|
def halfAdder(a:Boolean, b:Boolean)={
|
|
val s=xor(a,b)
|
|
val c=a && b
|
|
(s, c)
|
|
}
|
|
|
|
def fullAdder(a:Boolean, b:Boolean, cIn:Boolean)={
|
|
val (s1, c1)=halfAdder(a, cIn)
|
|
val (s, c2)=halfAdder(s1, b)
|
|
val cOut=c1 || c2
|
|
(s, cOut)
|
|
}
|
|
|
|
def fourBitAdder(a:Nibble, b:Nibble)={
|
|
val (s0, c0)=fullAdder(a._4, b._4, false)
|
|
val (s1, c1)=fullAdder(a._3, b._3, c0)
|
|
val (s2, c2)=fullAdder(a._2, b._2, c1)
|
|
val (s3, cOut)=fullAdder(a._1, b._1, c2)
|
|
((s3, s2, s1, s0), cOut)
|
|
}
|
|
}
|