Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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()

Оператором 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; Прочитано: 247 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...