Соединение TLClientNode

Мне нужно создать экземпляр последней версии ICache в автономном проекте ROCKET-CHIP. Я смог протестировать этот экземпляр, используя версию 6-месячной давности. Однако в последней версии у меня возникают проблемы с его портом «mem»:

val node = TLClientNode(TLClientParameters(sourceId = IdRange(0,1)))
.....
val mem = outer.node.bundleOut

Насколько я понимаю, проект ROCKET-CHIP начал использовать узлы особого типа, где узлы SOURCE и SINK должны быть подключены к панели с использованием класса «TLXbar». Я пытался следовать коду в http://stackissue.com/ucb-bar/rocket-chip/tilelink2-245.html, но кажется устаревшим. Может ли кто-нибудь указать мне, как я могу подключить этот порт?


person Armia    schedule 24.02.2017    source источник


Ответы (1)


Недавно я успешно создал тривиальную ноду TileLink2 (просто передавая ввод в вывод с некоторыми масками) и вставил его между l1backend.node и TileNetwork.masterNodes.head. Так что думаю мой опыт может быть полезен.

Пакет Rocket-chip diplomacy расширяет иерархию Module chisel. В основном он состоит из двух частей: LazyModule и LazyModuleImp, где LazyModuleImp — это настоящая Module в мире зубил.

Узлы всегда создаются в LazyModule, а на node.bundleIn/Out следует ссылаться внутри LazyModuleImpl. Мы должны использовать узлы в LazyModule для соединения друг с другом через :=.

Еще одна вещь, которая может быть полезна, заключается в том, что внутри LazyModuleImp мы можем ссылаться только на bundleIn/Out в пакетах ввода-вывода из узлов, которые непосредственно принадлежат соответствующему LazyModule.

Например, если у вас есть субленивый модуль XXXCrossing, который содержит узел. Вам лучше не использовать его bundleIn/Out в качестве пакетов ввода-вывода вашего текущего ленивого модуля. В противном случае код долота может быть успешно скомпилирован, но первый результат будет содержать необъявленные символы.

person Wonicon    schedule 21.03.2017