Как динамически создать экземпляр оборудования из списка доступных модулей в SystemVerilog?

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

Мы хотим, чтобы наш корабль выпустил столько снарядов, сколько хочет пользователь, и эти снаряды просто появятся из ствола орудия и пойдут вверх по экрану.

Это означает простой внутренний конечный автомат для каждого снаряда:

  1. Останов:
    • Если пользователь хочет сделать выстрел, активируйте этот модуль
  2. В этом:
    • Установите позицию снаряда, чтобы соответствовать стволу оружия. Установите движение снаряда, чтобы быть отличным от нуля.
  3. Переехать:
    • Если наш блок обнаружения столкновений видит столкновение (с врагом или стеной), отключите модуль и перейдите к Стоп
    • В противном случае просто измените положение на определенное количество пикселей.

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

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

Так что процесс будет выглядеть так:

  1. Пользователь хочет выстрелить снарядом
  2. Что-то... находит элемент в нашем массиве снарядов, который не включен, и включает его
  3. Выстрел идет, и запрещает этому модулю делать еще один выстрел, пока текущий не будет уничтожен.

Один из способов, которым я могу подумать, - это считать "включенные" биты из массива снарядов, который будет представлять собой горячее кодирование, которое в настоящее время запускается:

0110 0011 - Projectiles 1, 2, 6, and 7 are in use

Затем мы берем эти биты, выполняем... что-то... на них и получаем номер 3, который соответствует индексу наименьшего доступного модуля снаряда. Число 3 выводится для конечного автомата пользовательского ввода для индексации в нашем массиве модулей снарядов, которым затем будет отправлен сигнал "активировать".

1 ответ

Вы не можете динамически создавать экземпляры оборудования. Вы пишете Verilog/SystemVerilog, чтобы описать, как должно быть построено оборудование. Если у вас есть функциональность, которая должна быть активна в разное время, вам нужно либо включить ее в свой конечный автомат, либо использовать мультиплексоры, которые выбирают между различными выходами.

Другие вопросы по тегам