Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz7_Stru_Metod_Oper_Generate_and_Generic.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.53 Mб
Скачать

Оператором 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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]