Ошибки, связанные с инициализацией вывода, возникают при использовании несвязанного ввода-вывода.

Когда я использую DecoupledIO, кажется, что он генерирует ошибки, вызванные тем, что Reference io не полностью инициализирован.

Это потому, что мне нужно инициализировать вывод, в данном случае биты, и действительный или готовый (в зависимости от того, перевернутый или нет)

Предположим, что биты и действительный - это Вывод.

когда я использую следующую инструкцию:

when(reset.toBool) {
  bits := 0.U
  valid := true.B
}

это порождает ошибку.

Но когда оператор инициализации существует вне оператора when, он не вызывает ошибок.

Итак, как решить такие проблемы инициализации?

Всегда ли мне нужно инициализировать такие значения вне оператора when, хотя я хочу поместить его внутри оператора when (reset.toBool)?

Даже пример маршрутизатора на вики-странице вызывает ошибку, хотя я следую руководству, описанному в разделе неподключенных проводов (это произошло из-за того, что все операторы init существуют внутри оператора when)


person sungjun cho    schedule 06.01.2018    source источник


Ответы (1)


Это хороший вопрос, но его сложно объяснить. Когда вы помещаете инициализацию вывода в when(io.reset), это создает крайний случай, когда провод не может быть инициализирован, если сброс не был подтвержден. Самое простое решение - сделать и то, и другое

bits := 0.U
valid := true.B
when(reset.toBool) {
  bits := 0.U
  valid := true.B
}

Семантика последнего соединения гарантирует, что поведение сброса и разъединения будет иметь приоритет, но что вы охватите крайний случай. Специалисты по долблению знают об этой проблеме и ищут более элегантную ситуацию. См. проблему 703 долота

person Chick Markley    schedule 07.01.2018