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

22.Операторы Process в vhdl.

Оператор процесса

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

PROCESS (список чувствительности)

описание типов

описание констант

описание функций

описание процедур

BEGIN

<операторы>

ENDPROCESS

Внутри процесса нельзя описывать сигналы. Пример:

architecture DECODER.ARH of DECODER is

BEGIN

PROCESS (A, E)

VARIABLE V: BIT.VECTOR (0 to 3);

BEGIN

V(0):=not A(0) and not A(1) and E;

V(3):= A(0) and A(1) and E;

D<=V;

ENDPROCESS

END DECODER.ARH

24.Операторы if и Case.

Оператор условного перехода IF

IF <условие> Then <посл. оп-р 1>

Else < посл. оп-р 2>

ENDIF

В ряде случаев целесообразно использовать вложенные операторы:

If <условие 1> Then < посл. оп-р 1>

Elseif <условие 2> Then < посл. оп-р 2>

………………….

Elseif <условие n> Then < посл. оп-р n>

Endif

Последняя запись оператора IF может быть усилена, то есть после посл. оп-ра ELSEIF может быть поставлена конструкция ELSE <посл. услов.>, если не срабатывает ни одна из выше приведенных операций, то выполняется последовательность операторов записанных в Else. Пример:

Architecture DECODER.ARH of DECODER is

Begin

Process (A, E) – список чувствительности

Begin

If E=’0’ Then D<=”0000”;

Else if A=”00” Then D<=”0001”;

………………………………….

Else if A=”11” Then D<=”1000”;

Endif

End Process

End DECODER.ARH

Оператор CASE

В ряде случаев вместо операторов SELECT используется оператор CASE. Подобное использование разумно, если ключевое выражение состоит из одной переменной или сигнала. Данный подход всегда используется при моделировании автомата (управляющего устройства). Вводится переменная SOST (состояние) и по тому в какое состояние переходит автомат, реализуется операция.

CASE <ключевое выражение> is

When <вариант 1>=><имя сигнала 1><=<выражение 1>

When <вариант 2>=><имя сигнала 2><=<выражение 2>

When Other => <имя сигнала n><=<выражение n>

END CASE

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

Интерфейсный блок.

Architecture DECODER_ARH of DECODER is

Begin

Process (A, E)

Variable V: bit_vector (0 to 3);

Begin

Case A is

When “00”=> V := “0001”;

……………………

When “11”=> V := “1000”;

End Case

If E=’1’ Then D<=V

Else D<=”0000”

End if

End Process

End DECODER_ARH

25. Структурная и поведенческая модель в vhdl

Моделирование последовательных схем может проводится на 2-х уровнях:

  1. На поведенческом уровне (с использованием операторов VHDL)

  2. На структурном уровне, когда схема представляется как совокупность компонентов и связей между ними. При этом компоненты могут быть описаны как самим пользователем, так и взяты из библиотеки. Но в любом случае под компонентом понимается программа на VHDL.

Поведенческая модель

Моделирование RS триггера на поведенческом уровне:

ENTITY RS IS

PORT (SET, RESET: in bit;

d1,d2: out bit);

END RS

Architecture RS.ARX of RS IS

BEGIN

PROCESS (SET, RESET);

BEGIN

IF SET=’1’ and RESET=’0’ THEN d1<=’1’; d2<=’0’;

ELSIF SET=’0’ and RESET=’1’ THEN d1<=’0’; d2<=’1’;

ELSIF SET=’1’ and RESET=’1’ THEN <сообщение>;

ENDIF

ENDPROCESS

END RS.ARX

Язык VHDL позволяет задавать:

  1. Задержки отдельных компонентов схемы

  2. В поведенческой модели задержка может быть задана в любом операторе присвоения сигналов after <величина задержки> (целое число со своей аббревиатурой 20 нс)

Различают 2 вида задержек:

  1. Транспортная задержка – это обычная задержка распространения сигнала по цепи.

  2. Инерциальная. Как правило, связана с конкретной элементной базой.

Инерциальная задержка предполагает, что, если на вход элемента приходит импульс меньше задержки этого элемента, то он игнорируется, и элемент на него прореагировать не может. В VHDL предполагается по умолчанию инерциальная задержка. Если пользователь хочет испытать транспортную задержку, он должен указать это явно. Примеры:

