Соединение долота и тип Безопасность - PullRequest
2 голосов
/ 20 апреля 2020

Только что заметил, что вы можете сделать что-то вроде:

class MyBundle1 extends Bundle {
  val a = Bool()
  val x = UInt(2.W)
  val y = Bool()
}

class MyBundle2 extends Bundle {
  val x = Bool()
  val y = Bool()
}

class Foo extends Module {
  val io = IO(new Bundle {
    val in = Input(new MyBundle1)
    val out = Output(new MyBundle2)
  })

  io.out := io.in
}

не получить ошибку и фактически получить правильный или, по крайней мере, ожидаемый verilog. Можно было бы подумать, что Долото было безопасным от типов по отношению к Бандлзу в этом виде массового соединения. Это намеренно? Если да, есть ли для этого особые причины?

1 Ответ

3 голосов
/ 21 апреля 2020

Семантика := в Bundle позволяет RHS иметь поля, которых нет в LHS, но не наоборот. Высокоуровневое описание x := y - это «управлять всеми полями x соответствующими полями y».

Двунаправленный оператор <> строже.

Я не могу говорить точно с рассуждениями, но операторы связи часто являются делом вкуса в отношении «делай то, что я имею в виду». Идея включения альтернативных форм операторов соединений в будущие выпуски постоянно обсуждается, и угроза «перенасыщения операторов» сопоставляется с возможностью пользователей точно указать, что они хотели бы сделать.

...