空指针异常(NullPointerException)

简介

NullPointerException 是 Scala 运行时报告的错误,当变量在初始化之前被访问时可能会发生这种错误。

示例

下面的代码:

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

会报错:

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

一个可能的修复方法是:

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

问题说明

SpinalHDL 不是一种语言,它是一个 Scala 库,这意味着它遵循与 Scala 通用编程语言相同的规则。

当运行上面的 SpinalHDL 硬件描述生成相应的 VHDL/Verilog RTL 时,SpinalHDL 硬件描述将作为 Scala 程序执行,并且 a 将是一个空引用,直到程序执行 val a = UInt(8 bits) ,因此试图在此之前赋值给它将导致 NullPointerException