Мультиплексоры представляют собой компоненты, пропускающие на выход один из нескольких входов в соответствии с сигналом выбора (selector). Простейший вариант мультиплексора можно реализовать с помощью условного оператора.
mux<= in0 whensel = ‘0’ elsein1;
В приведенном примере описан мультиплексор «2-в-1», который имеет, как следует из названия, два входа. Для того, чтобы выбрать требуемый вход, достаточно однобитного сигнала-селектора, поэтому порт sel является однобитным. Вообще, n-разрядный селектор достаточен для мультиплексора с 2n входами.
Мультиплексируемые входы не обязаны быть одноразрядными. В показанном примере нет никаких сведений о разрядности сигналов in0, in0 и mux, которая в действительности может быть любой.
Мультиплексоры с большим числом входов можно реализовать на базе процедурного блока.
Вариант 1:
process(sel)
begin
casesel is
when “00” => q <= a;
when “00” => q <= b;
when “00” => q <= c;
when “00” => q <= d;
when others => q <= ‘x’;
end case;
end
Вариант 2:
withsel select
q <= a when “00”,
b when “01”,
c when “10”,
d when “11”,
‘x’ whenothers;
Обратите внимание, что в приведенных фрагментах описан и нереализуемый в аппаратуре вариант, когда значение селектора не равно ни одной из допустимых двоичных комбинаций. В этом случае на выход отправляется значение X («неизвестно»). Это делается для того, чтобы при неполно заданной модели входных сигналов (т.е. когда sel = “UU”, Undefined) выход мультиплексора не принимал одного из значений по умолчанию. Например, можно было включить последний вариант при sel = “11” в ветку обработки по умолчанию, но тогда при моделировании мультиплексор давал бы на выходе сигнал d при отсутствии правильно заданной модели сигнала-селектора.
Вариант с использованием case (with … select) предпочтительнее использования вложенных операторов if/else, поскольку, как и в случае с арифметическими операциями, САПР ПЛИС имеет возможность использовать шаблоны проектирования, дающие оптимальные решения для мультиплексоров. Дополнительными ресурсами логических ячеек в этом случае являются их мультиплексоры – F5 и F6 дляПЛИС на базе 4-входовых логических генераторов (Spartan-3, Virtex-4) и F7, F8 для ПЛИС на базе 6-входовых логических генераторов (Spartan-6, Virtex-5, Virtex-6, серия 7).