Как получилось, что HDL позволяет индексировать входные контакты, но не внутренние контакты?

#nand2tetris

Вопрос:

Вот пример, чтобы показать, что я имею в виду. Если я включу в свой список следующее ALU , это будет недействительно:

 chip ALU {
  // ...
  PARTS:
  // out4 is the output of some internal chip
  Or8Way(
    in[0..7]=out4[0..7],
    out=outa
  );

  Or8Way(
    in[0..7]=out4[8..15],
    out=outb
  );

  Or(a=outa, b=outb, out=out);
}
 

Но… если я возьму этот кодовый блок и сделаю его своим собственным Or16Way чипом,

 CHIP Or16Way {
    IN in[16];
    OUT out;

    PARTS:
    Or8Way(
        in[0..7]=in[0..7],
        out=out0
    );

    Or8Way(
        in[0..7]=in[8..15],
        out=out1
    );

    Or(a=out0, b=out1, out=out);

}
 

а затем используйте это в ALU ,

 ALU {
  // ...
  Parts:
    Or16Way(in=out4, out=or);
}

 

все в порядке. Почему это происходит?
В одном случае я проиндексировал входные контакты, в другом случае я проиндексировал внутренние контакты.
Почему одно разрешено, а другое запрещено?

Комментарии:

1. Ваш вопрос не содержит достаточного контекста, чтобы определить, является ли это фактическим ограничением системы или просто ошибкой в определении вашего чипа. Пожалуйста, предоставьте полный код чипа, который выдает ошибку, и полное сообщение об ошибке (включая номер строки)