Глобальные переменные должны только использоваться, когда у Вас нет альтернативы. И да, который включает Одиночные элементы. 90% времени, глобальные переменные представлены для сохранения стоимости раздавания параметра. И затем кодирование тестирования/обслуживания многопоточности/единицы происходит, и у Вас есть проблема.
Так да, в 90% глобальных переменных ситуаций плохи. Исключения вряд ли видно Вам в Ваших годах колледжа. Одно исключение я могу думать первое, что пришло на ум, имеет дело с по сути глобальными объектами, такими как таблицы прерываний. Вещи как соединение с БД кажутся , чтобы быть глобальными, но не.
Массивы экземпляров Verilog были добавлены в Verilog-1995 (IEEE 1364-1995). Их можно использовать с воротами, пользовательскими примитивами и модулями. Генераторы, которые являются более мощными, но и более сложными, были добавлены в Verilog-2001.
Вот пример массива экземпляров модуля:
DFF d[15:0] (clk, DFF_i, DFF_o);
Для каждого подключения порта, если размер соответствует размеру формального параметра, то он подключен к каждому экземпляру. В противном случае каждый экземпляр связан с частичным выбором (или битовым выбором) выражения.
это невозможно сделать напрямую ( update : теперь, после ответа mark4o, я знаю, что есть способ), но вы можете использовать ] generate
для создания нескольких экземпляров вашего пользовательского модуля и подключения их к вашим сигналам. Должно выглядеть примерно так:
wire DFF_i[15:0];
wire DFF_o[15:0];
generate
genvar i;
for (i=0; i<15; i=i+1) begin : dff
custom i_custom(
.clk(clk)
,.input(DFF_i[i])
,.output(DFF_o[i])
);
end
endgenerate
В противном случае, вероятно, есть некоторая возможность во время синтеза использовать правильные пользовательские модули, но я не эксперт в этом.
Ура, Даниэль