Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции(2013)

.pdf
Скачиваний:
12
Добавлен:
12.05.2015
Размер:
448.08 Кб
Скачать

Скалярные типы

Булевой Boolean логический тип, диапазон значений (true, false); Символьный Character – символьный тип, диапазон значений - коды ASCII

Примеры: ‘a’, ‘b’,…, null, del, soh,;

Целочисленный Integer арифметический тип, диапазон значений: -2147483647÷2147483647;

Вещественный Real - арифметический тип, диапазон значений: -1.0E308÷1.0E308; Битовый Bit – логический тип, диапазон значений (0,1);

Перечисляемый Enumeration – перечень идентификаторов или символов.

Пример:Type FS is (Id, Fc, Dc; Ex); Type digit is (’0’, ‘1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’)

Физический Time - арифметический тип, диапазон значений: -2147483647÷2147483647; Единицы измерения:

fs; ps 1000 fs;ns 1000 ps;us 1000ns;ms 1000us;sec 1000ms;min 60sec;hr 60 min;

Значения скалярных констант берутся в одинарные кавычки.

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

Векторные: Bit_vector, String.

Примеры: Data(5):=’0’; Data:=”10101”;

Массивы : Array –

Пример:Signal Memory: array(0 to 1023) of bit_vector (3 downto 0);

3-ст. 2 1 0-мл.

0-нижняя граница

1

2

1023-верхняя граница

Запись Record :

Пример:

type Instr is record --объявление типа данных Instr Mnemon:string;

Code:bit_vector(3 downto 0); ExeCyce: integer;

End record;

. . . . . . . . .

Signal In1, In2: Instr; -- объявление сигналов типа Instr

. . . . . . . . .

In1.Mnemon:”add1”; -- присвоение значений полям записи сигнала In1 In1.Code:”0010”;

In1.ExeCycl:2;

Значения векторных констант берутся в двойные кавычки.

Операторы присваивания

Операторы присваивания предназначены для назначения значений сигналам и переменным.

Для назначения значений переменным служит оператор := .

11

Например,

Variable BIN: bit; BIN:=’1’;

Для назначения значений сигналам служат операторы: <= параллельный оператор безусловного присваивания;

<= (с when) – параллельный оператор условного присваивания; <= (с select) – параллельный оператор выборочного присваивания.

Примеры:

Signal F, x1, x2, x3: std_logiс;

Signal CON: std_logiс_vector (1 downto 0);

F<=(x1 and x2) or x3; -- оператор безусловного присваивания

F<=x1 when CON= “00” else -- оператор условного присваивания x2 when CON= “01” else

x4;

with CON select -- оператор выборочного присваивания

F<=x1 when “00”; x2 when “01”; x3 when others.

Операции

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

Язык VHDL поддерживает следующие типы операций:

1.Логические (not, and, or, nand, nor, xor, xnor) Выполняется над типами: bit, bit_vector, boolean.

Если операция выполняется над векторами, длины векторов должны быть одинаковыми.

2.Арифметические:

Выполняется над типами: integer, real.

Оба операнда должны быть одного типа. Например, если один операнд типа time, то другой может быть типа integer или real, а результат будет типа time.

+, -, *, /

Наибольший общий делитель (mod)

Используется только для типа integer. Пример:

6 mod 4=2;

6 mod(-4)=-2.

Остаток от деления (rem)

Пример:

6 rem 4 = 2;

6 rem(-4)=2.

Возведение в степень Используется только для типа integer. Пример:

A**3=А*А*А .

12

Абсолютная величина (abs). Пример:

abs(-2)=2.

07.03.07

3.Операции отношения ( =, /=, <, >, <=, >=)

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

Пример:

1011 будет <110

4.Операции сдвига

Выполняется над типами: boolean, bit. sll – сдвиг влево;

srl – сдвиг вправо.

5.Операция сцепления Операнды должны быть одного типа. Пример:

Signal Agg: bit_vector(0 to 7); Agg<=(Dat1(0 to3)& Dat2(3 to 4)&B0&’1’);

Задержки сигналов

Различные типы задержек в цепи двух элементов показаны на рис.2. Здесь tзр – задержка распространения сигнала в цепи двух элементов (измеряется от момента пересечения порогового уровня входным сигналом до момента пересечения уровня порога выходным сигналом); tф – длительность фронта сигнала (измеряется от 0.1 до 0.9 ∆U= U1U0 фронта сигнала); tзфдлительность задержки фронта сигнала (измеряется от момента пересечения порогового уровня входным сигналом до момента достижения выходным сигналом уровня 0.1 ∆U или 0.9 ∆U при возрастании или спаде напряжения соответственно ); tидлительность сигнала (измеряется от одного момента пересечения порогового уровня сигналом до следующего аналогичного момента).

13

Рис. 2. Динамические параметры логических элементов

При моделировании переходных процессов в схеме наиболее часто используются задержки распространения сигналов Тзр в цепи двух элементов. Самым простым вариантом Тзр является средняя задержка распространения:

t01 t10 tзpср зр 2 зр

Поскольку Тзр01 ≠ Тзр10, средняя задержка распространения недостаточно адекватно описывает динамические процессы в схеме. Например, при прохождении сигнала через логические элементы наблюдается изменение его длительности (на рис. 2 Тио ≠ Ти1 ≠ Ти2), которое может привести к неправильному функционированию устройства. Поэтому наиболее широкое распространение получило использование 2-х различных (по направлению переключения сигнала) значений Тзр.

Если в любой момент модельного времени t для модели справедливо выражение: Y(t + Тзр) = f [X (t) ].

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

14

свойства элементов проявляются в их способности не реагировать на входные сигналы, длительность которых не превышает определенной величины Тзи = kТзр, где k<=1. При k=1 считается, что Тзр обладает также свойствами инерционной задержки, что чаще всего используется в программах моделирования.

В общем случае в функционировании логического вентиля можно выделить следующие ситуации (рис.3):

1)Твх < Тзфj

2)Тзфj < Твх <= Тзрj

3)Тзрj < Твх <= Тзфj + Тфj

4)Твх > Тзфj + Тфj ( выходной сигнал выходит на стабильный уровень U1 или U0)

Если аппаратура проектируется с запасом надежности по быстродействию, то ситуации 1, 2, 3 должны отсутствовать. Моделирование ситуации 4 обеспечивается отработкой идеальной задержки Тзрj. В ситуации 1 проявляются инерционные свойства логического элемента, т.е. реакция на короткий входной сигнал будет отсутствовать. В ситуациях 2 и 3 на выходе элемента появится укороченный сигнал. Если амплитуда этого сигнала не достигнет уровня порога срабатывания для входа элемента – приемника (ситуации 2), то реакция на такой сигнал так же будет отсутствовать. Поэтому, если в модели элемента принять Тзрj=Тзи, т.е. Тзрj обладает свойством инерционной задержки, то различием ситуаций 1 и 2 можно пренебречь. В ситуации 3 элементприемник будет переключаться с меньшей задержкой Тзрj-Тзф, что может привести к постепенному затуханию укороченного сигнала (ситуации 1 и 2) в схеме. Анализ и вычисление задержки в ситуации 3 заметно усложняет и замедляет моделирование. Поэтому в большинстве программ эта ситуация не моделируется с помощью задержки. В этих случаях такие ситуации можно выявлять путем обнаружения на входах элементов сигналов с Ти <Tзф+Тф. В одних системах есть специальные программы автоматического анализа результатов моделирования, в других – средства контроля длительностей входных сигналов элементов.

Твх

1

2

3

4

 

0.9

Uп

0.1

01

01

Тзф

Тф

01

10

Тзр (3,4)

Тзр (3)

Рис. 3. Функционирование логического элемента при условии: Тзф01 < Твх < Тф01

15

Средства описания задержек сигналов в языке VHDL

Вязыке VHDL используется 3 типа задержек сигнала:

1.Идеальная задержка распространения Тзрj

е<=sw transport 3 ns;

2.Инерционная задержка распространения Тзи =Тзрj – сигналы, длительность которых меньше задержки распределения для данного элемента, фильтруются. e<=sw after 3ns;

