Основы языка VHDL

Содержание

Слайд 2

Цели и задачи

Получение навыков создания моделей при помощи языка VHDL
Описание цифровых систем

Цели и задачи Получение навыков создания моделей при помощи языка VHDL Описание
при помощи логических функций
Иерархическое описание цифровых систем средствами языка VHDL

Слайд 3

Структура курса

Введение
Основные элементы языка VHDL
Методы моделирования на VHDL
Синтез цифровых систем
Иерархический дизайн цифровых

Структура курса Введение Основные элементы языка VHDL Методы моделирования на VHDL Синтез
систем

Слайд 4

Основы языка VHDL

Введение

Основы языка VHDL Введение

Слайд 5

Основы VHDL

Язык VHDL утвержден на уровне отраслевых стандартов (IEEE) как программное средство

Основы VHDL Язык VHDL утвержден на уровне отраслевых стандартов (IEEE) как программное
для описания аппаратных систем.
Язык высокого уровня применимый как для моделирования так и для синтеза.

Слайд 6

Основные определения

HDL – Hardware description language, язык описания аппаратных средств
Поведенческое моделирование: (Behavior

Основные определения HDL – Hardware description language, язык описания аппаратных средств Поведенческое
modeling) – описание компонента на основе вход-выходных зависимостей
Структурное моделирование (Structural modeling): описание системы на уровне компонентов и связей между ними

Слайд 7

Register Transfer Layer (RTL) – Уровень проектирования (Уровень регистрового обмена)‏
Синтез – трансляция

Register Transfer Layer (RTL) – Уровень проектирования (Уровень регистрового обмена)‏ Синтез –
с уровня описания на языке HDL на уровень электрических цепей
Процесс – исполняемая единица в языке VHDL

Основные определения (продолжение)‏

Слайд 8

Поведенческое моделирование

Используется описание поведения элемента
Не используется информация о связях между компонентами

Поведенческое моделирование Используется описание поведения элемента Не используется информация о связях между компонентами

Слайд 9

Структурное моделирование

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

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

Слайд 10

RTL Синтез

RTL Синтез

Слайд 11

VHDL в сравнении с другими HDL языками

VHDL:
«Создать устройство выход которого изменяется

VHDL в сравнении с другими HDL языками VHDL: «Создать устройство выход которого
только в момент когда возникает переход с низкого на высокий уровень на определенном входе. В этот момент выход должен получить значение сигнала на входе»
Результат: процедура синтеза создаст триггер с синхронизацией «по фронту».
ABEL, PALASM, AHDL:
«Создать D-триггер»
Результат: в зависимости от средств синтеза будет создан D-триггер с синхронизацией по фронту или по срезу.

Слайд 12

Некоторые особенности VHDL

Два подмножества конструкций языка:
Синтезируемые конструкции
Конструкции для моделирования
Язык VHDL нечувствителен

Некоторые особенности VHDL Два подмножества конструкций языка: Синтезируемые конструкции Конструкции для моделирования
к регистру.
Операторы языка VHDL разделяются символом ;
Нечувствителен к количеству пробелов
Коментарии в VHDL начинаются с символа - -

Слайд 13

Типовые последовательности VHDL

Типовые последовательности VHDL

Слайд 14

Основы языка VHDL

Основные конструкции VHDL

Основы языка VHDL Основные конструкции VHDL

Слайд 15

Основные элементы языка VHDL

Entity
Используется для описания интерфейса модели.
Architecture
Используется для описания поведения модели.
Configuration
Используется

Основные элементы языка VHDL Entity Используется для описания интерфейса модели. Architecture Используется
для связывания объектов Entity и Architecture.
Package
Набор конструкций, которые могут быть использованы другими VHDL модулями (аналог библиотек)‏
Содержит две части:
Package declaration
Package body

Слайд 16

Объявление ENTITY

ENTITY <Имя_Entity> IS
Generic declarations
Port declarations
END <Имя_Entity>; (Версия 1076-1987)‏
END ENTITY <Имя_Entity>; (Версия

Объявление ENTITY ENTITY IS Generic declarations Port declarations END ; (Версия 1076-1987)‏
1076-1993)

Аналогия: символ
Generic declarations
Используется для параметризации модели
Port declarations
Используется для описания входов и выходов модели

Слайд 17

Entity: объявления GENERIC

Синтаксис: <Модификатор> имя_объекта:<тип>:=<начальное значение>;

ENTITY <имя_entity> IS

