«Бог не меняет того, что (происходит) с людьми, пока они сами не изменят своих помыслов.» Коран, Сура 12:13

Проектирование цифровых систем на языках описания аппаратуры/Лекция 2

Материал из Wiki
Перейти к: навигация, поиск
Лекции ПЦСЯОА

Лекции

Практические

Доп. материалы

Заголовок
Основы языка VHDL
Автор
Ланкевич Ю.Ю.
Нижний колонтитул
Проектирование цифровых систем на языках описания аппаратуры/Лекция 2
Дополнительный нижний колонтитул
Ланкевич Ю.Ю., 10:07, 8 сентября 2020


Содержание

Слайд:Языки HDL (Hardware Description Language)

  • Проблемы проектирования СБИС:
    • несоответствие формы, в которой ставится задача (обычно задается поведение), и схемы проекта (сеть взаимосвязанных компонентов)
    • «ручной» перевод описания проекта в набор логических выражений и схему
    • работа со сложными (тысячи и более компонентов) проектами
  • Наиболее часто используемые HDL-языки: VHDL, Verilog, SystemC

Слайд: Язык VHDL

VHDL
Very high speed integration circuits (VHSIC) Hardware Description Language предложен Министерством обороны США (The United States Department of Defense) в начале 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).
  • 1076-2019 Обновление версии 1076-2008 (принят 05.09.2019, опубликован 12.2019).

Связанные стандарты:

  • 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-моделей

Описывать ЦУ можно, используя разные стили:

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

Слайд: Элементы синтаксиса языка VHDL

  • Лексические элементы:
    • идентификатор: Abc1
    • разделитель
    • ключевое (зарезервированное) слово: entity, if, then
    • литерал (десятичный, базовый, символьный, строковый, строка бит):
      • 123, 1E2, 123.4, 1.2e-3;
      • 2#1111_1100#, 10#252#;
      • ’A’, ’a’;
      • “abcdefg”; B“1010_1010_1010”
    • комментарий
  • Лексические элементы разделяются:
    • разделителями: & ( ) * + ? - . / : ; < = >
    • концами строк
    • знаками форматирования
    • составными разделителями (композиция двух смежных cпециальных символов): => ** := >=
Пример:
A <= B and C;
Здесь шесть лексических элементов "A", "<=", "B", "and", "C", ";" .
Два из шести лексических элементов являются разделителем:
  • " <= " (составной разделитель – оператор назначения сигнала);
  • " ; "

В качестве разделителей в данном примере используются пробелы, однако нет необходимости иметь разделитель между оператором " ; " и лексическим элементом "C".

Комментарий начинается с двух смежных дефисов и продолжается до конца строки. Комментарии не учитываются при моделировании VHDLописаний и синтезе схем по VHDL-описаниям.

Слайд: Элементы синтаксиса языка VHDL/ Форма Бэкуса-Наура

Для задания синтаксических конструкций языка VHDL используются так называемые формы Бэкуса-Наура, служащие для описания грамматик формальных языков. Для определения синтаксической конструкции используется выражение

   <синтаксическая конструкция>::=<определение>

Используемые фигурные скобки служат для обозначения повторения выражения, заключенного в них. Выражение может повторяться k раз (k=0,1,2, ...). При k=0 выражение отсутствует.
Вертикальная черта служит для обозначения альтернативных случаев. Например,

   letter_or_digit ::= letter|digit,

т.е. синтаксическая конструкция символ_или_число определяется как символ (letter) или цифра (digit).

В случае, например,

   choices::=choice{|choise},

когда в фигурных скобках стоит то же выражение (с символом «вертикальная черта»), это означает повторение того же выражения. В данном примере повторяется выражение «choice».

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

   return_statement::=return[expression]; 

эквивалентна записи

   return_statement::=return;|return[expression];

Например, элементы type_name и subtype_name могут рассматриваться просто как name (имя). В случае type_name подчеркивается, что это имя типа, в случае subtype_name, что это имя подтипа.

Слайд: Элементы синтаксиса языка VHDL/ Идентификаторы

Определение идентификатора

   basic_identifier ::= letter { [ underline ] letter_or_digit }