3.Комбинированная задержка. Инерционная задержка распределения Тзи < Тзрj , а Тзрj – идеальная задержка распространения. Фильтруются только входные сигналы, длительность которых меньше длительности инерционной задержки, а, если длительность входного сигнала больше инерционной задержки, будет отрабатываться идеальная задержка распространения. Может использоваться,

например, тогда, когда с Тзи отождествляется Тзф, и необходимо видеть короткие выходные сигналы, возникающие при Тзфj < Твх <= Тзрj.. Хотя результат моделирования будет неадекватным и польза представляется сомнительной. Может использоваться для описания поведения сложного функционального блока для проверки соблюдения заранее известной допустимой длительности входных сигналов. И в этом случае реальный результат модель предсказать не сможет, но сможет указать места возможных сбоев.

A<=reject 2ns inertial B after 3ns.

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

Структурной называется модель, описывающую схему в виде множества элементов, соединенных множеством связей. Эти элементы могут быть описаны в виде отдельных параллельных операторов, так и в виде структурных моделей. То есть, структурная модель может иметь несколько уровней вложенности.

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

Для описания экземпляров элементов могут использоваться:

оператор прямой реализации интерфейса

16

оператор создания экземпляра компонента

Соответствие портов подсхемы и сигналов в схеме, а так же передача generic -констант элементам схемы может задаваться двумя способами:

позиционное сопоставление

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

Для входных портов в entity модели элемента можно задать значения сигналов по умолчанию, которые они будут принимать на тех входах элементов, которые ни к чему не подключены. В этом случае неподключенные порты в реализациях элементов нужно связывать со словом «open», и они будут принимать значения сигналов, которые заданы по умолчанию. Если связать со словом «open» неподключенный выходной порт, то значение сигнала на нем будет игнорироваться. По умолчанию порт, пропущенный в списке сопоставлений, рассматривается как «open». Неподключенным можно оставлять и порт с типом inout. Но это не наглядно.

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

Прямая реализация интерфейса

Рассмотрим структурную модель RS-триггера (рис.5).

 

E1

_

 

&

S

 

Q

&

_

_

Q

R

 

E2

 

Рис.5. Структурная схема RS-триггера

Пусть есть 4-входовая модель элемента И-НЕ. entity and_inv is

port (a1, a2, b1, b2: in bit:= ‘1’; y: out bit);

end and_inv;

architecture normal of and_inv is begin

end normal;

Создадим структурную модель RS-триггера: entity RS_trig is

port (nR, nS: in bit;

17

Q ,nQ: inout bit); end RS_trig;

architecture RS_ff of RS_trig is begin

E1: entity work.and_inv(normal)

port map(a1=>nS, a2=>nQ, b1=> open, b2=>open, y=>Q); -- поименное сопоставление

-- b1 u b2 всегда =‘1’

E2: entity work.and_inv(normal)

port map(nR, nR, Q, Q, nQ); --позиционное сопоставление end;

end RS_ffl;

Структурная модель может быть размещена в отдельном файле или в том же, что и модель И-НЕ, и после компиляции будет находиться в рабочей библиотеке проекта work.

В нашем примере элементы Е1 и Е2 схемы RSтриггера задаются виде прямой реализации интерфейса entity and_inv с architecture normal, откомпилированный код которых находится в рабочей библиотеке проекта work. Как видим, ссылка на модель организуется в явном виде в каждом операторе реализации экземпляра элемента. Соответствие портов модели and_inv и сигналов на входах Е1 в схеме достигается поименным сопоставлением, а - на входах и Е2 – позиционным сопоставлением.

Сигналы на не используемых входах вентилей Е1 и Е2 всегда равны 1 и не влияют на их работу. Это соответствует физической реализации элементов в ряде технологий (например, ТТЛ, ТТЛШ), где на неподключенных входах элементов наводятся потенциалы, соответствующие уровню логической 1. Однако это справедливо не для всех технологий. Кроме того, нужно помнить, что и не для всех логических функций такой сигнал может быть нейтральным. Поэтому более универсальным является подход явного подключения всех входов к источникам сигналов, например, запараллеливание инвариантных входов (Е2 на рис.5.).

