Introduction

NullPointerException is an Scala runtime reported error which happen when a variable was accessed but wasn’t initialised.

Example

The following code :

class TopLevel extends Component {
  a := 42
  val a = UInt(8 bits)
}

will throw :

Exception in thread "main" java.lang.NullPointerException
  ***
  Source file location of the a := 42 assignement via the stack trace
  ***

A fix could be :

class TopLevel extends Component {
  val a = UInt(8 bits)
  a := 42
}

Issue explanation :

SpinalHDL is not a language, it is an Scala library, which mean, it obey to the same rules than the Scala general purpose programming language. When you run your SpinalHDL hardware description to generate the corresponding VHDL/Verilog RTL, your SpinalHDL hardware description will be executed as a Scala programm, and a will be a null reference until the programm execution come to that line, and it’s why you can’t use it before.

Tags: