SlideShare a Scribd company logo
Куланов В.А.
[v.kulanov@csn.khai.edu]
Атрибуты в языке VHDL
«Технологии проектирования
компьютерных систем»
Атрибуты. Введение
Атрибуты – это скаляры, отражающие некоторые
свойства объектов
АТРИБУТЫ
Предопределенные Пользовательские
Атрибуты типов
Атрибуты сигналов
Атрибуты массивов
Атрибуты
 Атрибутом называют особенное, долговременное
свойство предмета.
 В языке VHDL сигналы, переменные и другие
объекты, кроме своего значения, также имеют
множество атрибутов.
 Обращение к атрибутам объекта имеет следующий
синтаксис:
type_name'attribute_name
Имя скалярного типа или
объекта (переменная, сигнал)
соответствующего типа
Имя атрибута
Атрибуты скалярных типов
Вид атрибута Вычисляемое значение
Тип
атрибута
Т'base Базовый тип T
Любойскалярный
Т'left Левая граница значений T
Т'right Правая граница значений T
Т'low Нижняя граница значений T
Т'high Верхняя граница значений T
T'ascending TRUE, если диапазон задан от
меньшего к большему или этот тип
определяется перечислением
входящих в него значений, иначе
FALSE
Т'image(X) Строка символов, представляющая
значение X
T'value(S) Значение указанного типа на базе
строкового представления S
Атрибуты скалярных типов
Вид атрибута Вычисляемое значение
Тип
атрибута
T'pos(X) Позиция значения X в наборе
значений T
Перечислимый,физический
Т'val(N) Значение элемента в позиции N в
наборе значений T
T'leftof(X) Значение в наборе значений T,
записанное в позиции слева от X
Т'rightof(X) Значение в наборе значений T,
записанное в позиции справа от X
Т'ргеd(Х) Значение в наборе значений T, на
одну позицию меньшее X
Т'succ(X) Значение в наборе значений T, на
одну позицию большее X
Атрибуты скалярных типов
TYPE scalar_type IS RANGE 30 DOWNTO 0;
scalar_type'left → 30;
scalar_type'right → 0;
scalar_type'low → 0;
scalar_type'high → 30;
scalar_type'ascending → FALSE;
scalar_type'image(14) → "14";
scalar_type'value("14") → 14;
scalar_type'leftof(1) → 2;
scalar_type'rightof(1) → 0;
scalar_type'val(1) → 1;
scalar_type'pos(1) → 1;
scalar_type'pred(30) → 29;
scalar_type'pred(29) → 30;
scalar_type'succ(30);
Атрибуты скалярных типов
TYPE fsm_state IS (IDLE, START, STOP, SLEEP);
fsm_state'left → IDLE;
fsm_state'right → SLEEP;
fsm_state'low → IDLE;
fsm_state'high → SLEEP;
fsm_state'ascending → TRUE;
fsm_state'image(START) → "START";
fsm_state'value("STOP") → STOP;
fsm_state'pos(IDLE) → 0;
fsm_state'val(3) → SLEEP;
fsm_state'succ(IDLE) → START;
fsm_state'pred(STOP) → START;
fsm_state'pred(IDLE); -- недопустимо
fsm_state'succ(SLEEP); -- недопустимо
Атрибуты скалярных типов
TYPE color IS (RED, ORANGE, YELLOW, GREEN, BLUE);
-- longwave включает три цвета - RED, ORANGE, YELLOW
SUBTYPE longwave IS color RANGE color'left TO YELLOW;
VARIABLE palette: longwave := RED;
TYPE word_index IS RANGE 255 DOWNTO 0;
FOR j IN word_index'left DOWNTO 9 LOOP …
…
END LOOP;
TYPE severity IS (START, IDLE, STOP);
SIGNAL status: severity := IDLE;
SIGNAL emergency: BIT := '0';
status <= severity'high WHEN emergency = '1' ELSE
severity'low;
Атрибуты скалярных типов
TYPE clock IS RECORD
Hour: integer RANGE 0 TO 23;
Min : integer RANGE 0 TO 59;
Sec : integer RANGE 0 TO 59;
END RECORD clock;
…
SIGNAL intTime: clock := (0,0,0);
…
-- & - оператор конкатенации
REPORT "The time is"
& integer'image(intTime.Hour) & ":"
& integer'image(intTime.Min) & ":"
& integer'image(intTime.Sec);
Атрибуты массивов
Имя атрибута Значение
A'left(N) Левая граница диапазона индексов N-й
координаты массива А
A'right(N) Правая граница диапазона индексов N-й
координаты массива А
A'low(N) Нижняя граница диапазона индексов N-й
координаты массива А
A'high(N) Верхняя граница диапазона индексов N-й
координаты массива А
A'range(N) Диапазон индексов N-й координаты массива А
A'reverse_range(N) Обратный диапазон индексов N-й координаты
массива А
A'length(N) Ширина диапазонов индексов N-й координаты
массива А
A'ascending(N) Принимает значение TRUE, если интервал
индекса массива задан от меньшего к
большему
Атрибуты массивов
TYPE A IS ARRAY (1 TO 4, 31 DOWNTO 0) OF BOOLEAN;
A'left (1) → 1;
A'low (1) → 1;
A'right (2) → 0;
A'hight (2) → 31;
A'range (1) → IS 1 TO 4;
A'reverse_range (2) → IS 0 TO 31;
A'length (1) → 4;
A'length (2) → 32;
A'ascending (1) → TRUE;
A'ascending (2) → FALSE;
Атрибуты массивов
GENERIC (N: NATURAL := 8); -- изменяемый параметр
…
VARIABLE x: STD_LOGIC_VECTOR(N-1 DOWNTO 0);
-- реализация схемы «указателя старшей единицы»
-- атрибут 'range эквивалентен выражению 7 downto 0
FOR i IN x'range LOOP
IF x(i) = '1' THEN
y(i) <= '1';
-- «старшая единица» найдена, выход из цикла
EXIT;
ELSE
y(i) <= '0';
END IF;
END LOOP;
Атрибуты сигналов
 используются для представления временных свойств