Идентификаторы употребляются как пользовательские имена и ключевые слова. Идентификатор должен начинаться с буквы (не цифры). Может употребляться кроме букв и цифр, знак подчеркивания. Два подряд идущих подчеркивания не допускаются.

   ! В VHDL-коде нет различия между прописными и строчными буквами.
   AbC7 эквивалентно aBC7,
   A_3 не эквивалентно A3.

Идентификатор не должен оканчиваться подчеркиванием.

Неправильные идентификаторы

   7AB (начинается с цифры)
   A@B (специальный символ @)
   SUM_(кончается подчеркиванием)
   PI__A (два подчеркивания подряд)

Правильные идентификаторы

   Carry_OUT
   Dim_Sum
   Count7SUB_2goX
   AaBBb

Слайд: Элементы синтаксиса языка VHDL/ Зарезервированные (ключевые) слова

Как и многие другие языки программирования, VHDL имеет ключевые (специальные) слова.
Список ключевых слов (стандарт VHDL’87)

abs access after alias all
and architecture array assert attribute
begin block body buffer bus
case component configuration constant disconnect
downto else elsif end entity
exit file for function generate
generic guarded if in inout
is label library linkage loop
map mod nand new next
nor not null of on
open or others out package
port procedure process range record
register rem report return select
severity signal subtype then to
transport type units until use
variable wait when while with
xor

В стандарт VHDL’93 добавлены следующие слова:

group impure inertial literal postponed
pure reject rol ror shared
sla sll sra srl unaffected
xnor

Слайд: Элементы синтаксиса языка VHDL/ Литералы

Литералы - константные числовые значения в языке VHDL. Десятичный литерал может быть целым, вещественным или вещественным с экспонентой.
Примеры
Целые литералы:

   21, 0, 1Е2, 3e4, 123_000.

Вещественные литералы:

   11.0, 0.0, 0.468, 3.141_592_6.

Вещественные литералы с экспонентой:

   1.23E-11, 1.0E+4, 3.024E+23.

Знак экспоненты E может быть строчным либо прописным. Подчеркивание в десятичном литерале не является значащим. Экспонента для целого литерала не должна иметь знак минус. Базовый литерал указывает на систему счисления: от двоичной до шестнадцатеричной:

Двоичная 2# 1111_1100# Все эти литералы имеют значение 252
Шестнадцатеричная 16# fc#
Шестнадцатеричная 016# 0FC#
Десятичная 10#252#
Семеричная 7# 510#

Число 16#6#E1 означает 6*16**1 – это число 96 в десятичной системесчисления: 96 = 6 × 161. Символ * – знак умножения, ** – возведение в степень. Число 2E-3 не является целым, 3e4 – это число 3 × 104

Слайд: Элементы синтаксиса языка VHDL/ Литералы

Символьный литерал формируется одним из символов (букв) между апострофами:

   'A','a','%',  (литерал - апостроф), ' ' (пробел);

'A' отличается от 'a' в случае символьного литерала.
Строковый литерал формируется как последовательность букв (возможно пустая) между двумя кавычками, употребляемыми как строковые скобки. Строковый литерал должен располагаться в одной строке. Для формирования "длинных" строковых литералов может быть употреблена операция конкатенации & (напомним, что для оператора логического И употребляется оператор AND).

Литерал "строка бит"
Литерал "строка бит" формируется как последовательность цифр 0, ... , 9, A, ... ,F (или a, ... , f) между двумя кавычками. Подчеркивание в таком литерале не является значащим.
Литерал "строка бит" может быть

   B – бинарным;
   O – восьмеричным;
   X – шестнадцатеричным.

Очевидно, вместо прописных букв B, O, X могут употребляться строчные буквы b, o, x. Длина строкового битового литерала есть число бит в последовательности, представляющей литерал. Для примера:
ниже все литералы имеют длину 12

   X"F_FF", O"7777", B"1111_1111_1111"

Примеры

   B"1010110" -- длина 7
   O"126" -- эквивалентно B"001_010_110", длина 9
   X"56" -- эквивалентно B"0101_0110", длина 8

Слайд: Операторы языка 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]... ) ] ;