Слайд 1Лекция 2
Общее понятие о языке VHDL.
Слайд 2Языки описания аппаратуры
VHDL – VHSIC (Very High Speed Integrated Circuit)
Hardware Description Language.
IEEE Std 1076, 2008 Edition
Verilog HDL – Verilog
Hardware Description Language. IEEE Std 1364, 2005 Edition
SystemVerilog, Verilog-ASM
AHDL – внутренний язык компании Altera
Abel – внутренний язык компании Xilinx
SystemC, …
IEEE – Institute of Electrical and Electronics Engineers
Слайд 3Какой язык учить?
Английский!
http://lingualeo.com
Слайд 5Декларация библиотек
Объявление библиотеки
library ;
Объявление использования
use . .
модуля>; |
use ..all;
Пример:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
Слайд 6Интерфейс объекта
Упрощенная структура декларации ENTITY
entity имя_проекта is
port (имя_сигнала: направление_передачи
тип_сигнала;
имя_сигнала: направление_передачи тип_сигнала;
…
имя_сигнала: направление_передачи тип_сигнала);
end имя_проекта;
Слайд 7Декларация портов
port
(имя_сигнала: направление_передачи тип_сигнала;
имя_сигнала: направление_передачи тип_сигнала);
Направления передачи:
in - вход
out
- выход
inout - двунаправленный
Слайд 8Пример
entity sm is
port (а, в, с: in bit;
s: out
bit);
end sm;
Слайд 9Декларация архитектуры
architecture имя_архитектуры of имя_entity is
декларация типов
декларация сигналов
декларация констант
декларация функций
декларация
процедур
декларация компонентов
begin
параллельные операторы
параллельные операторы
end имя_архитектуры;
2013
Слайд 10Некоторые правила
Имя файла должно совпадать с именем entity.
Одному интерфейсу (entity)
может быть сопоставлено несколько архитектурных тел или ни одного.
Слайд 12library ieee;
use ieee.std_logic_1164.all;
entity d_trigger is
port (
d: in std_logic;
clk: in std_logic;
q: out
std_logic);
end d_trigger;
architecture arh of d_trigger is
begin
process (clk)
begin
if (clk'event and
clk = '1')
then q <= d; end if;
end process;
end arh;
Слайд 14Предопределенные типы
INTEGER
REAL
BIT
BOOLEAN
CHARACTER
STRING
TIME
BIT_VECTOR
SEVERITY_LEVEL
FILE_OPEN_KIND
FILE_OPEN_STATUS
Слайд 15Типы BIT и BOOLEAN
BIT значения {'0', '1'}.
BOOLEAN значения {TRUE,
FALSE}.
Слайд 16Разница BIT и BOOLEAN
SELECT определена как BIT:
IF select THEN
... – неправильно
IF select = '1' THEN... – правильно
SELECT определена как BOOLEAN
IF select THEN ... – правильно
IF select = '1' THEN... – неправильно
'0' AND TRUE – недопустимо
Слайд 17Ограничение длинны типа
type базовый_тип is диапазон;
range граница_1 направление граница_2
Направление: dоwntо
и tо.
signal y: bit_vector (0 to 3);
signal z: bit_vector
(7 downto 0);
Слайд 18Тип BIT_VECTOR
Это массив битов.
ENTITY part2 IS
PORT
( x, y: IN BIT_VECTOR (3 DOWNTO 0);
sel:
IN BIT;
m : OUT BIT_VECTOR (3 DOWNTO 0));
END part2;
Слайд 19Примеры присваиваний
Типы bit и bit_vector.
x
“00010001”;
MSB, LSB
Слайд 20Операции для типа bit и integer
Самостоятельно.
Слайд 21Типы, определенные пользователем
type имя_типа is определение_типа;
type Unsigned_short is integer range
0 to 255;
type data is integer range 15 downto 0;
Слайд 22Тип std_logic
type std_ulogic is ('U', 'X', '0', '1', 'Z', 'W',
'L', 'Н', '-'};
'U' – не инициализировано (в программе вообще сигналу
не присваивались другие значения);
'X' – активное неопределенное состояние;
'0', '1' – активный ноль, активная единица;
'Z' – отключено (все источники, подключенные к связи в высокоимпедансном состоянии)
'W' – слабое неопределенное состояние;
'L‘, 'H' – слабый ноль, слабая единица;
'-' – не важно (выбор предоставляется компилятору).
Слайд 23Использование std_logic
library IEEE;
use IEEE.std_logic_1164.all;
Расположение библиотеки:
C:\altera\91\quartus\libraries\vhdl\ieee\std_1164.vhd
Слайд 24Значения для комбинаций сигналов типа std_logic
Слайд 25BIT против STD_LOGIC
Оба типа – стандартные, поддерживаются всеми системами проектирования.
std_logic
поддерживает Z-состояние, которое может синтезироваться.
std_logic поддерживает «слабые» и «сильные» сигналы,
что необходимо при моделировании.
Слайд 26Другие типы, определенные пользователем
Типы, полученные из STD_LOGIC
UNSIGNED – тип для
представления беззнаковых чисел.
SIGNED – тип для представления знаковых чисел.
Определяются как
массивы типа STD_LOGIC
Описаны в библиотеке numeric_std
Слайд 27INTEGER vs SIGNED
INTEGER – число, SIGNED – вектор.
Оба типа
обрабатываются как знаковые числа.
Оба типа синтезируются в схему.
Слайд 29Преобразование типов
TO_INTEGER - преобразование UNSIGNED или SIGNED в INTEGER.
TO_UNSIGNED –
преобразование неотрицательного INTEGER в вектор типа UNSIGNED заданного размера.
TO_SIGNED –
преобразование неотрицательного INTEGER в вектор типа SIGNED заданного размера.
Слайд 31Десятичные литералы
[.] []
Целое:
21, 0, 1Е2, 3е4, 452_150
Вещественное:
11.0,
0.0, 0.476, 3.14_15_926
Вещественное с экспонентой:
1.34Е-12, 1.0Е+6, 3.042е+15
Слайд 32Базовые литералы (13.4.2)
#[] #[]
Базис (система счисления) –
целое число.
Слайд 33Литералы «строка бит»
””
Базис: В – бинарный, О –
восьмиричный,
Х – шестнадцатиричный.
B”101010”, b”1001_100”
O”126”, o”236”
X”34f”, x”FC05”
Слайд 34Разница между строкой бит и базовым литералом
Базовый литерал – число,
записанное в определенном базисе.
Строка бит – совокупность отдельных битов, не
связанных в единое целое.
B”01001000” ≠ 2#0100_1000#
Слайд 35Константа
constant список_констант: тип :=выражение;
constant PI: real:= 3.14159;
constant WIDTH: integer:= 32;
constant
DEFAULT: bit_vector (0 to 3):= "0101";
Слайд 36Сигнал
signal – это информация, передаваемая между модулями проекта или представляющая
входные и выходные данные проектируемого устройства
signal список_сигналов: тип:= начальное_значение
Слайд 37signal CLK, RESETn: bit;
signal COUNTER: integer range 0 to 31;
signal
INSTRUCTION: bit_vector (15 downto 0);
Присваивание значений:
CLK
+ 2;
Слайд 38Переменная
variable – это вспомогательная информационная единица, используемая для описания внутренних
операций в программных блоках
variable список_переменных: тип := начальное_значение
variable ROM:
integer range 0 to 15;
variable count: positive:= 100;
variable a, b, c, d: bit:= '1';
Присваивание значений:
ROM:=10;
Слайд 39Атрибуты сигналов
Атрибуты записываются в следующем формате:
'
Слайд 42Массивы
type имя_типа is array (диапазон_значений) of тип_елементов_массива
type ROM_Array is array (0 to 31) of std_logic_vector(7 downto 0);
Слайд 43Декларация объектов типа массив
signal ROM : ROM_Array;
constant Content: ROM_Array:=
(
0 => "00000001",
1 => "00000010",
2 => "00000011",
. . .
14 => "00001111",
others => "11111111");
Слайд 44Обращение к элементам массива
имя_массива (индекс_элемента)
имя_массива (индекс_элемента to индекс_элемента)
имя_массива (индекс_элемента downto
индекс_элемента)
Пример обращения к элементам массива
memory (5)
byte (7)
Слайд 45Обращение к элементам массива
Обращение к нескольким элементам:
memory (5 to 7)
byte (7 downto 5)
Обращение к элементу многомерного массива:
ram_instance (2,
3) := 5;
Слайд 46Конкатенация элементов массива
а:= "1001";
b
– строки или битовые вектора
а – переменная, b – сигнал.
Слайд 47Операции сдвига
имя_массива символ_операции_сдвига целое
Логические сдвиги влево и вправо sll, srl,
Арифметические операции сдвига влево и вправо sla,sra,
Циклические сдвиги влево
и вправо rol, rоr.
Слайд 49Внеклассное чтение
И.Каршенбойм Краткий курс HDL-кодирования. Часть 3. О написании кода
«вообще»./Компоненты и технологии, №7.- 2008г.
http://iosifk.narod.ru/hdl_coding/hdl_coding_5_kit_7_08.pdf
http://lifehacker.ru