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



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Тема: Кинематика поступательного и вращательного движения. 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью, проекция которой изменяется со временем 1. Твердое тело начинает вращаться вокруг оси Z с угловой скоростью...

Условия приобретения статуса индивидуального предпринимателя. В соответствии с п. 1 ст. 23 ГК РФ гражданин вправе заниматься предпринимательской деятельностью без образования юридического лица с момента государственной регистрации в качестве индивидуального предпринимателя. Каковы же условия такой регистрации и...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Классификация ИС по признаку структурированности задач Так как основное назначение ИС – автоматизировать информационные процессы для решения определенных задач, то одна из основных классификаций – это классификация ИС по степени структурированности задач...

Внешняя политика России 1894- 1917 гг. Внешнюю политику Николая II и первый период его царствования определяли, по меньшей мере три важных фактора...

Оценка качества Анализ документации. Имеющийся рецепт, паспорт письменного контроля и номер лекарственной формы соответствуют друг другу. Ингредиенты совместимы, расчеты сделаны верно, паспорт письменного контроля выписан верно. Правильность упаковки и оформления....

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