сигнала
 эффективное средство анализа их поведения во
времени
 атрибуты сигналов являются единственным
способом описания поведения синхронного
устройства
Сигналы – особый класс объектов, который
предназначен для представления в модели на языке
VHDL состояние проводника в структуре цифрового
устройства.
Атрибуты сигналов
Имя атрибута Тип атрибута Значение
S'delayed(Т) То же, что у S
Значение S, существовавшее в
период времени T перед
вычислением атрибута
S'event BOOLEAN
Принимает значение TRUE,
если в текущем цикле
моделирования происходило
изменение сигнала
S'stable(T) BOOLEAN
Сигнал имеет значение TRUE,
если в течение времени T
сигнал не изменялся
S'transaction BIT
Сигнал типа BIT переключается
из ′0′ в ′1′ (или наоборот) при
каждом обращении к S
S'last_value То же, что у S Предыдущее значение сигнала
Атрибуты сигналов
Имя атрибута Тип
атрибута
Значение
S'active BOOLEAN
Принимает значение TRUE, если в
текущем цикле моделирования есть
обращение к этому сигналу
S'quiet(T) BOOLEAN
Сигнал имеет значение TRUE, если в
течение времени T к сигналу не было
обращений
S'last_event TIME
Время от момента вычисления атрибута
до последнего перед этим изменения
сигнала
S'last_active TIME
Время от момента вычисления атрибута
до последнего присвоения значения
сигналу (не совпадает с LAST_EVENT
при наличии слова AFTER в
определяющем выражении)
Атрибуты сигналов
 Атрибуты delayed, stable, quiet,
