Неподключенные провода сомнения

Я пытаюсь реализовать модуль для своего проекта. Грубая структура модуля, как показано ниже:

class TOP extend Module{
  val io = IO(new Bundle {some IO intend to connect to other module })

  val queue = Module (new Queue(UInt(32.W), 5) )//I instantiate queue for special purpose for my design, and I do not connect the queue to other

  when(condition1){
    queue.io.enq.valid := true.B
    queue.io.enq.bits  := 5.U
  }
  ........
  when(conditionN){
    queue.io.deq.ready := true.B
    val retrieve data out:= queue.io.deq.bits 
  }  
}

При запуске сталкиваюсь с проблемами, связанными с неподключенными проводами.

После прочтения страницы (https://github.com/freechipsproject/chisel3/wiki/Unconnected-Wires). Есть некоторые вопросы, с которыми я не могу разобраться со страницей.

(1) Каждый ввод-вывод модуля должен подключать другой ввод-вывод другого модуля?

(2) DontCare: быть подключенным к выходному сигналу, что указывает на то, что этот сигнал не используется намеренно. Означает ли это, что он не управляется на начальном этапе, однако может быть запущен при возникновении каких-либо условий?

Или все время не гонят? ig:

io.out.debugOption := DontCare
when (condition){ io.out.debugOption := true}

(3) Какова ценность применения DontCare?

queue.io.enq.valid := DontCare

Я новичок в Chisel. Извините, если вопрос, который я задаю, прост.


person goal Raul    schedule 11.03.2018    source источник
comment
Извините, это должны были быть «сомнения»? Если да, вам, вероятно, все равно следует выбрать более информативный заголовок.   -  person Andrey Tyukin    schedule 11.03.2018


Ответы (1)


В общем: Chisel сообщает о неподключенных IO, которые не находятся на верхнем уровне, как об ошибках, чтобы было труднее делать ошибки. DontCare - это способ подавить эти ошибки, если вы думаете, что действительно не хотите, чтобы сигнал был подключен к чему-либо.

В частности (1) Каждый ввод-вывод подмодуля должен быть связан с чем-то, но это не обязательно должно быть связано с другим вводом-выводом, это может быть буквальное значение или какой-либо другой компонент родительского модуля.

(2) DontCare позволяет разработчику оставить соединение неподключенным и подавить ошибки. Часто это связано с обратной совместимостью или, возможно, с каким-то подмодулем, который имеет нужные вам функции, но также и некоторые из них, которые вам не нужны. Современные лучшие практики заключаются в использовании дополнительных сигналов ввода-вывода в подмодулях с этими свойствами.

Ваш пример отладки должен работать, но, вероятно, было бы лучше просто сделать io.out.debug := false.B. DontCare оставит сигнал в неопределенном состоянии, которое легко может быть истинным, что может иметь плохие последствия.

(3) Как было сказано ранее, DontCare позволяет разработчику подтвердить, что сигнал не может быть установлен.

При этом существует ситуация при использовании Decoupled, который используется модулем Queue, когда сигнал может иметь некоторый пограничный случай, когда он не подключен, но этот случай действительно возникает при фактической работе схемы. Как правило, лучше всего дать ему начальное присвоение буквальному значению, последующее использование сигнала переопределит это начальное назначение для других условий. Это называется «семантикой последнего соединения», т. Е. Побеждает последнее присваивание.

Если это слишком расплывчато, возможно, вы можете предоставить еще немного примеров кода и небольшой модульный тест, который иллюстрирует проблему.

person Chick Markley    schedule 11.03.2018