Студопедия Главная Случайная страница Обратная связь

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

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; просмотров: 626. Нарушение авторских прав; Мы поможем в написании вашей работы!




Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...


Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...


Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...


Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Классификация потерь населения в очагах поражения в военное время Ядерное, химическое и бактериологическое (биологическое) оружие является оружием массового поражения...

Факторы, влияющие на степень электролитической диссоциации Степень диссоциации зависит от природы электролита и растворителя, концентрации раствора, температуры, присутствия одноименного иона и других факторов...

Йодометрия. Характеристика метода Метод йодометрии основан на ОВ-реакциях, связанных с превращением I2 в ионы I- и обратно...

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

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

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

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