![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
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()
Оператором Generic() имеет такой синтаксис:
generic (generic_interface_list);
где: generic_interface_list представляет собой список глобальных настроечных параметров проекта. При чем глобальные параметры в списке отделяются друг от друга символом точка с запятой (;).
В справочном руководстве по языку VHDL об операторе Generic(); сказано следующее:
1. Оператор Generic(); предназначен для задания значений глобальных параметров программным объектам данных типа signal (port). С его помощью очень удобно задавать в проекте разрядность порта, тактовую частоту работы процессора. Очень часто этот оператор называют константой интерфейса. Оператор Generic() может быть объявлен также в теле оператора block, в теле объявления component () или объявления проектируемого объекта (entity). Другими словами, оператор Generic() обеспечивают канал для статических (постоянных) данных, которые будут сообщены создаваемому проекту (блоку) снаружи (из окружающей среды). В отличие от программных данных типа constant (констант), значения общих параметров может быть инициализировано внешним образом, или в операторе реализации (внедрения) компонента или в спецификации конфигурации.
2. Оператор Generic(…) поддерживает также статическую (постоянную) информацию необходимую для работы других операторов проекта подобным образом, как и программные данные типа constant. В отличие от constant, значения данных содержащихся в операторе generic(...) могут быть инициализированы внешним образом. Подобно оператору port(…), оператор generic(...) может быть объявлен в подразделе объявлений проектируемого объекта (в entity) и объявлениях component(). Однако, оператор generic(...) всегда должен объявляться перед оператором port(…).
Значения общих параметров настройки, содержащиеся в теле оператора generic (), который объявлен в теле оператора entity (в подразделе объявления проектируемого объекта) видимы и в entity() проекта и в теле архитектуры, связанной с этим entity(). В частности, как говорилось выше, оператор generic(), может использоваться, чтобы:
· определить разрядность (ширину) портов (пример 1),
· число подкомпонентов внутри блока,
· частотные характеристики синхронизации блока (пример 2),
· физические характеристики проекта,
· ширину (разрядногсть) векторов внутри тела архитектуры,
· число итераций цикла и т.д.
Примеры:
Пример 1
entity CPU is generic (BusWidth: Integer:= 16); port (DataBus: inout Std_Logic_Vector(BusWidth-1 downto 0));...В объявлении проекта entity CPU оператор generic(BusWidth: Integer:= 16), с параметром BusWidth: Integer:= 16 используется, чтобы объявить разрядность порта DataBus. Этот параметр может быть успешно применен во всех объявлениях сигналов (шин) в теле связанной с проектом архитектуры. Этим способом конструктор может обеспечить только значение для одного общего параметра, действие которого распространяется на весь проект.
Пример 2
entity Gen_Gates is generic (Delay: Time:= 10 ns); port (In1, In2: in Std_Logic; Output: out Std_Logic); end Gen_Gates; architecture Gates of Gen_Gates is begin... Output <= In1 or In2 after Delay;... end Gates;В объявлении проекта entity Gen_Gates оператор generic (Delay: Time:= 10 ns); определяет временную задержку Delay: Time:= 10 ns проектируемого устройства или задержку для назначения значений сигналу Output.
Пример 3
--Проект управляемого генератора вырабатывающего заданное
--количество импульсов с управляемыми из внешней среды
-- параметрами периода и скважности
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity clk_generic is
generic (lenght0: Time:= 15 ns; lenght1: Time:= 35 ns);
port(A: in integer;
clk1: out std_logic);
end clk_generic;
architecture clk_generic_ar of clk_generic is
begin
process
begin
if A = 0 then
clk1 <= '0';
else
for i in 1 to A loop
clk1 <= '1';
wait for lenght1;
clk1 <= '0';
wait for lenght0;
end loop;
end if;
wait on A;
end process;
end clk_generic_ar;
Дата публикования: 2014-11-18; Прочитано: 260 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!