# Boolean operations
Keywords: stratus

Subsections

- Description
- List
- Generators to instantiate
- Example
- Errors
- See Also

##
Boolean operations

### Description

Most common boolean operators can be instantiated without the `Inst` constructor.

### List

Boolean operators are listed below :

- `And2` : `q <= i0 & i1`
- `Or2` : `q <= i0 | i1`
- `Xor2` : `q <= i0 ^ i1`
- `Inv` : `q <= ~i0`

### Generators to instantiate

One can choose the generator to be used. Some methods are applied to the cell and set the generator used when using `&`, `|`, `^` and `~`. The generators used by default are the ones from the virtual library.

Methods are :

- `SetAnd`
- `SetOr`
- `SetXor`
- `SetNot`

### Example

    class essai ( Model ) :

      def Interface ( self ) :
        self.A = SignalIn  ( "a", 4 )
        self.B = SignalIn  ( "b", 4 )
        self.B = SignalIn  ( "c", 4 )

        self.S = SignalOut ( "s", 4 )

        self.vdd = VddIn  ( "vdd" )
        self.vss = VssIn  ( "vss" )

      def Netlist ( self ) :

        self.S <= ( ~self.A & self.B ) | self.C

### Errors

Some errors may occur :

- `[Stratus ERROR] & : the nets must have the same lenght.`
  When one uses boolean expressions, one has to check that the sizes of both nets are equivalent.
- `[Stratus ERROR] : there is no alim.`
  The cell being created does not have the alimentation nets. The instanciation is impossible.

### See Also

Introduction Netlist Instanciation of a multiplexor Instanciation of a shifter Instanciation of a register Instanciation of constants Arithmetical operations Comparison operations