y1 <= not (x1 and x2) after 20ns

y1 <= transport not (x1 and x2) after 20ns

Структурная модель

Предполагает, что в явном или неявном виде пользователь даст описание компонентов структурной модели. Для описания компонент используются блоки:

COMPONENT <имя компонента>

GENERIS <список параметров>

PORT <описание входных и выходных цепей>

END COMPONENT

Конструкция GENERIS служит для передачи параметров в тело компонента. Это может быть время задержки компонентов, количество контактов и его мощность. Введение данной конструкции позволяет не меняя архитектурного тела наследовать поведение проектируемого устройства при разных задержках компонентов. Т.к. проектируемая схема представляет целую совокупность компонент, то все они должны быть описаны в архитектурном теле без конструкции BEGIN. Для создания полноценной схемы моделирования необходимо привязать интерфейсный блок любого элемента схемы с описанием портов компонента. Подобная привязка осуществляется с использованием описания порта в следующем виде:

P ort map (список входов/выходов)

Entity Sx1 is

port (x1,x2,x3: in bit

y1,y2 : out bit);

end Sx1

architecture SX1.ARX of Sx1 is

COMPONENT AND2

port (a,b: in bit; c: out bit);

end AND2

BEGIN

A1:AND2

port map (x1, x2, y1)

A2:AND2

port map (x2, x3, y2)

END SX1.ARH

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

A1:AND2

port map (a=>x1,b=> x2,c=> y1)

A2:AND2

Port map (a=>x2, b=>x3, c=>y2)

END SX1.ARH

Данный подход, связанный с описанием компонентов является достаточно громоздким. Предпочтительно использовать стандартные библиотеки. Для работы с ней необходимо в 1-ой и 2-ой строчках программы дать ссылку на эту библиотеку.

LIBRARY ieee;

USE ieee.std_logic.all;

Данная конструкция позволяет подключать полную библиотеку. Однако, возможно подключить только часть:

USE ieee.std_logic.arith.’+’

В этом случае подключается библиотека с арифметическими компонентами, а именно +. Использование библиотеки преследует цель:

- удобство для пользователя

- адекватность моделирования

Т.к. реальные схемы при работе с шинными компонентами АЦ и ЦА сигналами, возникает ситуация, когда в одной точке сходится несколько сигналов различной мощности. В этом случае моделирование проводится в рамках 9-тизначного алфавита. Алфавит включает:

U – неинициализированное значение

X – неопределенное значение

W – слабая неопределенность

0 – сильный 0

L - слабый 0

1 – сильна 1

H – слабая 1

Z - импеданс

~ - безразличное значение

Расширение структурной модели

В приведенном примере модель мультиплексора:

entity MUX IS

port (x: in bit.vector (1 to 4);

A: in bit.vector (1 to 2);

y: out bit);

end MUX

интерфейсное тело одинаково, как и для поведенческой, так и для структурной модели.

architecture MUX_ARX of MUX is

signal ma: bit.vector (1 to 2)

signal my: bit.vector (1 to 4)

begin

C1:AND3

port map (x(1), ma(1), ma(2), my(1));

C2:AND3

port map (x(2), ma(1), A(2), my(2));

END MUX_ARX

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

COMPONENT AND3

port (a,b,c: in bit; z: out bit);

end AND3

Расшифровка осуществляется в полном соответствии с нотацией VHDL и состоит из архитектурного и интерфейсного тел.

entity AND3 is

port (a,b,c: in bit; z: out bit);

end AND3

architecture AND3.ARX of AND3 is

begin

process (a,b,c)

begin

z<= a and b and c;

end process

end AND3.ARX

Аналогично описание для OR4 и инверторов. На практике для описания структурных схем обычно используем библиотеки компонентов. В этом случае пользователь рисует на экране структурную схему (см. выше) и запускает описание на трансляцию. Компилятор выбирает из библиотеки соответствующее описание на VHDL и автоматически формирует общую структуру схемы на VHDL. Как правило, библиотеки создаются по иерархическому принципу (в соответствии архитектурной схеме однократно ставится УГО). В современных системах уровень иерархии не ограничен.