Студопедия — Metka : ] procedureprocedure_name [( formal_parameter_list )] is
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Metka : ] procedureprocedure_name [( formal_parameter_list )] is






-- тело определяемой процедуры

procedure_declarations

Begin

sequential statements

end procedure procedure_name;

Определение подпрограммы процедура - это одна из форм подпрограмм, которая может не только воспринимать входные параметры и возвращать конечный числовой результат. Эта форма подпрограммы может также в результате своей работы изменять значения параметров и возвращать эти новые значения параметров в точку вызова головного кода проекта. Именно в этом состоит ее главное отличие от определения подпрограммы-функции. Другими словами, определение подпрограммы процедура - это автономный фрагмент программного кода, который определяет алгоритм для вычисления значений или описывает поведение проектируемой подсистемы. Определение процедура состоит из двух программных субблоков:

· Заголовка процедура;

· Тела процедура (FUNCTION BODY);

 

Заголовок Определения подпрограммы процедура по своему конструктивному устройству аналогичен объявлению процедуры, за исключением того, что Заголовок определения процедуры содержит ключевое слово is.

 

 

Тело Определения процедур ы содержит раздел локальных объявлений (procedure_declarations), следующий за ключевым словом is, и раздел выполняемых операторов (sequential statements), располагаемый между ключевыми словами begin и end..

 

Раздел локальных объявлений (procedure_declarations) тела процедуры может содержать, типы, подтипы, констант, переменных, файлов, а также объявления и определения новых подпрограмм и другие программные компоненты языка VHDL. Все эти объявления являются локальными для этого определения подпрограммы процедуры.

Раздел выполняемых операторов (sequential statements) тела процедуры определяет алгоритм работы процедуры, содержит операторы последовательной (регистровой) логики. Когда процедура вызывается, она начинает выполнять последовательность операторов, имеющихся внутри тела процедуры. Раздел выполняемых операторов тела процедуры может содержать любые операторы последовательной (включая, оператор wait). Однако, оператор wait, не может использоваться в процедурах, которые вызываются из процесса со списком чувствительности или изнутри подпрограммы функции

Раздел выполняемых операторов заканчивается перед ключевым словом end.

 

Тело процедуры закрывается ключевыми словами end procedure и идентификатором имени процедуры.. Ключевое слово procedure и имя процедуры могут необязательно следовать за ключевым словом end.

Примеры определения процедуры:

Example 1

procedure Transcoder_1 (variable Value: inout bit_vector (0 to 7)) is begin case Value is when "00000000" => Value:="01010101"; when "01010101" => Value:="00000000"; when others => Value:="11111111"; end case; end procedure Transcoder_1;

В этом примере процедура Transcoder_1 преобразует входное кодовое значение переменной Value типа bit_vector (0 to 7) и возвращает новое кодовое значение в точку вызова благодаря режиму inout.

Example 2

procedure Comp_3(In1,R: in real; Step: in integer; W1,W2: out real) is variable counter: Integer; begin W1:= 1.43 * In1; W2:= 1.0; L1: for counter in 1 to Step loop W2:= W2 * W1; exit L1 when W2 > R; end loop L1; assert (W2 < R) report "Out of range" severity Error; end procedure Comp_3;

В этом примере процедура Comp_3 вычисляет две переменные W1 и W2 режима out, (обе, типа REAL). Входные Параметры In1 и R константы типа real, имеют режим in, и входной параметр Step константа целочисленного типа также имеет режим in. Переменная W2 вычисляется внутри тела оператора цикла. Когда значение переменной W2 больше чем R выполняется оператор exit (выход из цикла). Управление передается на оператор assert, который генерирует отчет (report) о наличии ошибки.

Example 3

procedure Proc_3 (X,Y: inout Integer) is type Word_16 is range 0 to 65536; subtype Byte is Word_16 range 0 to 255; variable Vb1,Vb2,Vb3: Real; constant Pi: Real:=3.14; procedure Compute (variable V1, V2: Real) is begin -- subprogram_statement_part end procedure Compute; begin -- subprogram_statement_part end procedure Proc_3;

Этот пример демонстрирует различные варианты объявлений, которые могут располагаться в декларативной части тела процедуры.

 

Example 4

 

