Я так полагаю, что имелось ввиду нечто такое:
Код:
INCLUDE "mux.inc";
SUBDESIGN ahd (
selector[63..0] : INPUT;
dat_i[15..0] : INPUT;
dat_o[15..0] : OUTPUT;
)
BEGIN
FOR I IN 0 TO 15 GENERATE
dat_o[I] = mux( .data = dat_i[], .sel = selector[ I*4+3 .. I*4 ])
WITH( WIDTH=16, WIDTHS=4);
END GENERATE;
END;
Только сигналы коммутируются не со внешних входов входов на выходы, а выходы брошены назад на входы через регистр:
Код:
INCLUDE "mux.inc";
SUBDESIGN ahd (
clk : INPUT;
selector[63..0] : INPUT;
dat_o[15..0] : OUTPUT;
)
VARIABLE
rg[15..0] : DFF;
BEGIN
dat_o[] = rg[];
rg[].clk = clk;
FOR I IN 0 TO 15 GENERATE
rg[I].d = mux( .data = dat_o[], .sel = selector[ I*4+3 .. I*4 ])
WITH( WIDTH=16, WIDTHS=4);
END GENERATE;
END;
Само оно смысл еще имеет («crossbar switch»), а вот выходы на входы замыкать как-то странно, получается вещь, состояние которой не зависит ни от каких входов. Обратных связей, как в генераторе псевдослучайного числа, -- нет. У альтеры при включении все триггера сброшены, так что тут на все входы будут поступать нули.
Можно, конечно, таким образом пофантазировать на тему случайного состояния триггеров при включении и генерации таким образом какого-то шума, но всё равно странно.