Какой механизм работает, чтобы показать идентификатор компонента в разработке chisel3 - PullRequest
0 голосов
/ 23 января 2019

Зубило выдает исключение с сообщением об ошибке разработки. Ниже приведен пример моего кода в качестве примера.

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@ выглядит как идентификатор, а не как хэш-код. Действительно, Тип данных расширяет черту HasId, которая имеет поле _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 в Data существует метод toNamed. Однако этот метод, кажется, вызывается для генерации первого кода, а не для преобразования компонента в строку.

Почему тип данных может показывать свой идентификатор?

Если это не ID, а именно хэш-код, этот вопрос из моего недопонимания.

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Классы Scala поставляются с методом по умолчанию toString, который имеет вид className@hashCode.

Как вы заметили, chisel3.core.Bool@81, похоже, использует _id, а не hashCode. Это связано с тем, что в самой последней опубликованной версии Chisel (3.1.6) хеш-код был идентификатором! Это можно увидеть, если вы проверите исходные файлы по тегу этой версии: https://github.com/freechipsproject/chisel3/blob/dc4200f8b622e637ec170dc0728c7887a7dbc566/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala#L81

Это больше не относится к master, что, вероятно, является источником какой-либо путаницы! Как заметил Чик, мы только что изменили метод .toString, чтобы сделать его более информативным, чем по умолчанию; ожидайте более информативных представлений в 3.2.0!

0 голосов
/ 23 января 2019

Думаю, вам стоит взглянуть на Стамеска PR # 985 . Это меняет способ реализации метода toString в Data. Я не уверен, ответит ли он на ваш вопрос напрямую, но возможно, это сделает яснее значение и местонахождение ошибки. Если нет, то вы должны прокомментировать это.

...