transaction создают новые сигналы в
модели, что позволяет их использовать в правой
части оператора присвоения значения сигналам
clk
if (clk'event and clk = '1') then …
…
if (not clk'stable and clk = '1') then …
…
wait until (clk'event and clk = '1');
if (clk'event and clk = '0') then …
Атрибуты сигналов
PROCESS(clk)
BEGIN
IF clk='1' AND clk'event THEN
q1 <= a; -- D- триггер
END IF;
IF NOT clk'stable THEN -- D- триггер
q2 <= a;
END IF;
IF clk'last_value /= clk THEN
q3 <= a; -- D- триггер
END IF;
IF clk'active -- D- триггер
q4 <= a;
END IF;
q5 <= clk'transaction; -- T- триггер
END PROCESS;
Атрибуты вводимые пользователем
 Позволяют вводить дополнительные свойства
объектам языка:
• выбор способа кодирования состояний автомата
• управление процессом оптимизации,
размещением блоков и их исполнением
• назначение портов номерам выводов
• указание начального состояния схем памяти
 При объявлении необходимо сначала объявить
(декларировать) его тип, а затем определить
значение (специфицировать).
Атрибуты вводимые пользователем
-- декларация пользовательского атрибута
ATTRIBUTE attribute_name: attribute_type;
-- спецификация атрибута
ATTRIBUTE attribute_name OF target_name: class IS value;
любой тип данных
(BIT, INTEGER,
STD_LOGIC_VECTOR)
класс-объект
(TYPE, SIGNAL,
FUNCTION и т.д.);
значение
(0, 135,
"111001");
VARIABLE nand3: STD_LOGIC_VECTOR(3 DOWNTO 0);
ATTRIBUTE number_of_inputs: NATURAL;
ATTRIBUTE number_of_inputs OF nand3: VARIABLE IS 3;
-- атрибут вернет значение 3
inputs := nand3'number_of_inputs;
Атрибуты вводимые пользователем
-- двоичное кодирование по умолчанию:
-- RED="00", GREEN="01", BLUE="10", WHITE="11"
TYPE color IS (RED, GREEN, BLUE, WHITE);
-- переопределим на унарное кодирование
-- RED="0001", GREEN="0010", BLUE="0100", WHITE="1000"
ATTRIBUTE enum_encoding OF color:
TYPE IS "0001 0010 0100 1000";
 Объявление пользовательских атрибутов возможно в
декларативных частях соответствующих языковых
конструкций, кроме тела пакета (package body).
 В случае если атрибут не может быть синтезирован, то
компиляторы/синтезаторы САПР пропустят его либо
выдадут предупреждение.
Attributes in VHDL

More Related Content

PPTX
VHDL composite data types, arrays, records
PPTX
VHDL data types, user-defined types, subtypes
PPTX
Subprograms in VHDL, Procedures in VHDL
PPTX
Statements in VHDL - Concurrent Statements
PPTX
Statements in VHDL - Sequential Statements
PPTX
Subprograms in VHDL, Functions in VHDL
PPTX
Structural project description in VHDL
PDF
Погружение в Dart
VHDL composite data types, arrays, records
VHDL data types, user-defined types, subtypes
Subprograms in VHDL, Procedures in VHDL
Statements in VHDL - Concurrent Statements
Statements in VHDL - Sequential Statements
Subprograms in VHDL, Functions in VHDL
Structural project description in VHDL
Погружение в Dart

What's hot (17)

PPTX
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
PDF
1 встреча — Параллельное программирование (А. Свириденков)
PPTX
Legacy: как победить в гонке (Joker)
PDF
20090222 parallel programming_lecture01-07
PDF
Глава 3: примитивные типы и операции с ними в Java
PDF
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
PDF
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
PPTX
C language lect_22_advanced
PPTX
PDF
цсноп 2 11_1_vital
PPT
021
PDF
моап 2011 04
PDF
ук 03.001.02 2011
PPTX
Reactive extensions
DOC
020
PDF
Объектно-ориентированное программирование. Лекция 7 и 8.
PDF
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Basic principles of projects description in VHDL - ENTITY, ARCHITECTURE, LIBR...
1 встреча — Параллельное программирование (А. Свириденков)
Legacy: как победить в гонке (Joker)
20090222 parallel programming_lecture01-07
Глава 3: примитивные типы и операции с ними в Java
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Anureyev: On the Road to Technology of Developing the Means of Dedu...
C language lect_22_advanced
цсноп 2 11_1_vital
021
моап 2011 04
ук 03.001.02 2011
Reactive extensions
020
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Ad

Similar to Attributes in VHDL (6)

PDF
моап 2011 03
PPSX
PPSX
PDF
апкс 2011 04_verilog_продолж
PDF
Delphi. Профессиональное программирование
PDF
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
моап 2011 03
апкс 2011 04_verilog_продолж
Delphi. Профессиональное программирование
Опыт применения активных объектов во встраиваемых системах. Архитектурные асп...
Ad

Attributes in VHDL

  • 1. Куланов В.А. [v.kulanov@csn.khai.edu] Атрибуты в языке VHDL «Технологии проектирования компьютерных систем»
  • 2. Атрибуты. Введение Атрибуты – это скаляры, отражающие некоторые свойства объектов АТРИБУТЫ Предопределенные Пользовательские Атрибуты типов Атрибуты сигналов Атрибуты массивов
  • 3. Атрибуты  Атрибутом называют особенное, долговременное свойство предмета.  В языке VHDL сигналы, переменные и другие объекты, кроме своего значения, также имеют множество атрибутов.  Обращение к атрибутам объекта имеет следующий синтаксис: type_name'attribute_name Имя скалярного типа или объекта (переменная, сигнал) соответствующего типа Имя атрибута
  • 4. Атрибуты скалярных типов Вид атрибута Вычисляемое значение Тип атрибута Т'base Базовый тип T Любойскалярный Т'left Левая граница значений T Т'right Правая граница значений T Т'low Нижняя граница значений T Т'high Верхняя граница значений T T'ascending TRUE, если диапазон задан от меньшего к большему или этот тип определяется перечислением входящих в него значений, иначе FALSE Т'image(X) Строка символов, представляющая значение X T'value(S) Значение указанного типа на базе строкового представления S
  • 5. Атрибуты скалярных типов Вид атрибута Вычисляемое значение Тип атрибута T'pos(X) Позиция значения X в наборе значений T Перечислимый,физический Т'val(N) Значение элемента в позиции N в наборе значений T T'leftof(X) Значение в наборе значений T, записанное в позиции слева от X Т'rightof(X) Значение в наборе значений T, записанное в позиции справа от X Т'ргеd(Х) Значение в наборе значений T, на одну позицию меньшее X Т'succ(X) Значение в наборе значений T, на одну позицию большее X
  • 6. Атрибуты скалярных типов TYPE scalar_type IS RANGE 30 DOWNTO 0; scalar_type'left → 30; scalar_type'right → 0; scalar_type'low → 0; scalar_type'high → 30; scalar_type'ascending → FALSE; scalar_type'image(14) → "14"; scalar_type'value("14") → 14; scalar_type'leftof(1) → 2; scalar_type'rightof(1) → 0; scalar_type'val(1) → 1; scalar_type'pos(1) → 1; scalar_type'pred(30) → 29; scalar_type'pred(29) → 30; scalar_type'succ(30);
  • 7. Атрибуты скалярных типов TYPE fsm_state IS (IDLE, START, STOP, SLEEP); fsm_state'left → IDLE; fsm_state'right → SLEEP; fsm_state'low → IDLE; fsm_state'high → SLEEP; fsm_state'ascending → TRUE; fsm_state'image(START) → "START"; fsm_state'value("STOP") → STOP; fsm_state'pos(IDLE) → 0; fsm_state'val(3) → SLEEP; fsm_state'succ(IDLE) → START; fsm_state'pred(STOP) → START; fsm_state'pred(IDLE); -- недопустимо fsm_state'succ(SLEEP); -- недопустимо
  • 8. Атрибуты скалярных типов TYPE color IS (RED, ORANGE, YELLOW, GREEN, BLUE); -- longwave включает три цвета - RED, ORANGE, YELLOW SUBTYPE longwave IS color RANGE color'left TO YELLOW; VARIABLE palette: longwave := RED; TYPE word_index IS RANGE 255 DOWNTO 0; FOR j IN word_index'left DOWNTO 9 LOOP … … END LOOP; TYPE severity IS (START, IDLE, STOP); SIGNAL status: severity := IDLE; SIGNAL emergency: BIT := '0'; status <= severity'high WHEN emergency = '1' ELSE severity'low;
  • 9. Атрибуты скалярных типов TYPE clock IS RECORD Hour: integer RANGE 0 TO 23; Min : integer RANGE 0 TO 59; Sec : integer RANGE 0 TO 59; END RECORD clock; … SIGNAL intTime: clock := (0,0,0); … -- & - оператор конкатенации REPORT "The time is" & integer'image(intTime.Hour) & ":" & integer'image(intTime.Min) & ":" & integer'image(intTime.Sec);
  • 10. Атрибуты массивов Имя атрибута Значение A'left(N) Левая граница диапазона индексов N-й координаты массива А A'right(N) Правая граница диапазона индексов N-й координаты массива А A'low(N) Нижняя граница диапазона индексов N-й координаты массива А A'high(N) Верхняя граница диапазона индексов N-й координаты массива А A'range(N) Диапазон индексов N-й координаты массива А A'reverse_range(N) Обратный диапазон индексов N-й координаты массива А A'length(N) Ширина диапазонов индексов N-й координаты массива А A'ascending(N) Принимает значение TRUE, если интервал индекса массива задан от меньшего к большему
  • 11. Атрибуты массивов TYPE A IS ARRAY (1 TO 4, 31 DOWNTO 0) OF BOOLEAN; A'left (1) → 1; A'low (1) → 1; A'right (2) → 0; A'hight (2) → 31; A'range (1) → IS 1 TO 4; A'reverse_range (2) → IS 0 TO 31; A'length (1) → 4; A'length (2) → 32; A'ascending (1) → TRUE; A'ascending (2) → FALSE;
  • 12. Атрибуты массивов GENERIC (N: NATURAL := 8); -- изменяемый параметр … VARIABLE x: STD_LOGIC_VECTOR(N-1 DOWNTO 0); -- реализация схемы «указателя старшей единицы» -- атрибут 'range эквивалентен выражению 7 downto 0 FOR i IN x'range LOOP IF x(i) = '1' THEN y(i) <= '1'; -- «старшая единица» найдена, выход из цикла EXIT; ELSE y(i) <= '0'; END IF; END LOOP;
  • 13. Атрибуты сигналов  используются для представления временных свойств сигнала  эффективное средство анализа их поведения во времени  атрибуты сигналов являются единственным способом описания поведения синхронного устройства Сигналы – особый класс объектов, который предназначен для представления в модели на языке VHDL состояние проводника в структуре цифрового устройства.
  • 14. Атрибуты сигналов Имя атрибута Тип атрибута Значение S'delayed(Т) То же, что у S Значение S, существовавшее в период времени T перед вычислением атрибута S'event BOOLEAN Принимает значение TRUE, если в текущем цикле моделирования происходило изменение сигнала S'stable(T) BOOLEAN Сигнал имеет значение TRUE, если в течение времени T сигнал не изменялся S'transaction BIT Сигнал типа BIT переключается из ′0′ в ′1′ (или наоборот) при каждом обращении к S S'last_value То же, что у S Предыдущее значение сигнала
  • 15. Атрибуты сигналов Имя атрибута Тип атрибута Значение S'active BOOLEAN Принимает значение TRUE, если в текущем цикле моделирования есть обращение к этому сигналу S'quiet(T) BOOLEAN Сигнал имеет значение TRUE, если в течение времени T к сигналу не было обращений S'last_event TIME Время от момента вычисления атрибута до последнего перед этим изменения сигнала S'last_active TIME Время от момента вычисления атрибута до последнего присвоения значения сигналу (не совпадает с LAST_EVENT при наличии слова AFTER в определяющем выражении)
  • 16. Атрибуты сигналов  Атрибуты delayed, stable, quiet, transaction создают новые сигналы в модели, что позволяет их использовать в правой части оператора присвоения значения сигналам clk if (clk'event and clk = '1') then … … if (not clk'stable and clk = '1') then … … wait until (clk'event and clk = '1'); if (clk'event and clk = '0') then …
  • 17. Атрибуты сигналов PROCESS(clk) BEGIN IF clk='1' AND clk'event THEN q1 <= a; -- D- триггер END IF; IF NOT clk'stable THEN -- D- триггер q2 <= a; END IF; IF clk'last_value /= clk THEN q3 <= a; -- D- триггер END IF; IF clk'active -- D- триггер q4 <= a; END IF; q5 <= clk'transaction; -- T- триггер END PROCESS;
  • 18. Атрибуты вводимые пользователем  Позволяют вводить дополнительные свойства объектам языка: • выбор способа кодирования состояний автомата • управление процессом оптимизации, размещением блоков и их исполнением • назначение портов номерам выводов • указание начального состояния схем памяти  При объявлении необходимо сначала объявить (декларировать) его тип, а затем определить значение (специфицировать).
  • 19. Атрибуты вводимые пользователем -- декларация пользовательского атрибута ATTRIBUTE attribute_name: attribute_type; -- спецификация атрибута ATTRIBUTE attribute_name OF target_name: class IS value; любой тип данных (BIT, INTEGER, STD_LOGIC_VECTOR) класс-объект (TYPE, SIGNAL, FUNCTION и т.д.); значение (0, 135, "111001"); VARIABLE nand3: STD_LOGIC_VECTOR(3 DOWNTO 0); ATTRIBUTE number_of_inputs: NATURAL; ATTRIBUTE number_of_inputs OF nand3: VARIABLE IS 3; -- атрибут вернет значение 3 inputs := nand3'number_of_inputs;
  • 20. Атрибуты вводимые пользователем -- двоичное кодирование по умолчанию: -- RED="00", GREEN="01", BLUE="10", WHITE="11" TYPE color IS (RED, GREEN, BLUE, WHITE); -- переопределим на унарное кодирование -- RED="0001", GREEN="0010", BLUE="0100", WHITE="1000" ATTRIBUTE enum_encoding OF color: TYPE IS "0001 0010 0100 1000";  Объявление пользовательских атрибутов возможно в декларативных частях соответствующих языковых конструкций, кроме тела пакета (package body).  В случае если атрибут не может быть синтезирован, то компиляторы/синтезаторы САПР пропустят его либо выдадут предупреждение.