- •Языки описания аппаратуры (hdl)
- •Типы данных языка vhdl
- •Модели данных
- •Операторы присваивания.
- •Определение векторов.
- •Виды внутренних ресурсов плис.
- •Программируемая логическая матрица «и-или»
- •Структура макроячейки плис cpld.
- •Виды современных плис
- •Маршрут проектирования конфигурации плис (design flow)
Типы данных языка vhdl
Типы данных представляются как в виде включённых в систему типов, например byte, integer, так и определяемые пользователем. Например, наиболее часто используемый тип – стандартная логика «std_logic» может принимать следующие значения:
U – неинициализированный сигнал, т.е. сигнал, который ещё не был задан.
Х - сильный неизвестный сигнал.
0 – сильный ноль
1 – сильная единица
Z – высокоимпедансное состояние
W – слабый неизвестный сигнал (слабый сигнал – это, например, сигнал на линии, реализуемой с открытым коллектором, или подключение по монтажному «И»).
L – слабый ноль
H- слабая единица
– - не имеет значения.
Тип может быть определён командой TYPE, после которой следует название типа, IS и список возможных значений
Type bulian is (FALSE, TRUE);
Разные наборы действий доступны различным типам данных. Например, если есть многоразрядная переменная типа bulian, то к ней недоступна команда сложения, однако, она доступна типу Integer. Для преобразования типа существуют специальные команды.
Модели данных
Константа (constant)
Переменная (variable)
Сигнал (signal) эквивалентен переменной, однако рассматривается её изменение во времени, т.е. доступно её значение в предыдущие моменты времени.
Файл – сложноорганизованная переменная
Задержанные переменные (shared variables) – переменная, значение которой на момент определения не задано.
Примеры определения данных.
Модель
Название модели
Список данных: тип данных;
Сигнал
Signal X, Y, mysignal:std_logic;
Переменная
Variable temp : std_logic:=’0’;
Отсроченная переменная
Shared variable Y: bit;
Операторы присваивания.
Для сигналов оператор присваивания - ‘≤’, а для всех остальных типов – ‘:=’
Определение векторов.
Помимо скалярного существует векторный тип. Типы для стандартной логики задаются с помощью слова-команды: std_logic_vector(*диапазон*).
Диапазоны бывают 2х типов:
Нисходящий – задаётся словом ‘downto’
std_logic_vector(7 downto 0);
Восходящий – задается словом ‘to’
std_logic_vector(0 to 7);
Variable IN: stg_logic_vector (0 to 3);
Для того, чтобы обратиться к отдельному разряду этой переменной, можно использовать ‘()’. Ну или ‘[]’, которые более приняты в схемотехническом плане.
IN[2] – второй бит переменной IN.
Сущность:
Generic (length : integer := 8); // создаём глобальную константу length, которая во всём проекте на момент компиляции = 8.
Порты:
Типы портов:
IN – входной порт только для чтения значения сигналов
OUT - выходной порт
INOUT – двунаправленный порт. Можно как записывать, так и читать из него.
Буфер – выходной порт, значение из которого можно считывать
Linkage – двунаправленный порт с ограниченным использованием (практически не используется).
Пример:
Port (A,B: IN:std_logic_vector (0 to 3); S:OUT:std_logic_vector (0 to3); C:OUT:std_logic);
Архитектурное тело состоит из 2х частей: определение констант и переменных, и из поля команд, которое содержит исполняемые действия. Поле определений от поля действий отделяется командой begin.
Architecture *имя архитектуры* *OP-имя сущности* *IS-описание определений*;
begin *действия*;
end *имя архитектуры*;
Действия архитектуры.
Действия могут представляться двояко: как операции и процессы.
Операции VHDL.
Логические операции (and, or, nor, xor, xnor…)
Операции сравнения (=, /=, <, ≤, >,≥)
Операции сдвига (SLL, SRL, ROR, SRA…)
Операции сложения (+,-)
Умножение и деление (*,/)
Выделение частного и остатка (mod, rem)
Прочие (abs – модуль инверсий)
Язык VHDL предполагает возможность указания меток и механизма «go to». Операторы бывают последовательные и параллельные, синтезируемые и внедрённые, простые и составные.
Последовательный оператор. Оператор условия.
Особенностью оператора условия является наличие множества блоков срабатывания условия (когда условие верно), которые задаются командой ELSIF (другое если). Условие задаётся следующим образом:
IF *условие 1* then
*выполнение условия 1*…
ELSIF *условие 2* then
*выполнение условия 2*…
ELSE *невыполнение условия*…
End if;
Циклы.
Задаются с использованием чётной переменной.
FOR *счётная переменная* IN *диапазон изменения* LOOP
*операция в цикле*;
END LOOP;
FOR i IN 5 downto 0 loop
*операции в цикле*
End loop;
Цикл с условием
Задаётся командой WHILE.
While *условие* LOOP *операции* end loop;
Множественный выбор
CASE *переменная* IS
When *значение 1* => *выполненная команда 1*;
END CASE
CASE sel IS
WHEN "00" => output <= in0;
…
END CASE;
Оператор ожидания – определяет врем ожидания процесса, или события. Задаётся с помощью команды wait. Опирается на такое понятие, как список чувствительности (лист чувствительности) – одна или более переменных, изменение значения которых приводит к активации того или иного оператора.
Wait on (*лист чувствительности*) UNTIL *действие* FOR *время*;
Например:
Wait on (X,Y) UNTIL z=0 FOR 100ns
VHDL работает с точностью указания времени до фемтосекунды (10-15). Список чувствительности может отсутствовать вместе с командой.
События – либо фронт либо срез! Особые ситуации изменения переменных в списке чувствительности – это события фронта и среза сигнала.
Параллельные операторы – блок и процесс.
Блоки.
Block (*условие*)
*определение используемых данных - константы и переменные*
begin *описание процесса*
End block;
Процессы.
Process (*лист чувствительности*)
*область декларации*
Begin *VHDL операторы* *описание процесса*
End process;
В программе на VHDL может присутствовать множество процессов, отмеченных разными списками чувствительности. Данные процессы реализуются параллельно.
Компоненты.
Оператор определения компонент:
component *имя компонента* *порт (определение линий порта)*;
end component;
Существо выполняемых компонентом функций определяется дополнительно.
Указание линий передачи информации.
*Имя компонента*
Port map (*имя выходного порта в данном компоненте* => *название переменной куда будет записано значение выхода*,… );
Рассматривается классификация современных ПЛИС. Ряд существующих типов опущен ввиду их неиспользования. Рассматриваются такие типы, как CPLD (complex programmable logic device), FPGA (field-programmable gate array – программируемая пользователем вентильная матрица), ASIC (Application-specific integrated circuit - интегральная схема, специализированная для решения конкретной задачи). ASIC микросхемы являются полузаказными и изготовляются на заводе-изготовителе. Дальнейшее изменение ASIC больше невозможно.
Рисунок 32 - Использование ПЛИС CPLD.
Рисунок 33 - Использование ПЛИС FPGA.
FPSLIC (field programmable system level integrated circuit) – отличается от ПЛИС тем, что в рамках её кристалла реализовано ядро, осуществляющее функции вычислительного устройства с жёсткой логикой функционирования, т.е. микропроцессор.
Преимущества:
Для создания вычислительного ядра системы не используются ресурсы ПЛИС.
Недостаток:
Функциональность вычислительного ядра не может быть изменена пользователем.
В настоящее время микросхемы FPSLIC всё ещё дороги.
Лидером в построении системы FPSLIC, а также разработчиком этой архитектуры является фирма Atmel (AT94).
