ПЦУСБ/Лекция 2
Материал из Wiki
< ПЦУСБ
- Заголовок
- Основы языка VHDL
- Автор
- Авдеев Н.А.
- Нижний колонтитул
- ПЦУСБ/Лекция 2
- Дополнительный нижний колонтитул
- Авдеев Н.А., 17:52, 15 сентября 2013
Слайд: Языки HDL (Hardware Description Language)
- Проблемы проектирования СБИС:
- несоответствие формы, в которой ставится задача (обычно задается поведение), и схемы проекта (сеть взаимосвязанных компонентов)
- «ручной» перевод описания проекта в набор логических выражений и схему
- работа со сложными (тысячи и более компонентов) проектами
- Наиболее часто используемые HDL-языки: VHDL, Verilog, Abel
Слайд: Язык VHDL
- VHDL
- Very high speed integration circuits (VHSIC) Hardware Description Language предложен DoD USA в начале 80-х:
- Первые симуляторы появились в начале 90-х
- ПО для ПК – в середине 90-х
- Основное применение сейчас – PLD, FPGA, разработка заказных СБИС
Слайд: Стандарты языка VHDL
Ревизии языка: IEEE Standard VHDL Language Reference Manual
- 1076-1987 Первая версия стандарта
- 1076-1993 (ISBN 1-55937-376-8) Значительные улучшения после нескольких лет использования. Наиболее используемая и поддерживаемая САПР версия.
- ГОСТ Р 50754-95 Язык описания аппаратуры цифровых систем VHDL. Описание языка
- 1076-2000 Небольшие изменения. Предложен защищенный тип (protected).
- 1076-2002 Небольшие изменения
- 1076-2008 Существенные изменения (опубликован 2009-01-26).
Связанные стандарты:
- IEEE 1076.1 VHDL Analog and Mixed-Signal (VHDL-AMS)
- IEEE 1076.1.1 VHDL-AMS Standard Packages (stdpkgs)
- IEEE 1076.2 VHDL Math Package (math)
- IEEE 1076.3 VHDL Synthesis Package (vhdlsynth)
- IEEE 1076.3 VHDL Synthesis Package - Floating Point (fphdl)
- IEEE 1076.4 Timing (VHDL Initiative Towards ASIC Libraries: vital)
- IEEE 1076.6 VHDL Register Transfer Level Synthesis, 1998 – синтезируемое подмножество VHDL
- IEEE 1164 VHDL Multivalue Logic (std_logic_1164) Packages
Слайд: Для чего используется VHDL?
- описание поведения цифровых устройств во времени и при изменении входных воздействий;
- описание структуры цифровых устройств с различной степенью детализации (на системном и блочном уровнях, на уровне регистровых передач, на уровне вентилей);
- моделирование цифровых устройств;
- описание тестовых воздействий при моделировании устройств;
- автоматизации преобразования исходного описания схемы в описание на более низком уровне (вплоть до вентильного).
Слайд: Преимущества VHDL-проекта
- Проектирование больших ЦУ
- объединяет структуру ЦУ и алгоритм функционирования
- самодокументированность
- высокая надежность (быстрый поиск ошибок синтаксиса)
- универсальность и переносимость (произвольная элементая база)
- следовательно долгоживущий (гибкий) проект
- поддержка всеми САПР
Слайд: Стили VHDL-моделей :step
Описывать ЦУ можно, используя разные стили:
- поведенческий стиль, при котором для описания проекта используются причинно-следственные связи между событиями на входах устройства и событиями на его выходах (без уточнения структуры);
- структурный стиль, при котором устройство представляется в виде иерархии взаимосвязанных простых устройств (подобно стилю, принятому в схемотехнике);
- потоковый стиль описания устройства, основанный на использовании логических уравнений, каждое из которых преобразует один или несколько входных информационных потоков в выходные потоки.
Слайд: Элементы синтаксиса языка VHDL
- Лексические элементы:
- идентификатор: Abc1
- разделитель
- ключевое (зарезервированное) слово: entity, if, then
- литерал (десятичный, базовый, символьный, строковый, строка бит):
- 123, 1E2, 123.4, 1.2e-3;
- 2#1111_1100#, 10#252#;
- ’A’, ’a’;
- “abcdefg”; B“1010_1010_1010”
- комментарий
- Лексические элементы разделяются:
- разделителями: & ( ) * + ? - . / : ; < = >
- концами строк
- знаками форматирования
- составными разделителями: => ** := >=
Пример:
A <= B and C;
Слайд: Операторы языка VHDL
Приоритет | Классы операторов |
Операторы |
---|---|---|
0 (низкий) | Логические | and, or, nand, nor, xor, xnor |
1 | Отношения | =, <, >, <=, >=, /= |
2 | Сдвиги | sll, srl, sla, sra, rol, ror |
3 | Сложение | +, –, & |
4 | Унарные | +, – |
5 | Умножение | *, /, mod, rem |
6 (высокий) | Вспомогательные | **, abs, not |
Слайд: Структура VHDL программы
Описание системы на VHDL реализуется в двух основных частях:
Подключение библиотеки IEEE и пакета std_logic_1164 из неё. | library ieee; use ieee.std_logic_1164.all; |
интерфейс (entity) – описание взаимодействия между системой и ее окружением |
entity block2 is port ( x : in std_logic_vector(2 downto 0); y : out std_logic_vector(1 downto 0)); end block2; |
архитектура (architecture) – описание поведения (функциональности) системы | architecture beh of block2 is begin -- beh y(0) <= (not x(2) and not x(1)) or (x(1) and not x(0)); y(1) <= not x(1) and not x(0); end beh; |
Слайд: Оператор присваивания when..else
architecture tabl of block1 is begin -- комментарий y <= "11" when x = "000" else "01" when x = "001" else "01" when x = "010" and x = "110" else "00"; end tabl; * важен порядок, срабатывает первое верное условие
Слайд: Типы сигналов и портов
- стандартные (библиотека/пакет standard)
- bit (bit_vector): 0, 1
- boolean (boolean_vectorVHDL`08): true, false
- integer (INTEGER_VECTORVHDL`08): -2147483648 to 2147483647
- natural: 0 to 2147483647
- real (REAL_VECTORVHDL`08): -1.0E308 to 1.0E308
- TIME (TIME_VECTORVHDL`08): -2147483647 to 2147483647 units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; sec = 1000 ms; min = 60 sec; hr = 60 min; end units;
- character, string и др.
- библиотека std_logic_1164
- std_ulogic (std_ulogic_vector)
- std_logic (std_logic_vector)
- библиотека numeric_std
- signed
- unsigned
Слайд: Тип std_logic (std_logic_vector)
Сигнал типа std_logic может принимать значения:
- 'U': Не инициализировано (ещё не было задано)
- 'X': Неопределённое значение
- '0': Логический 0
- '1': Логическая 1
- 'Z': Высокий импеданс (третье состояние)
- 'W': Слабая неопределённость (слабый 'X')
- 'L': Слабый '0'
- 'H': Слабая '1'
- '–': Don't care.
Особенности:
- является промышленным стандартом (стандарт IEEE)
- поддерживается всеми САПР
- входит в библиотеку std_logic_1164
- данные значения соответствуют и типам signed и unsigned из библиотеки numeric_std
Оператор port map
instantiation_label : component_name port map (port list);
instantiation_label : [ component ] component_name | entity entity_name [ ( architecture_identifier ) ] | configuration configuration_name [ generic map ( generic_association_list ) ] [ port map ( [ port_name => ] signal_name [, [ port_name => ] signal_name]... ) ] ;