Procedure par1 (signal X: in std_logic_vector; signal Y: out std_logic) is variable tmp: std_logic; begin for j in X ’Range loop tmp:= tmp xor X(j); end loop; Y <= tmp; -- в теле процедуры можно назначать значения сигналам -- Объявлять новые сигналы в теле процедуры нельзя End par1; Этот пример демонстрирует вариант объявления variable, которое может располагаться в декларативной части тела процедуры и использования простого оператора назначения значения сигналу. Идентификатор сигнала, которому назначается значения, должен быть формальным параметром.

ВЫЗОВ ПРОЦЕДУРЫ (PROCEDURE CALL)

Оператор Вызова процедуры имеет такой синтаксис:

 

[ metka: ] procedure_name [(list fact_parameter)];

 

Оператор Вызова процедуры является оператором последовательной (регистровой) или комбинаторной(параллельной) логики, в зависимости от того, где он используется. Последовательный вызов процедуры выполняется всякий раз, когда управление, при выполнении кода головной программы (обычно оператора process), передается на него, в то время как параллельный вызов процедуры(когда он расположен в разделе операторов комбинаторной логики тела архитектуры) активизируется всякий раз, когда любой из его параметров режимов in или inout изменяет(заменяет) свое значение.

Все фактические параметры в вызове процедуры должны иметь тот же самый тип, как и формальные параметры, которые они заменяют. Все фактические параметры в вызове процедуры отделяются друг от друга запятыми.

При оформлении оператора вызова процедуры следует учитывать одну особенность. Так, если, в определении процедуры, формальный параметр уже имеет заданное значение, то чтобы именно оно было принято во внимание, фактический параметр при вызове процедуры, может сопровождаться операцией выбора (=>) и ключевым словом open.

Пример оформления Оператора Вызова процедуры:

Пусть имеется определение процедуры со следующим заголовком:

 

Procedure increment (a: inout real; by: bit_vector(o to 7):= X”0000_0001”) is

 

Для обращения к данной процедуре оператор вызова можно оформить несколькими вариантами:

Вариант 1: Increment (count);

 

Вариант 2: Increment (count, by => open);

 

Вариант 3: Increment (count, X”0000_0001”);

 

Все эти варианты являются эквивалентными.

 

Следует особо помнить, что язык VHDL поддерживает два варианта операторов вызова подпрограмм процедур. Эти варианты получили названия:

· Оператор Параллельного вызова подпрограммы процедуры

· Оператор Последовательного вызова подпрограммы процедуры

Хотя синтаксис этих операторов одинаков, вариант названия зависит от места расположения оператора вызова в разделе выполняемых операторов тела архитектуры.

Если оператор вызова подпрограммы процедуры используется в теле архитектуры как конкурентный оператор, то его пронято называть Оператором Параллельного вызова подпрограммы процедуры.

Если оператор вызова подпрограммы процедуры используется в теле оператора process как последовательный оператор, то его пронято называть Оператором Последовательноговызова подпрограммы процедуры.

Пример оформления Параллельного вызова подпрограммы процедуры:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

 







Дата добавления: 2015-09-15; просмотров: 603. Нарушение авторских прав; Мы поможем в написании вашей работы!



Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Тема: Изучение фенотипов местных сортов растений Цель: расширить знания о задачах современной селекции. Оборудование:пакетики семян различных сортов томатов...

Тема: Составление цепи питания Цель: расширить знания о биотических факторах среды. Оборудование:гербарные растения...

В эволюции растений и животных. Цель: выявить ароморфозы и идиоадаптации у растений Цель: выявить ароморфозы и идиоадаптации у растений. Оборудование: гербарные растения, чучела хордовых (рыб, земноводных, птиц, пресмыкающихся, млекопитающих), коллекции насекомых, влажные препараты паразитических червей, мох, хвощ, папоротник...

Ученые, внесшие большой вклад в развитие науки биологии Краткая история развития биологии. Чарльз Дарвин (1809 -1882)- основной труд « О происхождении видов путем естественного отбора или Сохранение благоприятствующих пород в борьбе за жизнь»...

Этапы трансляции и их характеристика Трансляция (от лат. translatio — перевод) — процесс синтеза белка из аминокислот на матрице информационной (матричной) РНК (иРНК...

Условия, необходимые для появления жизни История жизни и история Земли неотделимы друг от друга, так как именно в процессах развития нашей планеты как космического тела закладывались определенные физические и химические условия, необходимые для появления и развития жизни...

Studopedia.info - Студопедия - 2014-2024 год . (0.012 сек.) русская версия | украинская версия