ݺߣ

ݺߣShare a Scribd company logo
3. Типы данных VHDL


     Языки описания аппаратуры




    Хаханова И.В, каф.АПВТ,
    ХНУРЭ, e-mail:                        1
    hahanova@mail.ru             09.02.2011
Тема: Создание 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
Литература
 1.   Хаханов В.И., Хаханова И.В. VHDL + Verilog
      = Синтез за минуты, Харьков: ООО
      «Компания СМИТ» 2007. – 264 с.

 2.   Семенец В.В, Хаханова И.В., Хаханов В.И.
      Проектирование цифровых систем с
      использованием языка VHDL, Харьков, 2003.
      – 492 с.


                                                                   3
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru   09.02.2011
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
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
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
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
2. Классификация типов данных.
   Четыре класса типов данных

  скалярные    (scalar types) – не содержат
   подэлементов;
  сложные (composite types) – состоят из
   подэлементов;
  доступа (access types) – обеспечивают
   доступ к объектам заданного типа
   (указатели);
  файлы (files) – обеспечивают доступ к
   объектам , содержащим
   последовательность заданного типа.
                                                                   8
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru   09.02.2011
2. Классификация типов данных
                                           Типы данных

                     Скалярные            Типы                         Сложные
                                                          Файлы
                       типы              доступа                        типы

                            с плавающей физические                массивы              записи
                               точкой      типы                    (array)            (record)

целые           типы                                             массивы с                 массивы с
типы        перечесления          real             time       неограниченным             ограниченным
                                                                 размером                  размером