GENERIC (
CONSTANT tplh, tphl: time

Entity: объявления GENERIC Синтаксис: имя_объекта: := ; ENTITY IS GENERIC ( CONSTANT
:= 5ns ;
-- слово CONSTANT можно не указывать
tphz, tplz: TIME := 3 ns ;
default_value : INTEGER := 1 ;

Слайд 18

Entity: объявление внешних сигналов

ENTITY <имя_entity> IS
Generic declarations
PORT (
SIGNAL clk, clr: IN BIT;

Entity: объявление внешних сигналов ENTITY IS Generic declarations PORT ( SIGNAL clk,

-- слово SIGNAL можно не указывать
q: OUT BIT;
) ;
END ENTITY <имя_entity>;

Слайд 19

Architecture

Аналогия: схема
Описывает функциональную и временную модель
Должна быть ассоциирована с ENTITY
ENTITY может ассоциироваться

Architecture Аналогия: схема Описывает функциональную и временную модель Должна быть ассоциирована с
с несколькими архитектурами
Процессы внутри архитектуры выполняются параллельно
Архитектурные стили
Поведенческое описание
RTL
Функциональное (без определения задержек)
Структурное (Netlist)
На уровне gates
Смешанное описание

Слайд 20

Архитектура

ARCHITECTURE <Имя_Архитектуры> OF <имя_Entity> IS
-- Декларации
SIGNAL temp: INTEGER := 1;

Архитектура ARCHITECTURE OF IS -- Декларации SIGNAL temp: INTEGER := 1; CONSTANT
CONSTANT load: BOOLEAN := true ;
TYPE states IS ( S1, S2, S3, S4 ) ;
-- Декларации компонентов ;
-- Декларации подтипов ;
-- Декларации атрибутов ;
-- Спецификации атрибутов ;
-- Декларации подпрограмм ;
-- Спецификации подпрограмм ;
BEGIN Определение процессов ; Параллельные вызовы процедур ; Параллельные присваивания сигналов ; Инстанциирование и привязка компонентов ; Операторы GENERATE
END ARCHITECTURE <имя_архитектуры> ;

Слайд 21

Configuration

Используется для установления связей внутри проекта
Связывание ENTITY и ARCHITECTURE
Связывание COMPONENT и ENTITY+ARCHITECTURE
Широко

Configuration Используется для установления связей внутри проекта Связывание ENTITY и ARCHITECTURE Связывание
используется при моделировании
Предоставляет гибкие возможности при сравнении альтернативных дизайнов

CONFIGURATION <имя_конфигурации> OF <имя_ENTITY> IS
FOR <имя_архитектуры>
END FOR ;
END CONFIGURATION <имя_конфигурации> ;

Слайд 22

Собираем все вместе

ENTITY cmpl_sig IS PORT ( a, b, sel: IN BIT

Собираем все вместе ENTITY cmpl_sig IS PORT ( a, b, sel: IN
; x, y, z : OUT BIT ) ; END ENTITY cmpl_sig ;

ARCHITECTURE logic OF cmpl_sig IS BEGIN -- простое присваивание сигнала x <= ( a AND NOT sel) OR (b AND sel) ;
-- условное присваивание y <= a WHEN sel=‘0’ ELSE b ; -- параметрическое присваивание WITH sel SELECT z <= a WHEN ‘0’, b WHEN ‘1’, ‘0’ WHEN OTHERS ; END ARCHITECTURE logic ;

CONFIGURATION cmpl_sig_conf OF cmpl_sig IS FOR logic END FOR ; END CONFIGURATION cmpl_sig_conf ;

Слайд 23

Packages

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

Packages Пакеты предоставляют удобную возможность для сохранения и повторного использования кода Пакет
пакета (обязательная часть)
Деклараций типов
Деклараций подпрограмм
Тела пакета (может отсутствовать)
Определение подпрограмм
Язык VHDL имеет два встроенных пакета:
Standard
TEXTIO

Слайд 24

Пример использования пакета

LIBRARY IEEE ; USE IEEE.std_logic_1164.all ;

PACKAGE filt_cmp IS TYPE state_type IS

Пример использования пакета LIBRARY IEEE ; USE IEEE.std_logic_1164.all ; PACKAGE filt_cmp IS
(idle, tap1, tap2, tap3, tap4) ; FUNCTION compare (variable a,b : integer) RETURN boolean ; END PACKAGE filt_cmp ;

PACKAGE BODY filt_cmp IS FUNCTION compare ( variable: a,b : INTEGER ) IS VARIABLE temp : BOOLEAN ; BEGIN IF a < b THEN temp := true ; ELSE temp := false ; END IF ; RETURN temp ; END FUNCTION compare ; END PACKAGE BODY filt_cmp ;

Слайд 25

Libraries

Библиотека объединяет от одного до нескольких пакетов
Библиотеки ресурсов
Стандартные пакеты
Пакеты IEEE
Пакеты производителя (Xilinx,

Libraries Библиотека объединяет от одного до нескольких пакетов Библиотеки ресурсов Стандартные пакеты
Altera и т.п.)
Любые другие внешние библиотеки на которые ссылается проект
Рабочая библиотека
Библиотека, в которой размещается результат компиляции текущего проекта

Слайд 26

Использование пакетов и библиотек

Все пакеты должны быть скомпилированы
Неявное использование библиотек
Библиотеки WORK и

Использование пакетов и библиотек Все пакеты должны быть скомпилированы Неявное использование библиотек
STD не требуют специальных объявлений
Оператор LIBRARY
Определяет имя библиотеки которую мы собираемся использовать
Использует символическое имя директории с файлами библиотеки
Определяется настройками проекта
Оператор USE
Определяет конкретный пакет или/и объект который мы будем использовать

Слайд 28

Стандартные библиотеки

Библиотека STD
Содержит следующие пакеты
Standard (Типы: Bit, Boolean, Integer, Real, Time и

Стандартные библиотеки Библиотека STD Содержит следующие пакеты Standard (Типы: Bit, Boolean, Integer,
функции для поддержки этих типов)
Textio (Файловые операции)
Встроенные библиотеки

Слайд 29

Пакет Standard

Тип BIT
Принимает одно из двух значений ‘0’ или ‘1’ SIGNAL a_temp: BIT

Пакет Standard Тип BIT Принимает одно из двух значений ‘0’ или ‘1’
;
Типы данных оканчивающиеся на _VECTOR позволяют работать с массивами SIGNAL temp : BIT_VECTOR (3 DOWNTO 0) ; SIGNAL temp : bit_vector (0 TO 3) ;
Тип BOOLEAN
(false, true)
Тип INTEGER
Положительные и отрицательные целые числа SIGNAL int_tmp: INTEGER ; -- 32-битовое целое SIGNAL int_tmp1: INTEGER RANGE 0 to 255 ; -- 8 бит

Слайд 30

Другие типы из пакеты Standard

Тип NATURAL
Целое в диапазоне от 0 до 232
Тип

Другие типы из пакеты Standard Тип NATURAL Целое в диапазоне от 0
POSITIVE
Целое в диапазоне от 1 до 232
Тип CHARACTER
ASCII символы
Тип STRING
Массив символов
Тип TIME
Интервал времени с единицами измерения (ps, us, ns, ms, sec, min, hr)

Слайд 31

Стандартные библиотеки

Библиотека IEEE ;
Содержит следующие пакеты:
std_logic_1164 (тип std_logic и функции для

Стандартные библиотеки Библиотека IEEE ; Содержит следующие пакеты: std_logic_1164 (тип std_logic и
работы с ним)
std_logic_arith (арифметические функции)
std_logic_signed (арифметические операции со знаком)
std_logic_unsigned (беззнаковые арифметические операции)

Слайд 32

Типы данных из пакета std_logic_1164

Тип STD_LOGIC
9-значная логика
‘1’ – лог. 1
‘0’

Типы данных из пакета std_logic_1164 Тип STD_LOGIC 9-значная логика ‘1’ – лог.
– лог. 0
‘X’ – неопределенность
‘Z’ – выс.импеданс
‘-’ – Don’t care
Поддержка нескольких источников сигнала
Тип STD_ULOGIC
То же что и STD_LOGIC но без поддержки нескольких источников

‘H’ – слабая единица
‘L’ – слабый ноль
‘W’ – слабая неопределенность

Слайд 34

Основы языка VHDL

Моделирование цифровых систем

Основы языка VHDL Моделирование цифровых систем

Слайд 35

Основные конструкции для моделирования

Константы
Сигналы
Операторы
Присваивание сигналов
Процессы
Последовательные операторы
Переменные
Определяемые пользователем типы

Основные конструкции для моделирования Константы Сигналы Операторы Присваивание сигналов Процессы Последовательные операторы Переменные Определяемые пользователем типы

Слайд 36

Константы

Присваивают имя константе
Объявление константы
CONSTANT <имя_константы> : <тип> := <значение> ;
Константа не может

Константы Присваивают имя константе Объявление константы CONSTANT : := ; Константа не
изменять свое значение
Повышает читаемость кода
Упрощает переносимость

Слайд 37

Сигналы

Сигналы описывают физические соединения (проводники) между процессами (функциями)
Сигналы могут быть объявлены в

Сигналы Сигналы описывают физические соединения (проводники) между процессами (функциями) Сигналы могут быть
пакетах, Entity или в архитектуре

Функциональный блок MUX

сигналы

сигналы

Процесс

Функциональный блок (РЕГИСТРЫ)

Процесс

сигналы

сигналы

Слайд 38

Присваивание значение сигналам

SIGNAL temp: std_logic_vector (7 DOWNTO 0)
Присваивание всех битов:
temp <= “10101010”

Присваивание значение сигналам SIGNAL temp: std_logic_vector (7 DOWNTO 0) Присваивание всех битов:
;
temp <= x”AA” ;
Один бит:
temp(7) <= ‘1’ ;
Группа битов:
temp(7 downto 4) <= “1010” ;

Слайд 39

Присваивание сигналов

Присваивание сигналов осуществляется с помощью оператора <=
Присваивание сигнала подразумевает создание неявного

Присваивание сигналов Присваивание сигналов осуществляется с помощью оператора Присваивание сигнала подразумевает создание
процесса (функции) с элементом памяти

Слайд 40

Операторы VHDL

Операторы VHDL

Слайд 41

Сигналы для межсоединений

ENTITY simp IS PORT ( i1, i2 : IN BIT

Сигналы для межсоединений ENTITY simp IS PORT ( i1, i2 : IN
;
o: OUT BIT
) ;
END ENTITY simp ; ARCHITECTURE logic OF simp IS

int <= i1 AND i2 ; o <= NOT int ;

SIGNAL int : BIT ;

BEGIN

END ARCHITECTURE logic ;

Слайд 42

Перегрузка операторов

VHDL определяет арифметические и логические функции только для встроенных типов данных

Перегрузка операторов VHDL определяет арифметические и логические функции только для встроенных типов
(определенных в стандартных пакетах)
Как использовать такие функции с другими типами данных?
Перегрузка операторов – определение арифметических и логических функций для других типов данных
Операторы перегружаются путем определения функции с именем соответствующего оператора

Слайд 43

Функции и пакеты перегрузки операций

Пакеты содержащие следующие операторы могут быть найдены в

Функции и пакеты перегрузки операций Пакеты содержащие следующие операторы могут быть найдены
библиотеке LIBRARY IEEE
std_logic_arith (арифметические функции)
std_logic_signed (знаковые арифметические функции)
std_logic_unsigned (беззнаковые арифметические функции)
numeric_std (знаковые и беззнаковые функции)
Например пакет std_logic_unsigned определяет некоторые из этих функций
FUNCTION “+” (l: std_logic_vector; r:std_logic_vector) return std_logic_vector ;
FUNCTION “+” (l: std_logic_vector; r:INTEGER) return std_logic_vector ;
FUNCTION “+” (l: INTEGER; r:std_logic_vector) return std_logic_vector ;
FUNCTION “+” (l: std_logic_vector; r:std_logic) return std_logic_vector ;
FUNCTION “+” (l: std_logic; r:std_logic_vector) return std_logic_vector ;

Слайд 44

Использование перегруженных операторов

Library IEEE ; USE IEEE.std_logic_1164.ALL ; USE IEEE.std_logic_unsigned.ALL ;

Entity overload IS PORT

Использование перегруженных операторов Library IEEE ; USE IEEE.std_logic_1164.ALL ; USE IEEE.std_logic_unsigned.ALL ;
(

a: IN std_logic_vector (4 DOWNTO 0) ; b: IN std_logic_vector (4 DOWNTO 0) ; sum: OUT std_logic_vector (4 DOWNTO 0) ;

Слайд 45

Параллельное присваивание сигналов

Используется для присваивания значений сигналу с использованием различных выражений
Подразумевает создание

Параллельное присваивание сигналов Используется для присваивания значений сигналу с использованием различных выражений
неявного процесса, выполняемого параллельно с другими процессами
(список чувствительности такого процесса – все переменные справа от знака присваивания)
Три типа оператора параллельного присваивания:
Простой оператор присваивания
Условный оператор присваивания
Case-оператор присваивания

Слайд 46

Простой оператор присваивания

Формат: <имя_сигнала> <= <выражение> ;
Пример:

qa <= r or t

Простой оператор присваивания Формат: ; Пример: qa qb
;
qb <= ( qa and not (g xor h) ) ;

Слайд 47

Условный оператор присваивания

Формат:
Пример:

qa <=

<имя_сигнала> <= <выражение1> when <условие1> else
<выражение2>

Условный оператор присваивания Формат: Пример: qa when else when else … when
when <условие2> else

<выражениеn> when <условиеn> else
<выражениеn+1>

a WHEN sela = ‘1’ ELSE
b WHEN selb = ‘1’ ELSE
c ;

Неявный процесс

Слайд 48

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

Формат:
Пример:

WITH sel SELECT
q <= a WHEN “00”,
b

Оператор присваивания WITH Формат: Пример: WITH sel SELECT q b WHEN “01”,
WHEN “01”,
c WHEN “10”,
d WHEN OTHERS ;

WITH <выражение> SELECT
<имя_сигнала> <= <выражение1> WHEN <условие1>,
<выражение2> WHEN <условие2>,
<выражениеn> WHEN OTHERS ;

Неявный процесс

Слайд 49

Задержка в операторе присваивания

В операторе присваивания можно использовать задержку
Два типа задержек:
Инерционная задержка

Задержка в операторе присваивания В операторе присваивания можно использовать задержку Два типа
(по умолчанию)
Импульс длина которого короче указанного значения не будет передан
Пр. a <= b AFTER 10 ns ;
Транспортная задержка
любой импульс будет передан, несмотря на его длительность
Пр. a<= TRANSPORT b AFTER 10 ns ;

Слайд 50

Явное описание процесса

Оператор процесса исполняется до тех пор пока не встретит оператор

Явное описание процесса Оператор процесса исполняется до тех пор пока не встретит
WAIT или список чувствительности процесса.
Список чувствительности подобен оператору WAIT в конце процесса
Процесс может иметь несколько операторов WAIT
Процесс не может иметь единовременно и список чувствительности и оператор WAIT
Процесс содержит последовательные операторы
Параллельное исполнение
Архитектура может включать в себя несколько процессов
Все процессы исполняются параллельно

метка: PROCESS (<список_чув.>)
<объявления констант>
<объявления типов>
<объявления переменных>
BEGIN
<последовательный оператор>

<последовательный оператор>
END PROCESS ;

Слайд 51

Примеры процессов

proc1: PROCESS (a,b) BEGIN -- последовательные операторы
END PROCESS ;

proc1: PROCESS BEGIN -- последовательные операторы
WAIT ON

Примеры процессов proc1: PROCESS (a,b) BEGIN -- последовательные операторы END PROCESS ;
(a,b) ;
END PROCESS ;

Слайд 52

Последовательные операторы

Последовательные операторы
Простое присваивание сигнала
Оператор IF-THEN
Оператор CASE
Оператор цикла
Оператор WAIT

Последовательные операторы Последовательные операторы Простое присваивание сигнала Оператор IF-THEN Оператор CASE Оператор цикла Оператор WAIT

Слайд 53

Оператор IF-THEN

Формат

IF <условие> THEN
<последовательность операторов>
ELSIF <условие2> THEN
<последовательность операторов>
ELSE
<последовательность операторов>
END IF ;

PROCESS

Оператор IF-THEN Формат IF THEN ELSIF THEN ELSE END IF ; PROCESS
(sela, selb, a, b, c)
BEGIN IF sela=‘1’ THEN
q<=a ;
ELSIF selb=‘1’ THEN
q <= b ;
ELSE
q <= c ;
END IF ;
END PROCESS ;

Пример

Слайд 54

Оператор CASE

Формат

CASE <выражение> IS
WHEN <условие1> =>
<посл. операторы>
WHEN <условие2> =>
<посл. операторы>

WHEN

Оператор CASE Формат CASE IS WHEN => WHEN => … WHEN OTHERS
OTHERS => -- (опц.)
<посл. операторы>
END CASE ;

PROCESS (sela, selb, a, b, c)
BEGIN

Пример

CASE sel IS WHEN “00” => q<=a ; WHEN “01” => q<=b ; WHEN “10” => q<=c ; WHEN OTHERS => q<=d ; END CASE ;

END PROCESS ;

Слайд 55

Последовательные операторы цикла

Оператор LOOP
повторяется бесконечно пока не встретится оператор EXIT
Оператор WHILE
Выход по

Последовательные операторы цикла Оператор LOOP повторяется бесконечно пока не встретится оператор EXIT
условию в конце цикла
Оператор FOR
Цикл на основе счетчика

[метка] LOOP -- последовательные операторы NEXT метка WHEN … ; EXIT метка WHEN … ;
END LOOP ;

WHILE <условие> LOOP -- последовательные операторы
END LOOP ;

FOR <идент.> IN LOOP -- послед. операторы
END LOOP ;

Слайд 56

Оператор WAIT

WAIT ON <сигнал>
Приостанавливает исполнение до события, связанного с сигналом
WAIT ON a,b

Оператор WAIT WAIT ON Приостанавливает исполнение до события, связанного с сигналом WAIT
;
WAIT UNTIL <логическое_выражение>
Останавливает исполнение до момента, когда выражение станет истиной
WAIT UNTIL (int < 100) ;
WAIT FOR <интервал>
приостанавливает выполнение на указанный интервал
WAIT FOR 20 ns ;
Смешанный WAIT
WAIT UNTIL (a=‘1’) FOR 5 us ;

Слайд 57

Событие(Event) – любое изменение сигнала
Цикл моделирования
модельное время
Дельта-задержка
Фаза выполнения процесса
Фаза обновления сигналов
Цикл моделирования

Событие(Event) – любое изменение сигнала Цикл моделирования модельное время Дельта-задержка Фаза выполнения
заканчивается когда выполнены все процессы и обновлены все сигналы

VHDL-симуляция

Слайд 58

Эквивалентные функции

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY simp IS PORT ( a,b :

Эквивалентные функции LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY simp IS PORT
IN std_logic ; y : OUT std_logic ;
) ;
END ENTITY simp ;
ARCHITECTURE logic OF simp IS SIGNAL c : std_logic ;
BEGIN

c <= a AND b ;

y <= c ;

END ARCHITECTURE logic ;

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY simp IS PORT ( a,b : IN std_logic ; y : OUT std_logic ;
) ;
END ENTITY simp ;
ARCHITECTURE logic OF simp IS SIGNAL c : std_logic ;
BEGIN

Process1: PROCESS(a,b) BEGIN c <= a AND b ; END PROCESS process1 ;

Process2: PROCESS(c) BEGIN y <= c ; END PROCESS Process2 ;

END ARCHITECTURE logic ;

Слайд 59

Неэквивалентные функции

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY simp IS PORT ( a,b :

Неэквивалентные функции LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY simp IS PORT
IN std_logic ; y : OUT std_logic ;
) ;
END ENTITY simp ;
ARCHITECTURE logic OF simp IS SIGNAL c : std_logic ;
BEGIN

c <= a AND b ;

y <= c ;

END ARCHITECTURE logic ;

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY simp IS PORT ( a,b : IN std_logic ; y : OUT std_logic ;
) ;
END ENTITY simp ;
ARCHITECTURE logic OF simp IS SIGNAL c : std_logic ;
BEGIN
PROCESS( a, b) BEGIN

END PROCESS
END ARCHITECTURE logic ;

c <= a AND b ;

y <= c ;

Слайд 60

Объявление переменных

Переменные объявляются внутри процесса
Для присваивания используется оператор :=
Объявление переменных
VARIABLE <имя>: <Тип_данных>

Объявление переменных Переменные объявляются внутри процесса Для присваивания используется оператор := Объявление
:= <выражение> ;
VARIABLE temp: std_logic_vector (7 DOWNTO 0) ;
Обновление переменной происходит немедленно
Не вносит задержку

Слайд 61

Присваивание значений переменным

VARIABLE temp : std_logic_vector ( 7 DOWNTO 0 ) ;
Все

Присваивание значений переменным VARIABLE temp : std_logic_vector ( 7 DOWNTO 0 )
биты
temp := “10101010” ;
temp := x”AA” ;
Один бит
temp(7) := ‘1’ ;
Группа битов
temp(7 DOWNTO 4) := “1010” ;
Один бит: апостроф ‘
Несколько бит (строка): кавычки “

Слайд 62

Эквивалентные функции

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY simp IS PORT ( a,b :

Эквивалентные функции LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY simp IS PORT
IN std_logic ; y : OUT std_logic ;
) ;
END ENTITY simp ;
ARCHITECTURE logic OF simp IS SIGNAL c : std_logic ;
BEGIN

c <= a AND b ;

y <= c ;

END ARCHITECTURE logic ;

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY simp IS PORT ( a,b : IN std_logic ; y : OUT std_logic ;
) ;
END ENTITY simp ;
ARCHITECTURE logic OF simp IS SIGNAL c : std_logic ;
BEGIN
PROCESS( a, b) VARIABLE c: std_logic ; BEGIN

END PROCESS
END ARCHITECTURE logic ;

c <= a AND b ;

y <= c ;

Слайд 63

Сигналы против переменных

Сигналы против переменных

Слайд 64

Определяемые пользователем типы

Массивы Arrays
Перечислимые типы данных

Определяемые пользователем типы Массивы Arrays Перечислимые типы данных

Слайд 65

Массив (Array)

Создает двумерный тип данных
Созданный тип необходимо использовать при объявлении констант, сигналов

Массив (Array) Создает двумерный тип данных Созданный тип необходимо использовать при объявлении
или переменных такого типа
Используется для резервирования памяти и размещения тестовых векторов или данных
Объявление типа памяти
TYPE <имя_типа> IS ARRAY (<диапазон_целых>) OF
<тип_данных_элемента> ;

Слайд 66

Пример использования массива

ARCHITECTURE logic OF my_memory IS

TYPE mem IS ARRAY (0

Пример использования массива ARCHITECTURE logic OF my_memory IS TYPE mem IS ARRAY
to 63) OF std_logic_vector (7 DOWNTO 0) ; -- создается новый тип данных «массив» с именем mem который -- использует 64 адресных позиции по 8 бит каждая
SIGNAL mem_64x8_a, mem_64x8_b : mem ; -- создается 2 64x8бит массива

mem_64x8_a(12) <= x”A4” ;
mem_64_8_b(50) <= “11110000” ;

BEGIN

END ARCHITECTURE logic ;

Слайд 67

Enumerated Data Type

Позволяет перечислить все значения определяемого типа данных
Используется при определении констант,

Enumerated Data Type Позволяет перечислить все значения определяемого типа данных Используется при
сигналов или переменных этого типа
Используется для
Повышения читаемости кода
При описании конечных автоматов
Объявление перечислимого типа данных
TYPE <имя_типа> IS (перечисление значений через запятую) ;

TYPE enum IS (idle, fill, heat_w, wash, drain) ;
SIGNAL dshwshr_st : enum ;

drain_led <= ‘1’ WHEN dshwsher_st = drain ELSE ‘0’ ;

Слайд 68

Основы языка VHDL

Синтез цифровых систем

Основы языка VHDL Синтез цифровых систем

Слайд 69

RTL синтез

Process( a,b,c,d,sel ) begin case (sel) is when “00” => mux_out <=

RTL синтез Process( a,b,c,d,sel ) begin case (sel) is when “00” =>
a; when “01” => mux_out <= b; when “10” => mux_out <= c; when “11” => mux_out <= d;
end case ;

Слайд 70

Два типа синтеза процесса

Комбинаторный процесс
Список чувствительности включает все входы логических элементов
Пример
Последовательный процесс
Чувствителен

Два типа синтеза процесса Комбинаторный процесс Список чувствительности включает все входы логических
только к сигналам такирования и к управляющим сигналам
Пример

PROCESS( a,b,sel )

PROCESS( clr, clk )

Слайд 71

D-триггер на основе функции rising_edge

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY dff_b IS PORT

D-триггер на основе функции rising_edge LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY
( clk,d : IN std_logic ; q : OUT std_logic
) ;
END ENTITY dff_b ;
ARCHITECTURE rtl OF dff_b IS SIGNAL c : std_logic ;
BEGIN PROCESS(clk) BEGIN

IF rising_edge(clk) THEN

q <= d ; END IF ;
END PROCESS ;
END ARCHITECTURE logic ;

Слайд 72

D-триггер с асинхронным сбросом

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY dff_aclr IS PORT (

D-триггер с асинхронным сбросом LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY dff_aclr
d,clk,clr : IN std_logic ; q : OUT std_logic
) ;
END ENTITY dff_aclr ;
ARCHITECTURE rtl OF dff_aclr IS BEGIN PROCESS(clk) BEGIN

IF clr=‘0’ THEN q <= ‘0’ ;

q <= d ; END IF ;
END PROCESS ;
END ARCHITECTURE logic ;

ELSIF rising_edge(clk) THEN

Слайд 73

D-триггер с синхронным сбросом

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY dff_aclr IS PORT (

D-триггер с синхронным сбросом LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY dff_aclr
d,clk,clr : IN std_logic ; q : OUT std_logic
) ;
END ENTITY dff_aclr ;
ARCHITECTURE rtl OF dff_aclr IS BEGIN PROCESS(clk) BEGIN

IF rising_edge(clk) THEN

ELSE q <= d ; END IF ; END IF ;
END PROCESS ; END ARCHITECTURE logic ;

IF clr=‘0’ THEN q <= ‘0’ ;

Слайд 74

D-триггер с асинхронным сбросом и управлением синхронизацией

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ;
ENTITY dff_aclr_ena

D-триггер с асинхронным сбросом и управлением синхронизацией LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL
IS PORT ( d,clk,clr, ena : IN std_logic ; q : OUT std_logic
) ;
END ENTITY dff_aclr_ena ;
ARCHITECTURE rtl OF dff_aclr_ena IS BEGIN PROCESS(clk,clr) BEGIN

IF clr=‘0’ THEN q <= ‘0’ ;

END IF ; END IF ; END PROCESS ; END ARCHITECTURE rtl ;

ELSIF rising_edge(clk) THEN

IF ena=‘1’ THEN q <= d ;

Слайд 75

Синтез регистра

Присваивание сигнала внутри оператора IF-THEN с условием проверки сигнала тактирования приводит

Синтез регистра Присваивание сигнала внутри оператора IF-THEN с условием проверки сигнала тактирования
к синтезу регистра

PROCESS (clk)
BEGIN IF rising_edge( clk ) THEN q <= d ;
END IF ;
END PROCESS ;

Слайд 76

Синтез счетчика

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; USE IEEE.Std_logic_unsigned.ALL ;
ENTITY counter IS PORT (

Синтез счетчика LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; USE IEEE.Std_logic_unsigned.ALL ; ENTITY
clk, rst : IN std_logic ; q : OUT std_logic_vector (15 DOWNTO 0)
) ;
END ENTITY counter ;
ARCHITECTURE logic OF counter IS SIGNAL tmp_q : std_logic_vector (15 DOWNTO 0) ;
BEGIN PROCESS(clk, rst) BEGIN IF rst=‘0’ THEN tmp_q <= (OTHERS => ‘0’ ) ; ELSIF rising_edge(clk) THEN

tmp_q < = tmp_q + 1 ;

END IF ; END PROCESS ; q <= tmp_q ;
END ARCHITECTURE ;

Слайд 77

Основы языка VHDL

Структурное описание

Основы языка VHDL Структурное описание

Слайд 78

Иерархический дизайн – дизайн в нескольких файлах

Иерархический дизайн использует объявление (Declaration) и

Иерархический дизайн – дизайн в нескольких файлах Иерархический дизайн использует объявление (Declaration) и размещение (Instantiation) компонентов
размещение (Instantiation) компонентов

Слайд 79

Объявление и размещение компонентов

Объявление компонента используется для указания типов данных и портов

Объявление и размещение компонентов Объявление компонента используется для указания типов данных и
другого ENTITY

COMPONENT <имя_подключаемого_entity> PORT ( <имя_порта> : <тип_порта> <тип_данных> ; <имя_порта> : <тип_порта> <тип_данных>
) ;
END COMPONENT ;

Размещение компонента – параллельный оператор, используемый для вставки и привязки компонента в текущую архитектуру

<имя_размещения> : <имя_подключаемого_entity> PORT MAP (<имя_порта_подключаемого_entity> => <сигнал>
... <имя_порта_подключаемого_entity> => <сигнал> ) ;

Слайд 80

Объявление и размещение компонентов

LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY tollv IS PORT (

Объявление и размещение компонентов LIBRARY IEEE ; USE IEEE.Std_logic_1164.ALL ; ENTITY tollv
tclk, tcross, tnickel, tdime, tquarter : IN std_logic ; tgreen, tred : OUT Std_logic ) ; END ENTITY tollv ;
ARCHITECTURE tollv_arch OF tollv IS

COMPONENT tollc PORT ( clk, cross, nickel, dime, quarter : IN std_logic ; green, red : OUT std_logic ) ;
END COMPONENT ;

BEGIN

U1: tollc PORT MAP (clk=>tclk, cross=>tcross, nickel=>tnickel, dime=>tdime, quarter => tquarter, green => tgreen, red => red )

END ARCHITECTURE tollv_arch ;

Слайд 81

Основы языка VHDL

Дополнительные операторы языка VHDL

Основы языка VHDL Дополнительные операторы языка VHDL

Слайд 82

Оператор GENERATE

<метка_группы>: FOR <индекс> IN <диапазон> GENERATE <метка_компонента>: <имя_компонента> [ PORT MAP

Оператор GENERATE : FOR IN GENERATE : [ PORT MAP ] END
] END GENERATE ;

COMPONENT register_4 IS PORT ( data_in: IN std_logic_vector (3 DOWNTO 0) ; data_out : OUT std_logic_vector (3 DOWNTO 0) ; clk: IN std_logic ) ;
END COMPONENT ;

BEGIN

registers: for i from 0 to 3 generate Reg: register_4 port map ( data_in=>data_16_in((i+1)*4-1 downto i*4), data_out=> data_16_out ((i+1)*4-1 downto i*4), clk=>clk16 ) ; END GENERATE Registers ;

END ARCHITECTURE Registers_Arch ;

Слайд 83

Типы данных

Типы данных
Имя файла: Основы-языка-VHDL.pptx
Количество просмотров: 174
Количество скачиваний: 0