【问题标题】:no cloneType for Mem?Mem 没有 cloneType?
【发布时间】:2016-05-14 18:47:16
【问题描述】:

我将一个 Mem 块包装在一个名为“bank”的相当通用的模块中,并在 Vec 中实例化它,如下所示:

val rams = Vec.fill(100) { Module(new bank).io }

到目前为止一切顺利。连接信号时遇到问题。如果我将模块信号的向量直接连接到信号向量,如下所示:

rams(i).in := io.ins(i)
io.outs(i) := rams(i).out

...等等,我没有收到任何错误。

但是,如果我以非平凡的模式将它们连接到交叉开关,我会开始收到一个奇怪的错误,该错误似乎与我称之为“bank”的 Mem 包装器有关:

“参数化Bundle类ascenium.bank$$anon$1需要cloneType方法。”

此错误具体为 Chisel 错误。谁能告诉我这是什么意思以及如何解决它?

如果需要,我可以提供源代码。

【问题讨论】:

  • 我尝试用 Vec(Reg()) 替换 Mem() 并没有得到任何乐趣。同样的错误。

标签: chisel


【解决方案1】:

此类错误通常可以通过向您定义的类添加 cloneType 方法来解决:

class MyModule extends Module
{
  // Your class definition here
  override def cloneType = new MyModule.asInstanceOf[this.type]
}

【讨论】:

  • 这会导致错误“未找到:值 MyModule”。显然你不能引用一个类本身。
  • 查看我看到的 Chisel 源代码:1)这种语法是错误的,应该是这样的: override def cloneType: this.type = new MyModule.asInstanceOf[this.type]; 2) cloneTypes 似乎与 Bundles 相关联,而不是与 Modules 相关联,因此无论如何,将其放在 Module 中是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2018-08-25
相关资源
最近更新 更多