Description

The Bool type corresponds to a boolean value (True or False).

Declaration

The syntax to declare a boolean value is as follows: (everything between [] are optional)

Syntax Description Return
Bool[()] Create a Bool Bool
True Create a Bool assigned with true Bool
False Create a Bool assigned with false Bool
Bool(value: Boolean) Create a Bool assigned with a Scala Boolean(true, false) Bool
val myBool_1 = Bool          // Create a Bool 
myBool_1 := False            // := is the assignment operator

val myBool_2 = False         // Equivalent to the code above 

val myBool_3 = Bool(5 > 12)  // Use a Scala Boolean to create a Bool 

Operators

The following operators are available for the Bool type

Logic

Operator Description Return type
!x Logical NOT Bool
x && y
x & y
Logical AND Bool
x || y
x | y
Logical OR Bool
x ^ y Logical XOR Bool
x.set[()] Set x to True -
x.clear[()] Set x to False -
x.setWhen(cond) Set x when cond is True Bool
x.clearWhen(cond) Clear x when cond is True Bool
val a, b, c = Bool
val res = (!a & b) ^ c   // ((NOT a) AND b) XOR c

val d = False
when(cond){
  d.set()    // equivalent to d := True
}

val e = False
e.setWhen(cond) // equivalent to when(cond){ d := True }

Edge detection

Operator Description Return type
x.edge[()] Return True when x changes state Bool
x.edge(initAt: Bool) Same as x.edge but with a reset value Bool
x.rise[()] Return True when x was low at the last cycle and is now high Bool
x.rise(initAt: Bool) Same as x.rise but with a reset value Bool
x.fall[()] Return True when x was high at the last cycle and is now low Bool
x.fall(initAt: Bool) Same as x.fall but with a reset value Bool
x.edges[()] Return a bundle (rise, fall, toggle) BoolEdges
x.edges(initAt: Bool) Same as x.edges but with a reste value BoolEdges
when(myBool_1.rise(False)){
	// do something when a rising edge is detected 
} 


val edgeBundle = myBool_2.edges(False)
when(edgeBundle.rise){
	// do something when a rising edge is detected
}
when(edgeBundle.fall){
	// do something when a falling edge is detected
}
when(edgeBundle.toggle){
	// do something at each edge
}

Comparison

Operator Description Return type
x === y Equality Bool
x =/= y Inequality Bool
when(myBool){ // Equivalent to when(myBool === True)
	// do something when myBool is True
}

when(!myBool){ // Equivalent to when(myBool === False)
	// do something when myBool is False
}

Type cast

Operator Description Return
x.asBits Binary cast in Bits Bits(w(x) bits)
x.asUInt Binary cast in UInt UInt(w(x) bits)
x.asSInt Binary cast in SInt SInt(w(x) bits)
x.asUInt(bitCount) Binary cast in UInt + resize UInt(bitCount bits)
x.asBits(bitCount) Binary cast in Bits + resize Bits(bitCount bits)
// Add the carry to an SInt value
val carry = Bool 
val res = mySInt + carry.asSInt 

Misc

Operator Description Return
x ## y Concatenate, x->high, y->low Bits(w(x) + w(y) bits)
val a, b, c = Bool

// Concatenation of three Bool into a Bits
val myBits = a ## b ## c 
Tags: