Язык VHDL

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

Одесский  государственный  политехнический  университет

Кафедра системного программного обеспечения

Ф. С. Шапо

 
 
 
 
 

Основы  языка VHDL

 для  проектирования цифровых систем 

Конспект  лекций

для студентов 

специальностей 7.091501 и 7.080403 
 
 
 
 
 
 
 
 
 
 
 
 
 

Одесса  2002

  1. Основні поняття мови VHDL
 

1.1. Методи опису цифрових  систем 

      1.1.1. VHDL-проект ЦС. Як вказувалося раніше, мова VHDL призначена для опису ЦС на різних рівнях проектування, починаючи з етапу системного (алгоритмічного, высокорівневого) проектування і закінчуючи етапом логічного (низкорівневого) проектування з використанням методології нисхідного проектування. Ця методологія припускає ієрархічний опис проектованої ЦС як системи, що складається з окремих компонентів (підсистем, модулів, вузлів тощо), з поступовим переходом від абстрактного (системного чи алгоритмічного) опису до більш детального (структурного чи схемного) опису. При цьому на кожнім етапі необхідно вирішувати задачі синтезу, аналізу (моделювання), верифікації, документування й ін. Отримані результати лежать в основі проекту ЦС і описуються за допомогою мови VHDL. VHDL-проект містить файли описів компонент, з'єднань між ними і формальним визначенням закону функціонування ЦС (system behavior) і її компонент. VHDL-проект звичайно включає описи різних рівнів ієрархії (абстракції) ЦС:

      · алгоритмічного (в англійській термінології часто вживається термін "поведінковий" – behavioral) рівня;

       · рівня регістрових передач;

       · функціонально – логічного рівня з урахуванням затримок блоків;

      · рівня логічних елементів з урахуванням часу переключення.

 

       VHDL-проект складається з декількох  окремих складових проекту, що  компілюються і зберігаються  в спеціальній бібліотеці. Основними такими складовими є:

      · Entity (об'єкт, інтерфейс об'єкта). Entity описує основні структурні складові (компоненти, об'єкти) проекту, задаючи їхні імена і визначаючи інтерфейси для кожного об'єкта. Якщо опис (проект) має ієрархічну структуру, то опис верхнього рівня (еntity) містить описи (еntities) нижніх рівнів. Структура об'єкта й інші його властивості в еntity не розкриваються, тобто будь-який об'єкт проекту на цьому рівні опису розглядається як "чорний ящик".

      · Architecture (архітектура, структура). Architecture визначає внутрішню організацію, сутність об'єкта проекту і може описувати як функціонування об'єкта (behavioral type), так і його структуру (structural type). Той самий об'єкт (еntity) може мати різні варіанти архитектур.

      · Configuraton (конфігурація, форма). Configuraton дозволяє вибрати варіант опису компонента об'єкта з бібліотеки компонентів і зв'язати воєдино поняття еntity і architecture для конкретного блоку. Іншими словами, сonfiguraton описує характер  функціонування чи структуру визначеного об'єкта (еntity).

      · Package (пакет). Package - це модуль, що поєднує часто використовувані групи різних специфікацій. Ціль створення пакета складається в оголошенні загальних типів даних, компонент, сигналів і т.ін. Як тільки пакет визначений, він може бути поміщений у бібліотеку і використаний у різних незалежних проектах.

      Часто розроблювач використовує раніше скомпіліровані компоненти, що містяться в бібліотеках  фірм-розроблювачів. Додатково скомпіліровані пакети також зберігаються в бібліотеці.

      Таким чином, розроблювач визначає основні складові свого VHDL проекту в наступних частинах опису (мал.1.1):

      · Library (бібліотека).

      · Package (пакет).

      · Entity (об'єкт).

      · Architecture (архітектура).

      · Configuraton (конфігурація). 

      Кожна частина VHDL-проекту може бути збережена  в окремому файлі і відкомпільована, однак порядок компіляції повинний бути визначеним (буде розглянутий далі). 
 
 

        
 
 
 
 
 
 
 
 
 
 
 

      1.1.2. Код VHDL-опису, в основному, подібний структурі коду інших мов високого рівня. Текст VHDL-опису є послідовність роздільних лексичних елементів, таких як ідентифікатори, роздільники, ключові (зарезервовані) слова, литералы різних типів, оператори, коментарі й ін. Ідентифікатори повинні починатися з букви, далі можуть бути цифри, букви, знаки підкреслення і т.д. Докладніше лексичні елементи будуть розглянуті далі.

        Як і багато інших мов програмування, VHDL має ключові (спеціальні) слова.  Їхній список приведений нижче.  Ключові слова заведено записувати жирним шрифтом (bold), хоча принципового значення це не має. Імена об'єктів, що створюються користувачем, прийнято писати малими літерами, хоча в принципі мова байдужа до величини літер, а зазначені угоди приймаються для зручності. 

      Список  ключових слів VHDL 

      abs    else   literal  pure  transport

      access  elsif   loop   range type

      after   end   map   record unaffected

      alias   entity  mod   register units

      all   exit   nand  reject until

      and   file   new   rem  use

      architecture for   next   report variable

      array  function  nor   return wait

      assert  generate  not   rol  when

      attribute  generic  null   ror  while

      begin  group  of   select with

      block  guarded  on   severity xnor

      body   if   open  signal xor

      buffer  impure  or   shared

      bus   in   others  sla

      case   inertial  out   sll

      component inout   package  sra

      configuration is   port   srl

      constant  label   postponed subtype

      disconnect library  procedure then

      downto  linkage  process  to 

      1.2. Entity (об'єкт) 

      Entity повідомляє ім'я нового компонента (об'єкта) проекту, описує інтерфейс між даним компонентом (об'єктом) і середовищем, у якому він функціонує, визначає типи і напрямки сигналів (вхід/вихід), факультативно повідомляє універсальні параметри об'єкта проекту. VHDL відокремлює опис інтерфейсу об'єкта від розгляду структурної (чи іншої) реалізації об'єкта. Після того як опис об'єкта скомпільовано і поміщено в бібліотеку, об'єкт може брати участь у моделюванні, а також бути компонентом іншого проекту. 

      Синтаксис:

      entity entity_name is

            [generics (generics_list)]

            [ports] [declarations (constants, types, signals)]

            [begin statements]

      end [entity] entity_name; 

      Наприклад, об'єкт "логічний елемент И (AND)" (andgate) c двома вхідними (a, b) і одним вихідним (c) двійковими сигналами може бути оголошений у такий спосіб:

      Приклад 1.1.

      entity andgate is

            port (a, b: in bit;

                  c: out bit);

      end andgate; 

      У цьому прикладі об'єкт andgate визначений як новий компонент. Після службового слова is йдуть описи портів із вказівкою їхніх імен, напрямку потоків інформації (mode of port) і типу інформації. У VHDL визначені кілька режимів для портів:

      in – вхідний порт (input port);

      out – вихідний порт (output port);

      inout – змінюваний, двунаправленный порт (bi-directional port);

      buffer – буферний порт вихіду (buffer output port).

      В описі об'єкта поряд з описом портів можуть бути описані також параметри (у розділі декларацій). Для опису таких параметрів вживається ключове слово generic – параметр, що може настроюватися. З його допомогою можуть задаватися, наприклад, ширина (розрядність) шини, число вхідних або вихідних полюсів, число подкомпонент у межах блоку, значення затримки елементів і т.д.  

      Приклад 1.2.

      entity CPU is

      generic (BusWidth: Integer := 16);

      port (DataBus: inout std_logic_vector (BusWidth – 16 downto 0));

      end CPU; 

      У даному прикладі значення настройки BusWidth використовується для опису об'єкта CPU з перемінною розрядністю шини (ширини порту DataBus), що може змінюватися в зазначених межах.

      Підкреслимо ще раз, що всі проекти складаються  з об'єктів; таким чином, поняття  entity у визначеному змісті відповідає поняттю компонента проекту (пристрою) у класичній методології схемотехнического проектування. 

1.3. Architecture (архітектура) 

      Архітектура об'єкта проекта визначає закон функціонування (в англійській термінології –  поведінок, behavior) даного об'єкта, тобто  залежності вхід/вихід для вхідних і вихідних сигналів або сукупність компонент і їхній межзв’язок для  раніше визначеного об'єкта. Блок, що відповідає об'єкту проекта, повинний бути відкомпільований раніше компіляції його архітектури.

      VHDL дозволяє моделювати проектовану  систему на різних рівнях абстракції і при різних засобах її фізичної (схемотехничної) реалізації. Будь-який об'єкт проекту може бути реалізований різними способами, тобто тому самому об'єкту можуть відповідати різні варіанти архітектури. Усі варіанти архітектури мають однаковий інтерфейс, але кожен варіант повинний мати унікальний ідентифікатор. Розроблювач вибирає потрібний варіант для реалізації об'єкта в процесі конфігурації.

      Архітектура об'єкта в VHDL-проекті може розглядатися на різних рівнях (стиль опису архітектури, architecture style):

       · алгоритмічний (поведінковий, behavioral) – описуються послідовностні процеси, що реалізуються в об'єкті при його функціонуванні;

       · потоків даних (dataflow) – містить у собі опис структури і законів функціонування;

       · структурний (structural) – описується лише структура об'єкта, тобто компоненти, що входять у його склад, і способи їхнього з'єднання.

      Різні стилі VHDL-опису архітектури об'єкта представляють різні рівні абстракції (представлення) проектованої  системи  чи об'єкта проекту (таблиця 1.1).

      Синтаксис:

      architecture architecture_name of entity_name is

            [architecture_declarative_part]

      begin

            [architecture_statement_part]

      end [architecture] [architecture_name]; 

      Необхідно відзначити, що границя між різними  стилями опису архітектури не є твердою, часто в одній і тій же моделі змішуються різні стилі. 
 
 
 
 
 
 

                          Таблиця 1.1

Архітектурні  стилі Рівні опису (абстракції) об'єкта
Структурний Фізичний  рівень

Схеми з логічних елементів

Булевы  рівняння

Потоків даних  Арифметичні оператори

Оператори присвоювання

Рівень  регістрових передач

Алгоритмічний

(поведінковий)

Кінцеві автомати

Послідовностні  пристрої

Системні  тести

Описи високого рівня

 
 

      У загальному випадку опис архітектури  складається з двох частин – декларативної  й операторной. У декларативній частині містяться тільки ті оголошення, що відносяться до даної архітектури, наприклад, оголошення типів, підтипів, констант, сигналів, підпрограм, компонент і ін. Тут не можуть бути декларовані локальні змінні.

      В операторной частини приводяться виконувані в даному проекті оператори. Всі оператори, укладені між begin і end, називаються паралельними (concurrent) операторами, тому що усі вони виконуються одночасно (паралельно).

      Архітектура не може використовуватися без об'єкта.

      Розглянемо приклади.

      а) Опис архітектури на алгоритмічному (поведінковому) рівні (behavioral style, поведінковий стиль).

      Процес  функціонування логічного елемента И (andgate), розглянутого в попередньому розділі, може бути описаний так: 

      Приклад 1.3.

      architecture arch1of andgate is

      begin

            process (a, b);

            begin

                  if a = '1' and b = '1' then

                  c <= '1' after 1 ns; else

            c <= '0' after 1 ns;

                  end if;

            end process;

      end arch1; 

      Опис  містить процес, у якому використовуються оператори присвоєння. У даному випадку  алгоритм функціонування і ключові слова, що виділені жирним шрифтом, очевидні. Відзначимо, що ця архітектура описує поведінок об'єкту подібно тому, як це робиться в програмуванні. Затримка вихідного сигналу с залежить від значення, зазначеного після ключового слова after.

      При низхідному проектуванні алгоритмічний  опис архітектури звичайно є одним  з перших етапів, дозволяючи розроблювачу приділити головну увагу самому процесу функціонування. Згодом уточнюються  різні деталі процесу, наприклад, розрядність  шин, кодування й ін. 

      б) Опис архітектури на рівні потоків  даних (dataflow style, стиль потоків даних) звичайно використовується для опису  функціонування простих комбінаційних  логічних схем, таких як сумматоры, компаратори, мультиплексоры, дешифратори  й ін. Розглянемо як приклад двувхідный логічний елемент ИСКЛЮЧИТЕЛЬНОЕ ИЛИ (xor2).

      Приклад 1.4.

      entity xor2 is

          generic (m: time := 1.0 ns);

          port (a, b: in bit;

                c: out bit):

      end xor2;

      architecture dataflow of xor2 is

            begin

                  c <= (a xor b) after m;

      end dataflow; 

      Після компіляції цього елемента і запису його в бібліотеку він може бути використаний в іншому проекті по посиланню на ім'я об'єкта (entity name) xor2 і опису параметрів трьох його портів. 

       в) Опис архітектури  на структурному рівні (structural style, структурний стиль) застосовується, щоб об'єднати і зв'язати воєдино раніше скомпільовані об'єкти проекту.

      На  мал. 1.2 представлена схема простого компаратора, що складається з двох логічних елементів: u0 – ИСКЛЮЧИТЕЛЬНОЕ ИЛИ (xor2) і u1- інвертор (inv).  

      Приклад 1.5.

      entity comparator is

            port (a, b: in bit; c: out bit);

      end comparator; 

      architecture structural of comparator is

            signal i: bit;

            component xor2 [is]

            port (x, y: in bit; z: out bit);

            end component xor2;

            component inv

                  port (x: in bit; z: out bit);

            end component inv;

      begin

            u0: xor2 port map (a, b, i);

            u1: inv port map (i, c);

      end structural; 

        Оголошена архітектура має довільне  ім'я "structural". Внутрішній сигнал  і є оголошеним у декларативній частині опису архітектури. Оголошення компонентів необхідно, якщо вони не знаходяться в пакеті (package). Двом компонентам привласнені тимчасові імена (мітки) u0 і u1. Port map (карта портів) визначає спосіб підключення сигналів. Якщо об'єкти проекту xor2 і inv знаходяться в бібліотеці WORK, оголошувати бібліотеку не потрібно.

      Кожен стиль опису архітектури об'єкта застосовується в залежності від  подальшого використання цього опису. Наприклад, якщо VHDL-модель призначається  для наступного проектування друкованої плати, то, природно, вона повинна бути описана на структурному рівні. Для моделювання необхідний опис архітектури VHDL-моделі на алгоритмічному (behavioral) рівні. 

      1.4. Configuration (конфігурація) 

      Як  указувалося раніше, різні архітектурні стилі для опису об'єкта (компонента) можуть використовувати різні чи алгоритми рівні абстракції. Для кожного об'єкта повинний бути обраний конкретний варіант його реалізації (з деякої безлічі варіантів); при цьому необхідно визначити відношення (задати зв'язок) між об'єктом і обраної для нього конкретною архітектурою. Для цієї мети служить поняття конфігурації (сonfiguration), за допомогою якого встановлюється необхідна відповідність.

      Синтаксис:

      сonfiguration сonfiguration_name of entity_name is

            [сonfiguration declarations]

            for architecture_name

             for instance_label: component_name

                  use entity library_name.entity_name (arch_name);

             end for;

              [інші вираження]

          end for;

      сonfiguration сonfiguration_name of entity_name is

            [сonfiguration declarations]

            for architecture_name

             for instance_label: component_name

          use сonfiguration library_name.config_name;

             end for;

              [інші вираження]

      end for; 

      Оголошення  конфігурації починається з імені  конфігурації і прив'язано до даного об'єкта проекту. Декларативна частина  опису конфігурації (сonfiguration declarations) може містити пропозиції використання, різні технічні дані й ін. Основна частина оголошення конфігурації містить так називану конфігурацію блоку. У ній указується, яка архітектура буде використовуватися з об'єктом, визначеним раніше, або які елементи конфігурації будуть використовуватися в реалізації компонента й ін.

      Приклад 1.6.

      сonfiguration alu1_fast of alu is

      for alu1;

            for u0: comparator use entity work.comparator (dataflow);

            end for; 

        end for; 

      У цьому прикладі конфігурація alu1_fast створена для об'єкта alu і архітектури alu1. Вираження use ідентифікує бібліотеку, об'єкт і архітектуру компонента (компаратор). У результаті отримана конфігурація, названа alu1_fast, що є варіантом проекту alu. Оголошення конфігурації дозволяє вибрати конкретну архітектуру. Якщо оголошення конфігурації не використовується, стандарт VHDL визначає набір інструкцій, що забезпечують вибір конфігурації за замовчуванням. Наприклад, якщо об'єкт має більш ніж одну архітектуру, для нього вибирається остання скомпільована архітектура. 

      1.5. Library (бібліотека) 

      Бібліотечна конструкція library визначає логічні імена бібліотек проектів, що використовуються модулями проекту. У бібліотеках зберігаються результати компіляції VHDL об'єктів і їхній компонент, що можуть бути необхідні для наступного чи моделювання використані в інших проектах. Бібліотека може містити пакети (найчастіше), об'єкти, опис чи архітектури конфігурації.

      Синтаксис:

      library logical_name1 [logical_name2, …]; 

      Бібліотека, визначена в бібліотечній пропозиції первинного (тобто більш високого рівня) модуля (пакета, об'єкта проекту, архітектурі), доступна в кожнім вторинному модулі (тілі пакета, конфігурації й ін.). У VHDL маються дві убудованих (визначених) бібліотеки, що використовуються неявно в кожнім проекті: STD і WORK. Перша з них містить стандартні пакети STANDARD і TEXTIO; друга – робоча бібліотека, у якій за замовчуванням зберігаються всі розроблені і скомпільовані модулі проекту. Розроблювач може створити інші бібліотеки, де будуть зберігатися зазначені їм модулі. Щоб до існуючого бібліотеці можна було звертатися як до складового частині VHDL проекту, ім'я бібліотеки повинне бути оголошене першим. Стандартні бібліотеки STD і WORK не вимагають оголошення, тому що вони автоматично включаються в кожен модуль проекту. Інші бібліотеки повинні бути оголошені з використанням оператора use. Наприклад, ряд важливих визначень типів даних, функцій і т.п. містяться в пакеті std_logic_1164 бібліотеки IEEE. Щоб зробити їх доступними, необхідно попередньо оголосити

      library IEEE;

      use IEEE. std_logic_1164.all;

      Такі  оголошення повинні передувати кожному  об'єкту проекту, що використовує визначення в пакеті std_logic_1164.

      До  інформації, що зберігається в бібліотеці, можна звертатися трьома способами: 

      library_name.package_name.item_name

      (ім'я_бібліотеки.ім'я_пакета.ім'я_роздягнула);

чи

      library_name. item_name;

чи

      item_name (якщо інформація зберігається  в бібліотеці WORK). 

      Усі модулі в бібліотеці повинні мати унікальні імена; усі імена об'єктів  проекту і пакетів також повинні  бути унікальні в межах бібліотеки. 

Язык VHDL