首页 > 解决方案 > 什么机制可以在 chisel3 详细说明中显示组件 ID

问题描述

Chisel 引发异常,并带有详细说明错误消息。下面以我的代码结果为例。

chisel3.core.Binding$ExpectedHardwareException: data to be connected 'chisel3.core.Bool@81' must be hardware, not a bare Chisel type. Perhaps you forgot to wrap it in Wire(_) or IO(_)?

这个异常消息很有趣,因为81后面chisel3.core.Bool@看起来像 ID,而不是哈希码。实际上,数据类型扩展HasId了具有_id字段的特征,并且 _id字段似乎为每个组件生成了一个唯一的 ID。

我认为数据类型会覆盖toString以生成具有 的字符串type@ID,但它不会覆盖。这就是为什么$node在下面的代码中不能使用 ID。

throw Binding.ExpectedHardwareException(s"$prefix'$node' must be hardware, " +
            "not a bare Chisel type. Perhaps you forgot to wrap it in Wire(_) or IO(_)?")

代替toString,toNamed方法存在于数据中。但是,调用此方法似乎是为了生成 firrtl 代码,而不是将组件转换为字符串。

为什么Data type可以显示它的ID?

如果不是ID,而是hashcode,这个问题是我的误解。

标签: chisel

解决方案


我认为你应该看看Chisel PR #985。它改变了 Data 的 toString 方法的实现方式。我不确定它是否直接回答了您的问题,但这可能会使错误的含义和位置更清楚。如果不是,您应该对此发表评论。


推荐阅读