You're reading an old version of this documentation.
For the latest stable release version, please have a look at master.

Vec

Description

The Vec is a composite type that defines a group of indexed signals (of any SpinalHDL basic type) under a single name.

Declaration

The syntax to declare a vector is as follows:

Declaration

Description

Vec(type: Data, size: Int)

Create a vector of size time the given type

Vec(x,y,..)

Create a vector where indexes point to given elements.
this construct support mixed element width

Examples

// Create a vector of 2 signed integers
val myVecOfSInt = Vec(SInt(8 bits),2)
myVecOfSInt(0) := 2
myVecOfSInt(1) := myVecOfSInt(0) + 3

// Create a vector of 3 different type elements
val myVecOfMixedUInt = Vec(UInt(3 bits), UInt(5 bits), UInt(8 bits))

val x,y,z = UInt(8 bits)
val myVecOf_xyz_ref = Vec(x,y,z)

// Iterate on a vector
for(element <- myVecOf_xyz_ref){
  element := 0   //Assign x,y,z with the value 0
}

// Map on vector
myVecOfMixedUInt.map(_ := 0) // assign all element with value 0

// Assign 3 to the first element of the vector
myVecOf_xyz_ref(1) := 3

Operators

The following operators are available for the Bundle type

Comparison

Operator

Description

Return type

x === y

Equality

Bool

x =/= y

Inequality

Bool

// Create a vector of 2 signed integers
val vec2 = Vec(SInt(8 bits), 2)
val vec1 = Vec(SInt(8 bits), 2)

myBool := vec2 === vec1 // compare all elemenets

Type cast

Operator

Description

Return

x.asBits

Binary cast in Bits

Bits(w(x) bits)

// Create a vector of 2 signed integers
val vec1 = Vec(SInt(8 bits), 2)

myBits_16bits := vec1.asBits

Misc

Operator

Description

Return

x.getBitsWidth

Return the full size of the Vec

Int

// Create a vector of 2 signed integers
val vec1 = Vec(SInt(8 bits), 2)

println(vec1.getBitsWidth) // 16