1. 3. Типы данных VHDL
Языки описания аппаратуры
Хаханова И.В, каф.АПВТ,
ХНУРЭ, e-mail: 1
hahanova@mail.ru 09.02.2011
2. Тема: Создание VHDL-моделей
цифровых устройств
Цель лекции: Изучить основные синтаксические
правила записи идентификаторов и данных;
способы представления скалярных данных в
проектируемым моделях.
Содержание:
1. Лексические элементы языка VHDL
2. Классификация типов
3. Определение типа и подтипа
4. Дискретные типы данных. Integer
5. Дискретные типы данных. Типы перечисления
6. Вещественные. Real
7. Физические
8. Стандартная логика Standart logic
9. Массивы
10. Бит-вектора и строки
11. Операторы VHDL
2
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
3. Литература
1. Хаханов В.И., Хаханова И.В. VHDL + Verilog
= Синтез за минуты, Харьков: ООО
«Компания СМИТ» 2007. – 264 с.
2. Семенец В.В, Хаханова И.В., Хаханов В.И.
Проектирование цифровых систем с
использованием языка VHDL, Харьков, 2003.
– 492 с.
3
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
4. 1. Лексические элементы языка VHDL (1)
Комментарии
В VHDL комментарии начинаются с --
--a descriptive comment
Идентификаторы
могут содержать символы 'A' – 'Z' и 'a' – 'z', цифры ('0'–'9'), символ
подчеркивания ('_')
должны начинаться с буквы
не могут заканчиваться символом подчеркивания
не могут содержать два рядом стоящих символа подчеркивания
Правильные идентификаторы
A X0 counter Next_Value
Неправильные идентификаторы
last@value 5bit_counter
_A0 A0_ Clock__pulse
4
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
5. 1. Лексические элементы языка VHDL (2)
Расширенные идентификаторы
Реализованы для возможности перенесения информации между
различными инструментами проектирования, использующие
другие правила для записи идентификаторов.
data bus global.clock 923 d#1
Такие идентификаторы чувствительны к регистру.
Числа
230 148 | 23.1 0.0 3.14159 | 46E5
С указанием системы счисления:
253: 2#11111101# 16#FD# 16#0fd# 8#0375#
0.5: 2#0.100# 8#0.4# 12#0.6#
Допускается использование подчеркивания
123_456 3.141_592_6 2#1111_1100_0000_0000#
5
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
6. 1. Лексические элементы языка VHDL (3)
Символы– это любые печатные элементы.
Записываются с помощью одинарных
кавычек:
'A' 'z' ','
''' символ одинарная кавычка
' ' пробел
Строки:
"A string"
"" – пустая строка
"If a string will not fit on one line,"
&"then we can break it into parts on separate lines."
6
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
7. 1. Лексические элементы языка VHDL (4)
Битовые строки – строки цифр, заключенные
в двойные кавычки. Перед строкой стоит
символ, обозначающий систему счисления.
Может быть:
B или b – для двоичной системы
O или o – для восьмеричной системы
X или x – для шестнадцатеричной системы
Например:
B"0100011" B"10" b"1111_0010_0001"
O"372" (B"001_111_010")
o"00" (b"000_000")
X"FA" (B"1111_1010")
x"oc" (B"0000_1101")
7
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
8. 2. Классификация типов данных.
Четыре класса типов данных
скалярные (scalar types) – не содержат
подэлементов;
сложные (composite types) – состоят из
подэлементов;
доступа (access types) – обеспечивают
доступ к объектам заданного типа
(указатели);
файлы (files) – обеспечивают доступ к
объектам , содержащим
последовательность заданного типа.
8
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
9. 2. Классификация типов данных
Типы данных
Скалярные Типы Сложные
Файлы
типы доступа типы
с плавающей физические массивы записи
точкой типы (array) (record)
целые типы массивы с массивы с
типы перечесления real time неограниченным ограниченным
размером размером
integer severity_level
bit_vector
character
boolean string
bit
9
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
10. 3. Определение типа
Синтаксис описания типа:
type identifier is type_definition;
где, identifier – имя типа, type_definition –
описание типа.
Например,
type apples is range 0 to 100;
type oranges is range 0 to 100;
Нельзя присвоить значения типа apples
переменной oranges, так как это разные
типы данных.
10
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
11. 3. Описание подтипа
Подтип (subtype) содержит сокращенное множество значений
базового типа.
Синтаксис:
subtype identifier is name [range expression (to||downto)
expression];
где identifier – имя подтипа, name – имя базового типа.
Например:
subtype small_in is integer range -128 to 127;
В данном случае можно смешивать значения подтипа и базового типа.
signal deviation: small_int;
signal adjusment: integer;
deviation <= deviation + adjustment;
Нельзя переменной подтипа присваивать значения базового типа, если они
выходят за его диапазон.
11
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
12. 4. Дискретные типы данных: Integer
Диапазон: - 2 147 483 647 — 2 147 483 647 (-231+1 – +231-1)
Можно создать тип, задав диапазон следующим образом:
range simple_expression (to || downto) simple_expression
Например:
type day_of_month is range 0 to 31;
type year is range 0 to 2100;
Это два различных типа. Поэтому для переменных:
signal today: day_of_month:=9; signal start_year:=1987;
нельзя выполнить следующее присваивание:
[ start_year <= today; ]
В стандарте VHDL есть два предопределенных подтипа целого
типа:
sybtype natural is integer range 0 to highest integer;
subtype positive is integer range 1 to highest integer;
12
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
13. 4. Дискретные типы данных:
Типы перечисления
Синтаксис:
(( identifier|character_literal) {,...})
Например:
type alu_function is (disable, pass, add, substract, multiply,
divide);
type octal_digit is ('0', '1', '2', '3', '4', '5', '6', '7');
variable alu_op:alu_fuction;
variable last_digit:octal_digit:='0';
alu_op:=subtract; last_digit:='7';
Существует несколько предопределенных типов перечисления:
type severiti_level is (note, warring, error, failure);
type file_open_status is (open_ok, status_error, name_error,
ode_error);
type file_open_kind is (read_mode, write_mode, append_mode);
13
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
14. 4. Дискретные типы данных.
Тип перечисления Character (1)
Тип перечисления, имеющий три группы ASCII
символов:
– стандартное множество управляющих символов,
представленных буквенным обозначением;
– стандартное множество символов;
– расширенное множество, представленное символами
или обозначениями, состоящими из первой буквы с и
трех десятичных чисел, соответствующих ASCII
коду символа.(например, C128, C147):
Пример использования переменных типа character:
signal cmd_char, terminator: character;
...
cmd_char <= 'P';
terminator <= cr;
14
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
16. 4. Дискретные типы данных.
Тип перечисления SEVERITY_LEVEL
SEVERITY_LEVEL – тип перечисления,
содержащий четыре значения: NOTE,
WARNING, ERROR и FAILURE и
представляющий уровень серьезности
ошибки при использовании операторов
контроля.
Синтаксис:
type SEVERITY_LEVEL is
(NOTE, WARNING, ERROR,
FAILURE);
16
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
17. 4. Дискретные типы данных.
Тип перечисления Boolean
Синтаксис:
type boolean is (false, true);
Например
Операции Результат
123=123 'A'='A' 7 ns=7 ns true
123=256 'A'='z' 7 ns=2 ns false
Операции "<", "<=", ">", "=>" могут быть применены
к типам, имеющим порядок, включая все скалярные
типы.
Логические операторы and, or, nand, nor, xor, xnor и
not применимы к операндам булевого типа и
производят результат булевого типа.
17
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
18. 4. Дискретные типы данных.
Тип перечисления bit
Описание:
type bit is ('0','1');
Логические операторы могут быть применены к
значениям типа бит.
Например,
'0' and '1' = '0', '1' xor '1' ='0'.
Различие между типами bit и boolean:
boolean используется для описания абстрактных
моделей
bit – для моделей аппаратно-логического уровня.
18
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
19. 5. Вещественный тип данных Real
Диапазон real: от -1.0Е+38 до +1.0Е+38
Можно создать новый тип, задавая границы диапазона:
range simple_expresion (to||downto) simple_expression;
Например,
type input_level is range -10.0 to +10.0;
type probability is range 0.0 to 1.0;
По умолчанию переменные и сигналы типа
инициализируются крайним левым значением
диапазона. Например, следующий сигнал после
инициализации будет равна -10.0:
signal input_A: input_level;
19
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
20. 6. Физические типы данных
Синтаксис физического типа:
range simple_expression (to||downto) simple_expression
units
identifier;
{ identifier=physical_literal;}
end units [identifier]
Например, электрическое сопротивление
type resistance is range 0 to 1E9
units
ohm; -- первичные единицы измерения
kohm=1000 ohm; -- вторичные единицы измерения
Mohm=1000 kohm; -- вторичные единицы измерения
end units resistance;
20
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
21. 6. Физические типы данных. Time
Предопределенный физический тип.
Используется для описания временных параметров.
Синтаксис:
type time is range implementetion defined
units
fs;
ps=1000 fs; По умолчанию первичная
ns=1000 ps; единица измерения fs
us=1000 ns; является пределом
ms=1000 us; разрешения, который может
sec=1000 ms; быть использован при
создании моделей.
min=60 sec; Промежуток времени, меньше
hr=60 min; предела разрешения,
end units; округляется до нуля.
21
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
22. Замечания по использованию типов
Если из контекста неясно, какой тип имеет значение,
то тип указывается явно перед данными, которые
берутся в скобки.
Например,
type logic_level is (unknow, low, undriven, high);
type system_state is (unknown, ready, busy);
logic_level'(unknown), system_state'(unknown)
Преобразования типов между типами integer и
floating point
real(123) integer(3.6)
При преобразовании real в integer выполняется
округление числа в сторону ближайшего целого.
22
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
24. Массивы (1)
Синтаксис:
type array_type_name is array index_range of element_type;
signal array_name: array_type_name [ := initial_values ];
Например,
type SHORT_WORD is array (15 downto 0) of bit;
signal DATA_WORD: SHORT_WORD;
variable ALT_WORD: SHORT_WORD :=
"0101010101010101";
constant ONE_WORD: SHORTS-WORD := (others => '1');
Многомерный массив:
type matrix4x3 is array (1 to 4, 1 to 3) of integer;
variable matrixA: matrix4x3 := ((1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11,
12));
Массив с неопределенным размером.
type intvec is array (natural range <>) of integer;
signal intvec5: intvec(1 to 5) := (3,2,6,8,1)
24
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
25. Массивы (2)
Для индексов массива используется тип
перечисления:
type controller_state is (initial, idle, active, error);
type state_counts is array (idle to error) of natural;
или
type state_counts is array (controller_state range idle to
error) of natural;
Если массив индексируется всем диапазоном типа
индексов, то интервал указывать необязательно:
subtype coeff_ram_address is integer range 0 to 63;
type coeff_array is array (coeff_ram_address) of real;
25
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
26. Бит-векторы и строки
Предопределенные массивы с неограниченным
размером:
type bit_vector is array (natural range <>) of bit;
type string is array (positive range <>) of character;
subtype SHORT_WORD is bit_vector (15 downto 0);
Например,
constant stringi: string(1 to 29) := "This string is 29
characters."
constant A : bit_vector(0 to 5) := "101011";
Записи ('1', '0', '1', '1', '0') и "10110" – эквивалентны.
26
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
27. Тип Record
Запись (Record) – это сложный тип данных, состоящий из
элементов различных типов. Каждый такой элемент
идентифицируется своим собственным именем.
Синтаксис:
record
identifier {,...}: subtype_indication;ы
{...}
end record [identifier];
Пример:
type time_stamp is record
seconds:integer range 0 to 59;
minutes: integer range 0 to 59;
hours: integer range 0 to 23;
end record time_stamp;
signal sample_time, current_time: time_stamp;
...
current_time.hour <= sample_time.hour;
27
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
28. Операторы VHDL (1)
Семь классов операторов:
1. Логические операторы: and, or, nand, nor, xor,
xnor.
2. Операторы отношения: =, /=, <, <=, >, >=.
3. Операторы сдвига: sll, srl, sla, sra, rol, ror.
4. Операторы сложения: + , - , & , (конкатенация).
5. Одинарные знаковые операторы: + , -.
6. Операторы умножения: *, / , mod, rem.
7. Смешанные операторы: not, abs, **.
Операторы из 7-го класса имеют самый высокий
приоритет и обрабатываются первыми, а 1-го класса –
самый низкий приоритет. Операторы одного класса
имеют одинаковый приоритет и обрабатываются в
выражении по порядку слева направо.
28
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
29. Операторы VHDL (2)
Например,
(A & not B or C ror 2 and D) = "110010«
Операторы обрабатываются в следующем порядке:
not, &, ror, or, and, =
Пусть А = "110", B = "111", C = "011000", и D =
"111011", тогда:
not B = "000" (побитовое дополнение)
A ¬ B = " 110000" (конкатенация)
C ror 2 = "000110" (сдвиг вправо на 2 разряда)
(A & not B) or (C ror 2) = " 110110 (побитовое "или")
(A ¬ B or C ror 2) and D = " 110010" (побитовое
"и")
[(A ¬ B or C ror 2 and D) = " 110010"] = TRUE (с
помощью скобок производится проверка на
равенство левой и правой частей и результат –
ИСТИНА).
29
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
30. Операторы VHDL (3)
A sll 2 – "01010100" (логический сдвиг влево, с заполнением
'0')
A srl 3 – "00010010" (логический сдвиг вправо, с заполнением
'0')
A sla 3 – "10101111" (арифметический сдвиг влево, с
заполнением '1')
A sra 2 – "11100101" (арифметический сдвиг вправо, с
заполнением '1')
A rol 3 – "10101100" (циклический сдвиг влево)
A ror 5 – "10101100" (циклический сдвиг вправо)
Оператор вида A rem B находит остаток от деления А на В.
Результат операции A mod B имеет тот же знак, что и B, а
абсолютное значение – меньше чем B. Например,
5 rem 3 = 2, (-5) rem 3 = -2, 5 rem (-3) = 2, (-5) rem (-3) = -
2
5 mod 3=2, (-5) mod 3=1, 5 mod (-3) = -1, (-5) mod (-3) =
-2
30
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
31. Стандартная логика
В пакете str_logic_1164 библиотеки IEEE определен
тип:
type std_ulogic is
('U', -- Неинициализированный
'X', -- Сильное неизвестное
'0', -- Сильный 0
'1', -- Сильный 1
'Z', -- Высокий импеданс
'W', -- Слабое неизвестное
'L', -- Слабый 0
'H', -- Слабая1
'-‘), -- Don't Care
31
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
32. Перегрузка операторов для
стандартной логики
Операторы из пакета std_logic_1164
Перегружаемые Тип данных Тип данных Тип данных
операторы операнда a операнда b результата
std_logic_vector
not a Тот же
std_logic
a and b
a or b
a xor b std_logic_vector
Тот же Тот же
a nand b std_logic
a nor b
a xnor b
32
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
33. Операторы для типа std_logic
Пакеты библиотеки IEEE для работы с
данными типов std_logic и
std_logic_vector:
Std_logic_arith
Std_logic_unsigned
Std_logic_signed
33
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
34. Пакет: Std_logic_arith
Функция преобразования целого
значения в вектор std_logic_vector
function
CONV_STD_LOGIC_VECTOR(ARG:
INTEGER; SIZE: INTEGER) return
STD_LOGIC_VECTOR;
34
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
35. Std_logic_unsigned
Рассматривает данные std_logic_vector как
беззнаковое число:
Функция преобразования значения std_logic_vector в
integer:
function CONV_INTEGER(ARG: STD_LOGIC_VECTOR)
return INTEGER;
Переопределены операторы сравнения для типа
std_logic_vector
Переопределены арифметические операторы для
типа std_logic_vector: +, -, *
Функции логического сдвига:
function SHL(ARG:STD_LOGIC_VECTOR;COUNT:
STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
function SHR(ARG:STD_LOGIC_VECTOR;COUNT:
STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
35
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
36. Std_logic_signed
Рассматривает данные std_logic_vector как знаковое
число, старший разряд соответствует знаку:
Функция преобразования значения std_logic_vector в
integer:
CONV_INTEGER
Переопределены операторы сравнения для типа
std_logic_vector
Переопределены арифметические операторы для
типа std_logic_vector: +, -, *
Функции логического сдвига:
SHL и SHR
Модуль числа
function "ABS"(L: STD_LOGIC_VECTOR) return
STD_LOGIC_VECTOR;
36
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
37. Выводы
Язык VHDL не чувствителен к
регистру. Его идентификаторы должны
начинаться с буквы и заканчиваться
буквой или цифрой.
В VHDL определены четыре класса
типов данных:
скалярные (scalar types),
сложные (composite types),
доступа (access types),
файлы (files).
37
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
38. Контрольные вопросы и задания
1. Какие из следующих идентификаторв являются правильными с точки
зрения языка VHDL? Какие ошибки содержаться в некорректных
идентификаторах?
a) last_item b) prev item c) value-1 d) buffer
e) element#5 f) _control g) 93_999 h) entry_
2. Какие из следующих идентификаторов корректны для VHDL-93?
a) ONE b) /_^C/ c)_VAL d) VAL_1
e) 123 f) &D FF-* g) 12BIT h) OUT
3. Запишите следующие десятичные числа в шестнадцатеричной форме.
1 34 256.0 0.5
4. Каким десятичным числам соответствуют следующие записи?
8#14# 2#1000_0100# 16#2C#
2.5E5 2#1#E5 2#0.101#
5. В чем разница между двумя следующими записями: 16#23DF# и
16"23DF"?
6. Записать следующие битовые строки в двоичной системе счисления.
O"747" O"277" O"1_345"
X"F2" X"0014" X"0000_0001"
38
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
39. Задания для самостоятельной работы
1. Для каждого из следующих выражений определить является ли оно
синтаксически правильным. Если да, то определить его значение.
2*3+6/4 3 + -4
“cat”&character(‘0’) true and x and not t or z
B”101110” sll 3 B”100010” sra 2 & X”2C”
2. Выполнены декларации сигналов:
SIGNAL a : BIT := '1';
SIGNAL b : BIT_VECTOR (3 DOWNTO 0) := "1100";
SIGNAL c : BIT_VECTOR (3 DOWNTO 0) := "0010";
SIGNAL d : BIT_VECTOR (7 DOWNTO 0);
SIGNAL e : INTEGER RANGE 0 TO 255;
SIGNAL f : INTEGER RANGE -128 TO 127;
Вычислить значения операторов
x1 <= a & c; -> x1 <= ________
x2 <= c & b; -> x2 <= ________
x3 <= b XOR c; -> x3 <= ________
x4 <= a NOR b(3); -> x4 <= ________
x5 <= b sll 2; -> x5 <= ________
x6 <= b sla 2; -> x6 <= ________
x7 <= b rol 2; -> x7 <= ________
x8 <= a AND NOT b(0) AND NOT c(1); -> x8 <= ________
d <= (5=>'0', OTHERS=>'1'); -> d <= ________
39
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
40. Задания для самостоятельной работы
1. Среди записанных ниже операторов есть правильные и неправильные.
Определить какие из них какие.
b(0) AND a
a + d(7)
NOT b XNOR c
c+d
e-f
b sra 1
c srl -2
f ror 3
e*3
5**5
f/4
e/3
d <= c
d(6 DOWNTO 3) <= b
e <= d
f <= 100
40
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
41. Задания для самостоятельной работы
1. Записать VHDL-описание следующей комбинационной схемы,
используя параллельные операторы. Каждый элемент имеет
задержку 5 ns, за исключением инвертора, имеющего задержку
2 ns.
2. Разработать TestBench для VHDL-модели, созданной в
предыдущей задаче. На входы {A, B, C, D} подать следующий
входные наборы:0000, 0101, 1111, 1010. Определить время
между присвоением входных тестовых сигналов исходя из
максимальной задержки схемы.
A
B E
C
D
A
F Z
B
C
41
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
42. Описать интерфейс, используя типы данных std_logic или
std_logic_vector, который содержит порты:
addr: 1Zbit address input
wra: 1-bit write-enable control signal
oen: l-bit output-enable control signal
data: 8-bit bidirectional data bus
Пусть 10 разрядный сигнал имеет следующий тип данных:
std_logic_vector(9 downto 0). Какое значение получит сигнал в
результате выполнения операторов:
a) a <= (others=>’l’) ;
b) a <= (1|3|5|7|9=>’1’, others=>’O’);
c) a <= (9|7|2=>’1’, 6=>’0’, 0 = > ’ l ’ , 1|5|8=>’0’, 3|4=>’0’);
Следующие строки имеют тип std_logic_vector. Являются ли
следующие операции синтаксически корректными? Если да, то чему
равен результат операции?
a) “01l0” > “1001”
b) “01l0” > “0001001”
c) 2#1010# > “1010”
d) 1010 > “1010”
42
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
43. Являются ли следующие операторы присвоения синтаксически корректными?
Если нет, то использовать соответствующую функцию преобразования, чтобы
исправить ситуацию.
library ieee ;
use ieee.std_logic_1164.all;
...
signal sl, s2, s3, s4, s5, s6, s7: std_logic_vector(3 downto 0);
signal ul, u2, u3, u4, u5, u6, u7: unsigned(3 downto 0);
signal sg: signed(3 downto 0) ;
U1 <= 2#0001#;
u2 <= u3 and u4;
U5 <= sl + 1;
u6 <= u3 -+ u4 + 3;
u7 <= (others=>’l’>;
s2 <= s3 + s4 -1;
s5 <= (others=>’l’);
s6 <= u3 and u4;
sg <= u3 - 1;
s7 <= not sg;
43
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
44. Задание
1. Записать VHDL-код для устройства
вычитания, используя логические
уравнения.
2. Записать VHDL-код для 4-разрядного
устройства вычитания, используя
модуль, созданный в предыдущей
задаче, как компонент.
44
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011
45. Задания для самостоятельной работы
1. Система A содержит три подсистемы: B, C и D; восемь линий TL1 – TL8.
Какое из следующих утверждений справедливо и почему?
- Все линии(от TL1 до TL8) являются интерфейсом системы A.
- Не допускается использование одной и той же линии одновременно в качестве
части системы и модуля, как например линия TL2
-TL4 входит в интерфейс модулей B и D, и не принадлежит интерфейсу системы
А
- Все линии TL1 до TL8 доступны вне системы A.
2. Описать интерфейс системы А и интерфейсы модулей B, C и D.
3. Разработать структурную модель системы А, используя B, C и D как
компоненты без их реализации.
45
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011