- •3. Оператор generate порождающей схемы if Оператора generate порождающей схемы if имеет такой синтаксис:
- •Как видно из рис.2, схема счетчика помимо регулярного блока (Regular block) содержит в своем составе и особые места, где регулярность в соединениях и по составу компонент нарушается.
- •Примечание:
- •Последний механизм позволяет вкладывать проекты имеющих регулярных структур и формировать многомерные массивы из компонентов.
- •Оператором Generic( ) имеет такой синтаксис:
- •Временная диаграмма работы проекта
Примечание:
Операторы Generate обеих модификаций могут содержать в своем подразделе конкурентных операторов любой из следующих операторов: любую разновидность параллельного назначения значения сигналу, оператор process, оператор block, оператор параллельного утверждения, параллельный оператор вызова подпрограммы-процедуры, оператор внедрения компонента, и другие операторы Generate (т.е. операторы: concurrent signal assignment statement, process statement, block statement, concurrent assertion statement, concurrent procedure call statement, component instantiation statement, and another generate statement).
Последний механизм позволяет вкладывать проекты имеющих регулярных структур и формировать многомерные массивы из компонентов.
Пример 3.
Этот пример иллюстрирует возможности оператора Generate при создании проекта 16-ти разрядного параллельного сумматора с последовательным переносом по структурной методологии. Сумматор этого вида представляет собой полурегулярную структуру, содержащую 1 полусумматор и 15 полных одноразрядных сумматоров. Схема электрическая принципиальная сумматора показана на Рис.3
Рис.3
Субпроект полусумматора. (Этот Субпроект является определением компоненты (Component half_adder), которая будет один раз внедрена, в проект параллельного сумматора с систолической структурой)
-----------------------------------------------------------------------------------------------------------
ENTITY Half_adder IS
PORT (a,b : IN Bit; Sum, c : OUT Bit );
END ENTITY Half_adder ;
ARCHITECTURE Half_adder OF Half_adder IS
BEGIN
Sum <= a XOR b;
c <= a AND b;
END ARCHITECTURE Half_adder ;
------------------------------------------------------------------------------------------------------------
Субпроект полного одноразрядного сумматора. (Этот Субпроект является определением компоненты (Component full_adder), которая будет 15 раз внедрена, в проект параллельного сумматора с систолической структурой)
----------------------------------------------------------------
ENTITY Full_adder IS
PORT (a,b,c0 : IN Bit ; Sum, c : OUT Bit );
END ENTITY Full_adder ;
ARCHITECTURE Full_adder OF Full_adder IS
BEGIN
Sum <= (a XOR b) XOR c0 ;
c <= (a AND b) OR (a AND c0) OR (b AND c0);
END ARCHITECTURE Full_adder ;
Проект вехнего уровня в котором внедряются сомпоненты Half_adder и Full_adder посредством оператора Generate
--------------------------------------------------------------------------
ENTITY parallel_adder_N IS
GENERIC (width : Integer := 16);
PORT (Sum : OUT Bit_Vector (0 TO width -1);
a,b : IN Bit_Vector (0 TO width -1); carry : OUT Bit );
END ENTITY parallel_adder_N;
ARCHITECTURE parallel_adder OF parallel_adder_N IS
SIGNAL c_in : Bit_Vector (1 TO width );
Component half_adder is
PORT (a,b : IN Bit; Sum,c : OUT Bit );
End Component;
Component full_adder is
PORT (a,b,c0 : IN Bit ; Sum, c : OUT Bit );
End Component;
begin
adder: FOR i IN 0 TO width-1 GENERATE
ml_bit: IF i=0 GENERATE
ml_cell: half_adder PORT MAP (a(0), b(0), sum(0), c_in(1));
END GENERATE ml_bit;
sr_bit: IF i>0 AND i<width-1 GENERATE
sr_cell: full_adder PORT MAP (a(i), b(i), c_in(i), sum(i), c_in(i+1));
END GENERATE sr_bit;
st_bit: IF i=width-1 GENERATE
st_cell: full_adder PORT MAP (a(i), b(i), c_in(i), sum(i), carry);
END GENERATE st_bit;
END GENERATE adder;
END ARCHITECTURE parallel_adder ;
----------------------------------------------------------------------------------------------------------
Примечание: В проекте примера 3 разрядность параллельного сумматора определена в операторе GENERIC (width : Integer := 16);
Важное замечание: Сам оператор GENERATE относится конкурентных операторов и поэтому всегда располагается в подразделе конкурентных выполняемых операторов тела архитектуры.
4. О задании глобальных настроечных параметров для проекта из внешней среды
При проектировании цифровых устройств разного функционального назначения часто возникает необходимость в управлении некоторыми параметрами проекта из внешней среды через интерфейс проекта формируемого оператором entity. К таким параметрам относят разрядность проектируемого устройства, тактовую частоту его работы и т.д.
Особую актуальность вопрос задания параметров проекта из внешней среды приобретает в настоящее время, так как практически каждый год обновляется технологическая база производства СБИС микросхемотехники. Если например, при производстве СБИС 3 года назад максимально допустимое время задержки на вентиль лежало в пределах 10 нс, то сегодня эта цифра составляет 2 –3 нс.
Возможность управлять характеристиками (параметрами) VHDL проектов из внешней среды практически делает их независимыми от технологической базы производства СБИС и электрических характеристик самих СБИС, т.к. VHDL проектирование легко обеспечивает настройку разработанных проектов под конкретные возможности СБИС.
Это качество обеспечивает возможность многократного использования разработанных VHDL проектов, т.е. их переносимость.
В языке VHDL возможность задавать общие (глобальные) параметры для настройки конкретных характеристик разрабатываемых проектов цифровых устройств из внешней среды обеспечивается оператором Generic( )
