Оператор 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одержание | Следующая |