Bits and Int
In Neo, Bits and Int are the two primary types for representing binary data. Both support bitwise operations and equality, whereas Int also supports mathmatical operations and comparisons.
Declaration
Both Bits and Int require a width to be specified, which determines the number of bits in the type.
logic my_bits(0): Bits(32);
logic my_int(0): Int(32);Constant Values
To create an Int of a constant value, the syntax is [value]#[width], both of which can be parameterized values. An Int can be used anywhere a Bits is expected, so this syntax also works for assigning to Bits.
logic my_int(0): Int(32) = 42#32;
logic my_bits(0): Bits(32) = 42#32;Concatenation
Both Bits and Int support concatenation with the ## operator. The left operand is the most significant bits, and the right operand is the least significant bits.
logic my_bits(0): Bits(64) = 32#32 ## 16#32;Bit Selections
To extract a single bit from a value val, use val{bit}, where bit is a number less than the width of val.
To extract a range of bits, use val{from:to}, where from and to are numbers less than the width of val. The selection is inclusive of both from and to. If to is greater than from, the result will be flipped.
Multiple selections can be made with one select operator, for example val{1, 5:3} will return the concatenation of bit 1 and bits 5-3.