Создание экземпляра компонента

Для обращения к модели элемента в теле структурного описания схемы может быть создан компонент – виртуальный элемент, имеющий имя. Именно на него ссылаются элементы в описании схемы.

Пример:

Структурная схема 3-х разрядного сдвигового регистра показана на рис.6. Реализация трех экземпляров триггеров в модели регистра выполнена с помощью операторов создания экземпляров компонентов.

Т0 Т1

Рис.6. 3-х разрядный сдвиговый регистр

Mодель D-триггера: entity DFF is

port (RST, CLK, D: in bit; Q: out bit);

end DFF;

18

architecture RDTR of DFF is begin

--описание триггера end RDTR;

Модель регистра: entity shift is

port (RESET, CLK, SI: in bit; S0: out bit);

end shift;

architecture RC of shift is

component DFF

port (RST, CLK, D: in bit; Q: out bit);

end component;

signal T: bit_vector (1 downto 0); --внутренние сигналы в схеме begin

bit0:DFF

port map (RESET, CLK, SI, T(0)); --позиционное сопоставление bit1:DFF

port map (RST=>Reset, CLK=>CLK, D=>T(0), Q=>T(1)); --поименное сопоставление bit2:DFF

port map( RESET, CLK, T(1), S0); end RC;

Как видно из предыдущего примера допускается связывание сегмента порта, который объявлен как вектор (одномерный массив), со скалярным сигналом или константой. Приведем еще один пример такого связывания.

Пример:

d: bit_vector(7 downto 0); int_reg: bit;

int_lev: bit_vector(2 downto 0);

. . . . . . . . .

port map (d(7)=>int_reg, d(6 downto 4)=> int_lev,

. . . . . . . . .

d(1)=> ‘0’, d(0)=> ‘1’ );

Components and generic constants

Как уже отмечалось ранее, основное назначение generic констант – передача параметров реализациям компонентов. Рассмотрим пример. Пусть для вентиля И-НЕ значения задержек задаются с помощью линейных эмпирических уравнений, выведенных на основании натурного эксперимента или модельного эксперимента на схемотехническом

j

уровне (например, моделировании на ALTED). Задержка распространения синала t зр пердставляет собой сумму постоянной задержки фронта сигнала t зф, которая определяется технологическими и схемотехническими особенностями изготовления элемента, и части

19

01

фронта выходного сигнала до порогового уровня ( t зр - t зф ), которая зависит от внешней нагрузки.

t01зр = t зф + 3 ns *k

t10 зр = t зф + 2 ns*k, где k -- количество входов элементов нагрузки

Модель вентиля: entity nand2 is

generic (t_ rise, t_fall : time; k: natural ); port (a, b: in bit; c: out bit);

end nand2;

architecture nand2 of nand2 is signal nand_val: bit;

begin

nand_val <= a nand b;

c<= nand_val after (t_rise+ 3ns*k) when nand_val =’1’

else

nand_val after (t_fall+ 2ns*k); end nand2;

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

Модель некоторой схемы:

entity sx is

port (in1, in2, in3, in4: in bit; out1, out2: out bit); end sx;

architecture sx1 of sx is

component nand2 is

generic (t_rise : time :=3ns, t _fall : time :=2ns, k: natural:=1); port (a, b : in bit, c: out bit);

end component;

begin

 

u1: nand2 generic map (2ns, 2ns, 3)

 

port map (in1, in2, out1);

 

u2: nand2 port map (in3, in4, out2);

--значение задержек берутся из generic по умолчанию

u3: nand2 generic map (3ns, 3ns)

--значение t_ fall изменено, остальные параметры

port map (in5, in6, out3);

--устанавливаются по умолчанию

end sx1;

 

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

В данном примере реализации элементов u1, u2, u3 ссылаются на компонент с именем nand2, которое в данном случае совпадает с именем модели.

Как отмечалось ранее generic удобно использовать для задания и изменения

размерностей векторных сигналов.

Например, в модели подсхемы: entity reg is

generic (w: positive);

20

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