spinal遇到问题总结

本文讨论了在SpinalHDL中使用mux、when、elsewhen和otherwise时遇到的LATCH问题,以及如何在循环和构造函数中传递参数。作者还给出了when和elsewhen更新变量的示例,并介绍了类构造函数参数的应用.

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、mux出现LATCH,如在在异步的when里面,如果连接线没有otherwise分支会出现

[error] LATCH DETECTED from the combinatorial signal (toplevel/io_pus_0 :  UInt[1 bits]), defined at
[error]     common.genmux$.$anonfun$main$5(mux.scala:137)
[error]     common.genmux$$$Lambda$44/321675814.apply(Unknown Source)
[error]     common.genmux$mux.<init>(mux.scala:62)
[error]     common.genmux$.$anonfun$main$4(mux.scala:137)
[error]     common.genmux$$$Lambda$6/1651945012.apply(Unknown Source)
[error]     spinal.sim.JvmThread.run(SimManager.scala:51)
 

二、when、elsewhen、otherwise可在循环中使用。

when实例会一个var的变量,然后elsewhen更新变量,otherwise不能更新变量

var v=when(...){}

v=v.eslewhen(...){}

v.otherwise(){}

以下一个例子

var mux = when(io_w(0)) {
  io_before.asInstanceOf[T] := io_pus(0)
}
for (i <- 1 until io_pus.size) {
  println(s"www2 i=${i} io_pus.size=${io_pus.size}")
  if (i != io_pus.size - 1) {
    mux = mux.elsewhen(io_w(i)) {
      io_before.asInstanceOf[T] := io_pus(i)
    }
  }
  else {
    mux.otherwise {
      io_before.asInstanceOf[T] := io_pus(i)
    }
  }
}

三、类或者函数的构造函数的参数可实现构造函数的传递

如:

class mux[T <: Data](gen: => T){

io.valCallback(out(gen), s"orig")
}

  实现会的原因

new mux[UInt](UInt(1 bits))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值