integer                severity_level
                                                                        bit_vector
                          character
                           boolean                                           string
                            bit
                                                                                                          9
   Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru                                       09.02.2011
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
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
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
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
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
4. Дискретные типы данных.
  Тип перечисления Character (2)
 type CHARACTER is (
nul,    soh,    stx,    etx,    eot,    enq,    ack,    bel,    bs,     ht,     lf,     vt,     ff,     cr,     so,     si,
dle,    dc1,    dc2,    dc3,    dc4,    nak,    syn,    etb,    can,    em,     sub,    esc,    fsp,    gsp,    rsp,    usp,
' ',    '!',    '"',    '#',    '$',    '%',    '&',    ''',    '(',    ')',    '*',    '+',    ',',    '-',    '.',    '/',
'0',    '1',    '2',    '3',    '4',    '5',    '6',    '7',    '8',    '9',    ':',    ';',    '<',    '=',    '>',    '?',
'@',    'A',    'B',    'C',    'D',    'E',    'F',    'G',    'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',
'P',    'Q',    'R',    'S',    'T',    'U',    'V',    'W',    'X',    'Y',    'Z',    '[',    '',    ']',    '^',    '_',
'`',    'a',    'b',    'c',    'd',    'e',    'f',    'g',    'h',    'i',    'j',    'k',    'l',    'm',    'n',    'o',
'p',    'q',    'r',    's',    't',    'u',    'v',    'w',    'x',    'y',    'z',    '{',    '|',    '}',    '~',    del,
c128,   c129,   c130,   c131,   c132,   c133,   c134,   c135,   c136,   c137,   c138,   c139,   c140,   c141,   c142,   c143,
c144,   c145,   c146,   c147,   c148,   c149,   c150,   c151,   c152,   c153,   c154,   c155,   c156,   c157,   c158,   c159,
' ',    'Ў',    'ў',    'Ј',    '¤',    'Ґ',    '¦',    '§',    'Ё',    '©',    'Є',    '"',    '¬',    '-',    '®',    'Ї',
'°',    '±',    'І',    'і',    'ґ',    'µ',    '¶',    '·',    'ё',    '№',    'є',    '"',    'ј',    'Ѕ',    'ѕ',    'ї',
'А',    'Б',    'В',    'Г',    'Д',    'Е',    'Ж',    'З',    'И',    'Й',    'К',    'Л',    'М',    'Н',    'О',    'П',
'Р',    'С',    'Т',    'У',    'Ф',    'Х',    'Ц',    'Ч',    'Ш',    'Щ',    'Ъ',    'Ы',    'Ь',    'Э',    'Ю',    'Я',
'а',    'б',    'в',    'г',    'д',    'е',    'ж',    'з',    'и',    'й',    'к',    'л',    'м',    'н',    'о',    'п',
'р',    'с',    'т',    'у',    'ф',    'х',    'ц',    'ч',    'ш',    'щ',    'ъ',    'ы',    'ь',    'э',    'ю',    'я');


                                                                                                                                  15
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru                                                                   09.02.2011
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
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
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
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
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
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
Замечания по использованию типов

   Если из контекста неясно, какой тип имеет значение,
   то тип указывается явно перед данными, которые
   берутся в скобки.
 Например,
   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
Сложные типы данных




                                                                  23
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru   09.02.2011
Массивы (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
Массивы (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
Бит-векторы и строки
    Предопределенные массивы с неограниченным
     размером:
     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
Тип 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
Операторы 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
Операторы 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 &not B = " 110000" (конкатенация)
   C ror 2 = "000110" (сдвиг вправо на 2 разряда)
   (A & not B) or (C ror 2) = " 110110 (побитовое "или")
   (A &not B or C ror 2) and D = " 110010" (побитовое
   "и")
   [(A &not B or C ror 2 and D) = " 110010"] = TRUE (с
   помощью скобок производится проверка на
   равенство левой и правой частей и результат –
   ИСТИНА).
                                                                  29
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru   09.02.2011
Операторы 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
Стандартная логика
   В пакете 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
Перегрузка операторов для
стандартной логики
    Операторы из пакета 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
Операторы для типа 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
Пакет: 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
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
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
Выводы
  Язык VHDL не чувствителен к
   регистру. Его идентификаторы должны
   начинаться с буквы и заканчиваться
   буквой или цифрой.
  В VHDL определены четыре класса
   типов данных:
      скалярные (scalar types),
      сложные (composite types),
      доступа (access types),
      файлы (files).
                                                                  37
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru   09.02.2011
Контрольные вопросы и задания
 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
Задания для самостоятельной работы
   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
Задания для самостоятельной работы
  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
Задания для самостоятельной работы

 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
   Описать интерфейс, используя типы данных 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
   Являются ли следующие операторы присвоения синтаксически корректными?
     Если нет, то использовать соответствующую функцию преобразования, чтобы
     исправить ситуацию.
      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
Задание
 1.     Записать VHDL-код для устройства
        вычитания, используя логические
        уравнения.
 2.     Записать VHDL-код для 4-разрядного
        устройства вычитания, используя
        модуль, созданный в предыдущей
        задаче, как компонент.



                                                                  44
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru   09.02.2011
Задания для самостоятельной работы
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
46
Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru   09.02.2011

More Related Content

моап 2011 03

  • 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
  • 15. 4. Дискретные типы данных. Тип перечисления Character (2) type CHARACTER is ( nul, soh, stx, etx, eot, enq, ack, bel, bs, ht, lf, vt, ff, cr, so, si, dle, dc1, dc2, dc3, dc4, nak, syn, etb, can, em, sub, esc, fsp, gsp, rsp, usp, ' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', del, c128, c129, c130, c131, c132, c133, c134, c135, c136, c137, c138, c139, c140, c141, c142, c143, c144, c145, c146, c147, c148, c149, c150, c151, c152, c153, c154, c155, c156, c157, c158, c159, ' ', 'Ў', 'ў', 'Ј', '¤', 'Ґ', '¦', '§', 'Ё', '©', 'Є', '"', '¬', '-', '®', 'Ї', '°', '±', 'І', 'і', 'ґ', 'µ', '¶', '·', 'ё', '№', 'є', '"', 'ј', 'Ѕ', 'ѕ', 'ї', 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', 'а', 'б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'); 15 Хаханова И.В, каф.АПВТ, ХНУРЭ, 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
  • 23. Сложные типы данных 23 Хаханова И.В, каф.АПВТ, ХНУРЭ, 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 &not B = " 110000" (конкатенация) C ror 2 = "000110" (сдвиг вправо на 2 разряда) (A & not B) or (C ror 2) = " 110110 (побитовое "или") (A &not B or C ror 2) and D = " 110010" (побитовое "и") [(A &not 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
  • 46. 46 Хаханова И.В, каф.АПВТ, ХНУРЭ, e-mail: hahanova@mail.ru 09.02.2011