什么机制可以在chisel3详细说明中显示组件ID

时间:2019-01-23 02:15:54

标签: chisel

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代码,而不是将组件转换为字符串。

为什么数据类型可以显示其ID?

如果不是ID,而是确切的哈希码,那么这个问题是我的误解。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

Scala类带有默认的toString方法,其形式为className@hashCode

正如您所指出的,chisel3.core.Bool@81确实看起来像是在使用_id而不是hashCode。这是因为在最新发布的Chisel(3.1.6)版本中,哈希码是id!如果您在该版本的标记处检查源文件,则可以看到以下内容:https://github.com/freechipsproject/chisel3/blob/dc4200f8b622e637ec170dc0728c7887a7dbc566/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala#L81

master不再是这种情况,这可能是造成混乱的原因!正如Chick所指出的,我们刚刚将.toString方法更改为比默认方法更具信息性。希望在3.2.0中有更多有用的信息!