Оператор generate
| Назад | Cодержание | Следующая |
Изучение VHDLОператор generateЕсли необходимо неоднократно повторить один или несколько параллельных операторов, то используют оператор generate. Его синтаксис: \оператор generate\ ::= \метка\: for \идентификатор\ in \диапазон\ generate Метка оператора generate необходима для обозначения сгенерированной структуры, \идентификатор\ — это параметр оператора generate, а фраза \диапазон\ — диапазон его изменения. Они имеют такие же синтаксис и семантику, как и в операторе loop. В операторе могут быть вставлены такие же объявления, как в декларативной части тела архитектуры. В отличие от оператора loop, который повторяет в цикле один или несколько последовательных операторов, оператор generate делает несколько копий параллельных операторов, когда параметр оператора пробегает все значения из заданного диапазона. В следующем примере с помощью оператора generate запрограммирована схема сдвигового регистра длиной n на триггерах FD из библиотеки компонентов ПЛИС Xilinx, описанного в пакете UNISIM.unisim_VITAL с входом DI и выходом DO, тактируемого синхросерией CLK.
sіgnal t: std_logіc_vector(1 to n+1);
...
t(1)<=DІ;
FІFO: for і іn 1 to n generate
U_ TT: FD(C=>CLK, D=>t(і), Q=>t(і+1));
end generate;
DO<=t(n+1);
Условный оператор generate.Для того чтобы управлять структурой проектируемого устройства используется условный оператор generate. Его синтаксис: \условный оператор generate\ ::= \метка\: if \булевское выражение\ generate В зависимости от условия, заданного булевским выражением, оператор вставляет или нет в структуру устройства узлы, представленные параллельными операторами. Так как это булевское выражение влияет на структуру устройства, оно должно быть статическим. В примере:
RESn: іf \підключити_PULLUP\=1 generate
RES1:for і іn DATA_BUS'range generate
U_ RES: PULLUP(DATA_BUS(і));
end generate;
end generate;
если целое значение \подключить_PULLUP\ равно 1, то к шине DATA_BUS подключаются компоненты нагрузочных резисторов PULLUP из библиотеки UNISIM. Направлением научной деятельности автора является синтез структур вычислительных устройств. Поэтому язык VHDL нравится именно тем, что с помощью таких средств, как оператор generate можно программировать структуру устройства в зависимости от параметров ее настройки. Например, можно создать проект универсального цифрового фильтра, число ступеней которого изменяется в зависимости от заданного качества фильтрации. К сожалению, в языке Verilog нет операторов, аналогичных generate. И только поэтому не рекомендуется в проектах для синтеза использовать этот оператор, так как такой проект трудно перевести на Verilog, если возникнет такая необходимость. В этом случае прийдется написать столько Verilog - программ, сколько вариантов настройки структуры. Или на каком-то алгоритмическом языке, например, Java, Perl, VHDL написать программу, генерирующую Verilog - файл, соответствующий заданной настройке.
Анатолий Сергиенко |
| Назад | Cодержание | Следующая |