Доброго дня!
Я випадково завантажив на ваш сервіс декілька звітів до лабораторних робіт:
http://antibotan.com/file.html?work_id=529347http://antibotan.com/file.html?work_id=529346http://antibotan.com/file.html?work_id=529345
http://antibotan.com/file.html?work_id=529344
Мій логін: ui11Підтвердженням авторства є прізвище на документах, які я відправив.Якщо можливо, видаліть їх будь ласка, оскільки я їх ще не захистив.
Пошта для зв’язку: panteliuk.dmytro@gmail.comЗ повагою,Пантелюк Дмитро
1. Які завдання під час проектування і застосування цифрових систем вирішує мова VHDL.
Мова VHDL є фактично міжнародним стандартом в області автоматизації проектування цифрових систем, це вхідна мова багатьох сучасних систем автоматизованого проектування (САПР) як замовлених, так і програмованих логічних інтегральних схем (ПЛІС) та програмованих користувачем вентильних матриць FPGA. VHDL призначена, в першу чергу, для специфікації – точного опису проектованих систем і їх моделювання на початкових етапах проектування – алгоритмічному і логічному. За допомогою VHDL можна моделювати електронні схеми з врахуванням реального часу.
VHDL дозволяє описувати поведінку, тобто алгоритми функціонування цифрових систем, а також ієрархічний функціонально-структурний опис систем, має засоби для опису паралельних асинхронних процесів, регулярних структур. Має можливості мови високого рівня – дозволяє створювати свої типи даних, має широкий набір арифметичних та логічних операцій і т.д.
2. Ієрархія представлення НВІС в структурній, функціональній та геометричній областях. Рівні проектування НВІС.
Ця діаграма показує, як той же самий проект на системному рівні може мати поведінкове уявлення і структурне уявлення. Беручи до уваги, що поведінкове уявлення описує проект в термінах блок-схем і алгоритмів, структурне уявлення представляє проект в термінах процесорів, блоків пам'яті та інших логічних блоків. Точно так само поведінкове уявлення на рівні міжрегістрових пересилань представило б потік міжрегістрових пересилань набором поведінкових інструкцій, а структурне уявлення представляє той же самий потік набором компонентів і зв'язків між ними. На логічному рівні схема може бути представлена булевими рівняннями чи кінцевими автоматами в поведінковому поданні, або як ланцюг пов'язаних вентилів і тригерів в структурному поданні. Геометричний рівень представлений як транзисторні функції в поведінковому рівні, як мікротранзисторів в структурному поданні, а також як топологія, осередки, кристали у фізичному поданні. Таким чином, модель Y-діаграми допомагає зрозуміти різні стадії і ступінь подробиці для уявлень проекту. Можна розширити цю модель, додавши аспекти верифікації моделі і випробування готового кристала
Рівні проектування НВІС:Системний рівень опису (system-level description) проекту складається з поведінкового опису в термінах функцій, виразів, алгоритмів. На рівні регістрових передач (register transfer level) проект представляється сукупністю арифметичних і логічних вузлів, елементів пам'яті і т.п. Вентильний або логічний рівень (logic level) описує проект на рівні логічних вентилів (logic gates) і тригерів (flip-flops). У цьому випадку поведінка схеми може бути описано системою логічних рівнянь. Ці логічні елементи представляються на кремнієвому (топологічному) рівні (geometric level) у вигляді топологічних елементів і межз'єднань.
3. Основні класи IP-блоків.
Важливим кроком в еволюції технології побудови систем на НВІС є проектування систем на кристалі (CнК, англ.: Systems-on-a-chip, SoC), відмінною рисою якого є використання функціонально закінчених готових компонентів з різних джерел. Такі готові блоки називають складними функціональними блоками (СФ-блоками) або IP-блоками, IP-модулями, IP-ядрами (від англ. Intellectual Property)
Розрізняють три основні класи IP-блоків. Програмні IP-блоки - це коди на мові опису апаратури, які не прив'язані до конкретної реалізації і, отже, не можна дати точний прогноз про такі характеристики ІС, які залежать від технології (споживана потужність, тимчасові затримки і т.п.). Схемотехнічні блоки специфіковані у вигляді схем, без прив'язки до топологічної реалізації відповідають вентильному рівню опису ІС. Фізичні або топологічні блоки являють собою реалізацію блоку в топології на кристалі і повністю прив'язані до конкретної технології.
4. Рівні проектування НВІС. Види НВІС.
4.1.Рівні проектування НВІС:
Логічний - логічна схема (логічні інвертори, елементи АБО-НЕ, І-НЕ і т. д.).
Схемо-і системотехнічний рівень - схемо-і системотехнічні схеми (тригери, компаратори, шифратори, дешифратори, АЛП і т. д.).
Електричний - принципова електрична схема (транзистори, конденсатори, резистори і т. п.).
Фізичний - методи реалізації одного транзистора (або невеликої групи) у вигляді легованих зон на кристалі.
Топологічний - топологічні фотошаблони для виробництва.
Програмний рівень - дозволяє програмісту програмувати (для ПЛІС, мікроконтролерів і мікропроцесорів) розроблювану модель використовуючи віртуальну схему.
В даний час велика частина інтегральних схем проектується за допомогою спеціалізованих САПР, які дозволяють автоматизувати і значно прискорити виробничі процеси, наприклад, отримання топологічних фотошаблонів.
4.2 Види НВІС:
1)Програмовані логічні контролери (ПЛК), базові матричні кристали (БМК), потребують заводського виробничого процесу для програмування;
2)ASIC - спеціалізовані (під замовлення) великі інтегральні схеми (ВІС), які при дрібносерійному та одиничному виробництві істотно дорожчі;
3)спеціалізовані комп'ютери, процесори (наприклад, цифровий сигнальний процесор) або мікроконтролери, вони (МК) значно повільніші за ПЛІС через програмну реалізацію алгоритмів роботи.
4) ПЛІС- (програмовані логічні інтегральне схема), електронний компонент призначений для створення цифрових інтегральних схем. На відміну від звичайних цифрових мікросхем, логіка роботи ПЛІС не визначається при виготовленні, а задається за допомогою проектування.
Види ПЛІС:
1) Programmable Logic Array (PLA) - програмована логічна матриця. Програмувалась чергуванням металевих шарів в процесі виробництва ІС;
2) PAL (Programmable Array Logic) - програмований масив (матриця) логіки. Різниця між PLA і PAL полягає в доступності програмування внутрішньої структури (матриць) ПЛМ;
3) CPLD (англ. complex programmable logic device) - складні програмовані логічні пристрої) містять відносно великі програмовані логічні блоки - макрокомірки, з'єднані з зовнішніми виводами і внутрішніми шинами. Функціональність CPLD кодується в енергонезалежній пам'яті, тому немає необхідності їх перепрограмувати при включенні. Можуть застосовуватися для розширення числа входів / виходів поруч з великими кристалами, або для передобробки сигналів (наприклад, контролер COM-порту, USB, VGA).
4) FPGA (англ. field-programmable gate array) містять блоки множення-підсумовування, які широко застосовуються при обробці сигналів (DSP), а також логічні елементи (як правило, на базі таблиць перекодування - таблиць істинності) та їх блоки комутації. FPGA зазвичай використовуються для обробки сигналів, мають більше логічних елементів і більш гнучку архітектуру, ніж CPLD. Програма для FPGA зберігається в розподіленої пам'яті, яка може бути виконана як на основі енергозалежних осередків статичного ОЗУ (подібні мікросхеми виробляють, наприклад, фірми Xilinx та Altera) - в цьому випадку програма не зберігається при зникненні електроживлення мікросхеми, так і на основі енергонезалежних осередків Flash -пам'яті або перемичок antifuse (такі мікросхеми виробляє фірма Actel і Lattice Semiconductor) - в цих випадках програма зберігається при зникненні електроживлення. Якщо програма зберігається в енергозалежною пам'яті, то при кожному включенні живлення мікросхеми необхідно заново конфігурувати її за допомогою початкового завантажувача, який може бути вбудований і в саму FPGA. Альтернативою ПЛІС FPGA є більш повільні цифрові процесори обробки сигналів. FPGA застосовуються також, як прискорювачі універсальних процесорів в суперкомп'ютерах (наприклад: Cray - XD1, SGI - Проект RASC).
5. Особливості блочно-орієнтованого проектування НВІС.
Для забезпечення функціонування системи надають перевагу аппаратному забезпеченню. Схема НВІС збирається із готових стандартних блоків, елементів І-НЕ,АБО, тригерів, регістрів, АЛП та ін, що реалізують необхідні процедури та функції ПЛІС. Завдяки використанню блоків досягається висока швидкодія, мала площа на кристалі, але значно зменшується гнучкість роботи у порівнянні із програмним методом, кінцева структура необхідного пристрою відразу оптимізована, на відміну від программного, структуру якого часто необхідно оптимізовувати.
6. Особливості розробки систем-на-кристалі
Для функціонування системи програмне забезпечення не менш важливо, ніж апаратне. Розробка, як правило, ведеться паралельно. Апаратна частина збирається зі стандартних налагоджених блоків, для зборки програмної частини використовуються готові підпрограми налаштування відповідних блоків, що реалізують необхідні процедури і функції, які в англо-язичної літературі часто називаються драйверами. Застосовуються засоби автоматизації розробки CAD і інтегровані програмні оболонки.
Для того, щоб упевнитися в правильній роботі створеної комбінації блоків, драйвери і програму завантажують в емулятор апаратної частини (мікросхему з програмованими ланцюгами, FPGA). Також потрібно задати розташування блоків та розробити міжблочні зв'язку.
Перед здачею в виробництво апаратна частина тестується на коректність з використанням мов Verilog та VHDL, а для більш складних схем - SystemVerilog, SystemC, e і OpenVera. До 70% загальних зусиль на розробку витрачається саме на цьому етапі.
Системи-на-кристалі споживають менше енергії, коштують дешевше і працюють надійніше, ніж набори мікросхем з тією ж функціональністю. Менша кількість корпусів спрощує монтаж. Тим не менш, створення однієї великої та складної системи на кристалі виявляється більш дорогим процесом, ніж серії з маленьких, через складність розробки і налагодження та зниження відсотка виходу придатних виробів.
7. Cтруктура проекту VHDL. Бібліотеки і пакети. Оголошення застосування.
Структура програм мовою VHDL
<VHDL програма>
<<
<<<оголошення бібліотек>>><<<оголошення модуля>>>
<первинний модуль>
>>
<<<вторинні модулі>>>
..
<оголошення бібліотеки>:=<LIBRARY<імя бібліотеки>
Оголошення застосування>:= USE <імя бібліотеки. Імя пакету. Імя модуля>
USE <імя бібліотеки ><імя пакету> ALL
(Коли потрібно використати усі елементи даної бібліотеки)
Первинний модуль описує імя ,порти. Первинному модулю відповідають вторинні модулі, де і описується пристрій, що розробляється. Проект в VHDl це сукупність ієрархічно звязаних текстових фрагментів, які називають проектними модулями. Розрізняють первинні та вторинні проектні модулі.
Первинний модуль <декларація ENTITY>|<декларація конфігуряції>|<декларація пакету>
Вторинний модуль <>|<тіло пакету>
Декларація ENTITY
Підлегле ENTITY архітектурне тіло, так чи інакше описує функціонування пристрою або його структуру.
Бібліотека (library) у VHDL – це щось на зразок каталогу, в якому компілятор отримує необхідну інформацію, що використовується в проекті, яка відсутня в явному вигляді в самому проекті. Як пакет (package) – компілятори VHDL використовують бібліотечні файли або модулі, які містять оголошення об’єктів, які найчастіше використовуються: типів даних, компонентів, сигналів, процедур і функцій, тощо. Використання пакетів дозволяє дані об’єкти багаторазово використовувати в різних VHDL проектах.
Декларація пакету визначає зміст глобальних для проекту ідентифікаторів.
Оголошення пакету повинно мати наступний синтаксис:
--Інтерфейс пакету.
package ім’я_пакету is
оголошення_пакету
end package ім’я_пакету;
--Тіло пакету
package body ім’я_пакету is
оператори_оголошень_пакету
end package body ім’я_пакету;
В бібліотеках ресурсів розміщуються блоки, на які посилаються блоки, що аналізуються.
<оголошення застосування>:: =
USE <імя бібліотеки>.<імя пакету>.<Імя модуля>
USE <імя бібліотеки>.<імя пакета>.Аll
Приклад.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_misc.all;
8. Декларація первинного модуля об’єкту моделювання. Синтаксис та призначення.
Первинні блоки проекту:
Декларація об’єкта в цілому (інтерфейсу entity),
Декларація конфігурації,
Декларація пакету.
Синтаксис декларації ENTITY
<Декларація ENTITY> ::=
ENTITY <ім’я проекту> IS
[<оголошення параметрів настройки>]
[<оголошення портів>]
END [ ENTITY ] <ім’я проекту>;
Як бачимо, оголошення інтерфейсу завжди починається з ключового слова entity, після якого вказується ім’я компоненту що проектується і ключове слово is. Після ключового слова is ми оголошують параметри настройок та порти. Так ім’я проекту - це ідентифікатор проекту, який визначається користувачем;
Оголошення параметрів настройки
<оголошення параметрів настройки::=
GENERIC (<ім’я>:<тип> [ :=<вираз> ]
<<;<ім’я>:<тип> [ :=<вираз> ] >>);
Оголошення портів
PORT (<ім’я>:<><тип>[:=<вираз])<<;<ім’я><режим><тип>[;=<вираз>]>>
режим – ключове слово, яке показує напрямок дії сигналу (порта):
Оголошення пакету
<Інтерфейс пакету> ::=
package <ім’я пакету>is
[<оголошення пакету>]
end package <ім’я пакету>;
<тіло пакету>
package body <ім’я пакету>is
[<оператори оголошення пакету>]
end package body <ім’я пакету>;
9. Опис архітектури об’єкту моделювання. Способи опису архітектури. Синтаксис і призначення.
Архітектура проекту визначає логіку роботи схеми цифрового пристрою, тобто встановлює алгоритм роботи цифрового пристрою і форму її реалізації (поведінкову або структурну). Первинна і найвища форма абстракції – поведінкова (behavioral) форма, яка дозволяє описувати систему в термінах того, що вона робить (або як себе веде), а не в термінах її елементів чи компонентів і з’єднань між ними. Поведінкова форма може бути булевим виразом чи більш абстрактним описом, наприклад описом міжрегістрових пересилок або описом в алгоритмічній формі.
Синтаксис оголошення архітектури проекту має наступний вигляд:
architectureім’я_проектуofім’я_компонентуis
Оголошення: компонентів, сигналів, констант, функцій, процедур, типів, …
begin
Виконання операторів паралельної обробки …
end [architecture]ім’я_архітектури;
Поведінкова форма архітектури проекту, наведеного на рис. 1 має наступний вигляд:
architecturebehavofSIRENis
begin
out1<= (not in1 and in2) or (not in3 and in2);
end behav;
В рядку заголовку архітектури проекту є ідентифікатор архітектури (behav), який відіграє роль імені архітектури і зв’язує цю архітектуру з оголошенням інтерфейсу SIREN.
Структурна форма архітектури зводиться до опису проекту через набір логічних елементів або компонентів і зв’язків між їхніми входами і виходами. Приклад такого опису має наступний вигляд:
architecture struct of SIREN is
-- Оголошення компонентів
component AND2
port (in1,in2: in std_logic; out1: out std_logic);
end component;
component OR2
port (in1,in2: in std_logic; out1: out std_logic);
end component;
-- Оголошення сигналів, які зв’язують компоненти
signal my_in2, my_in3_not, x1, x2, my_out1: std_logic;
begin
--Оператори реалізації компонентів
U0: AND2 port map (my_in2, my_in3_not, x2);
U1: OR2 port map (x1, x2, my_out1);
end struct;
Якщо архітектура проекту має структурну форму, після заголовку архітектури розташовуються оголошення компонентів, які передбачається використовувати в проекті.
Оператор port map реалізує міжкомпонентні зв’язки конкретного екземпляру компонента що в ньому оголошується.
10. Категорії даних VHDL. Декларація об’єктів мови.
Типи даних VHDL засновані на строгій типізації типів
Дані що використовуються програмою відносяться до одної із категорій:
Константи;
Змінні;
Сигнали;
Константи відіграють ту саму роль, що і параметри: вони забезпечують статичну інформацію, яка може використовуватись в середині моделі. Однак, на відміну від параметрів (generics), що декларуються в середині інтерфейсів, константи декларуються в середині архітектур.
Декларація констант:
constant <ім’я константи> : <ідентифікатор типу> :=<значення>;
Змінні – об’єкти які забезпечують миттєве збереження тимчасових даних. Оскільки змінні носять локальний характер, вони можуть декларуватись тільки в процесах і підпрограмах. Вони негайно отримують нові значення з присвоєнь
Сигнали – називаються об'єкти, які переносять значення і синхронізуючий вплив від одного процесу до іншого. Сигнали декларуються як порти в інтерфейсах і в декларативній частині архітектури. В кожному випадку вони можуть ініціалізуватись деяким початковим значенням. Вони отримають нові значення з присвоєнь тільки після припинення процесу.
Декларація об’єктів. Синтаксиз.
<декларація об’єктів>::=<категорія><імя><<<імя>>>>:<тип>[:=<вираз>];
<категорія>::= constant | variable |signal ;
11. Структура відношень між типами даних у мові VHDL
12. Типи INTEGER та REAL. Допустимі операції над даними цих типів.
Декларація Integer: typeIntegerisrange–2147483647to2147483647;
Декларація Real: typeRealisrange–1.0E308to1.0E308;
Типи Integer та Real визначають числові дані – цілі та дійсні відповідно
Стандартними вважаються наступні діапазони: – для Integer, для Real:
Числа в проекті VHDL можуть представляти як конфігураційні параметри, так і інформацію, що обробляється. Над цими кодами визначені наступні арифметичні операції:
+, додавання або повторення
-, віднімання або інверсія
*, множення
/, ділення
mod, число за модулем
rem, залишок від ділення
abs, модуль
**, піднесення до степеня
=,/=(не дорівнює),<,<=,>=,>
В арифметичних виразах передбачаються традиційні способи визначення пріоритету операцій, включаючи дужки.
13. Типи BIT та BOOLEAN. Допустимі операції над даними цих типів.
декларація: typeBitis(‘0’,‘1’);
Дані типу bit.
Можуть приймати значення з множини . На них визначені логічні операції:
NOT, інверсія
OR, операція «АБО»
NOR, операція «АБО-НЕ»
AND, операція «І»
NAND, операція «І-НЕ»
XOR, нерівнозначність aka сума за модулем 2
XNOR, рівнозначність
декларація: typeBooleanis(false,true);
Дані Boolean. Можуть приймати два значення: . Над даними визначені ті самі операції, що і над даними типу BIT. Різниця полягає в тому, що дані BIT використовуються для рівнів логічних сигналів, а булеві – в результаті порівняння, логічних умов. Якщо змінна select визначена як bit, то запис умовного оператора if select then – не припустимо. Треба писати if select=’1’ then.
14. Тип CHARACTER.
Об’єднує всі символи, що використовуються в ОС. Деякі компілятори допускають використання лише перших 128 символів в таблиці ASCII. В тексті програми символьна константа записується як стандартний символ, поміщений в одинарні лапки ‘a’,’b’,… Символи ‘0’.’1’ мають подвійне значення, потрібно дивитись по контексту програми якого типу вони є.
декларація: typeCharacteris(nul,soh,…,‘a’,…);
опис: набір значень, описаний як Character, міститьусі символи, визначені 8-розрядним символьним набором ISO8859-1 (відомим також як Latin-1); зокрема він містить псевдографічні символи та національні символи західноєвропейських мов;
приклади: ‘0’,‘+’,‘@’,‘A’,‘{’
15. Тип TIME.
Часовий тип даних. Єдиний фізичний тип, визначений в VHDL. Використовується для задавання затримок сигналів, і т.д. Часова константа:
<ціле><одиниця виміру часу>
Визначені такі одиниці виміру:
fs, – фектосекунда
ps, – піко секунда
ns, – наносекунда
us, – мікросекунда
ms, – мілісекунда
s, – секунда
Приклад
type time is range -2147483647 to 2147483647
units
fs;ps = 1000 fs;ns = 1000 ps; us = 1000 ns;
ms = 1000 us; sec = 1000 ms;min = 60 sec;hr = 60 min;
end units;
16. Тип SEVERITY_LEVEL.
Множина: . Використовується для керування компілятором або програмою моделювання. За допомогою змінних і констант цього типу в операторі VHDL ASSERT визначається дії, які треба виконати при виникненні певних умов. А дії можуть бути двох типів: просто видати повідомлення про настання події (перших 2), або перервати компіляцію (наступні 2)
17. Тип FILE_OPEN_STATUS і FILE_OPEN_KIND.
Забезпечують можливість контрою процедур обміну між програмою моделювання і файловою системою комп’ютера, вони призначені для роботи з файлами.
Тип file_open_kind набуває значень: read_mode (відкритий для читання);write_mode(відкритий для запису);append_mode (відкритий для продовження запису).
18. Типи STRING та BIT_VECTOR.
Це агрегатні типи, визначені як необмежений масив символів або бітів відповідно.
Тип string визначається, як масив (array) елементів типу character (символів). Розмірність масиву (індексованого типу) не повинна перевищувати верхню межу для позитивних цілих чисел. При декларації типу string вказується, що діапазон індексів - це будь-який діапазон типу positive. Індексація елементів починається з 1.
type STRING is array (POSITIVE range <>) of CHARACTER;
Аналогічним чином визначається тип bit_vector, як масив елементів типу bit. На відміну від типу string, індексувати елементи масиву можна з нуля, тому в декларації вказується (natural range <>) для діапазону індексів.
type BIT_VECTOR is array (NATURAL range <>) of BIT;
При декларації користувач повинен задавати конкретний діапазон при використанні такого типу, наприклад
signal A: BIT_VECTOR (0 to 3); - зростаючий діапазон
signal B: BIT_VECTOR (7 downto 0); - регресний діапазон
Атрибут foreign типу string декларується останнім і призначений для роботи з підпрограмами на іншому (не VHDL) мові програмування.
type BOOLEAN_VECTOR is array (NATURAL range <>) of BOOLEAN;
type INTEGER_VECTOR is array (NATURAL range <>) of INTEGER;
type REAL_VECTOR is array (NATURAL range <>) of REAL;
type TIME_VECTOR is array (NATURAL range <>) of TIME;
19. Визначення перечислимого типу
<визначення перечислимого типу> ::= (перечслиме значення <<, переслими значення>>)<перечислиме значення> ::= <ідентифікатор>|<символічна константа>
Пр1. TYPE state IS (S0,S1,S2,S3)
Пр2. TYPE std_ulogic is (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’); <- такий тип, а також тип, що породжується на його основі std_logic використовується для представлення сигналів у дев’ятизначній логіці. Формально ці типи не є визначеними, але їх включено в пакет std_logic_1164. Тобто треба його підключити для використання цих типів.
‘U’ – не ініціалізоване. Сигналу не присвоювалось жодне інше значення, ‘X’ – активний невизначений стан, ‘0’ – активний нуль, ‘1’ – активна одиниця, ’Z’ - відключено,’W’ – слабий невизначений стан,’L’ – слабий нуль, ’H’ – слаба одиниця, ’-’ – не важливо.
20. Типи, які можуть визначатись користувачем
<декларація типу> ::= TYPE <ім’я типу> is <визначення типу>;
<визначення типу> ::=<визначення перечислимого типу>|<визначення цілого типу>|<визначення дійного типу> | <визначення фізичного типу> | <визначення типу масиву> | <визначення типу запису>
Детальніше
<визначення перечислимого типу> ::= (перечслиме значення <<, переслими значення>>)<перечислиме значення> ::= <ідентифікатор>|<символічна константа>
Пр1. TYPE state IS (S0,S1,S2,S3)
Пр2. TYPE std_ulogic is (‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’); <- такий тип, а також тип, що породжується на його основі std_logic використовується для представлення сигналів у дев’ятизначній логіці. Формально ці типи не є визначеними, але їх включено в пакет std_logic_1164. Тобто треба його підключити для використання цих типів.
‘U’ – не ініціалізоване. Сигналу не присвоювалось жодне інше значення, ‘X’ – активний невизначений стан, ‘0’ – активний нуль, ‘1’ – активна одиниця, ’Z’ - відключено,’W’ – слабий невизначений стан,’L’ – слабий нуль, ’H’ – слаба одиниця, ’-’ – не важливо.
Числові типи даних, що визначаються користувачем вводяться для контролю сумісності даних в програмах і для точного задавання розрядності слів, що представляються в даній програмі.
Синтаксис визначення обмеженого типу
<визначення обмеженого типу> ::= [<базовий тип>] <діапазон>
<діапазон> ::= RANGE <обмеження><напрямок><обмеження> | RANGE<>
<напрямок> ::= DOWNTO|TO
Пр1. TYPE unsigned_short IS INTEGER RANGE 0 TO 255;
Пр2. TYPE my_data IS INTEGER RANGE -2**(n-1)+1 TO 2**(n-1)-1;
Пр3. TYPE input_level IS -10.0 to +10.0;
Пр4. Наступні типи ніби однакові, але використання їх зовсім інше, тому для відладки це кльово
TYPE data IS INTEGER RANGE 0 TO 15;
TYPE controls IS INTEGER RANGE 0 TO 15;
21. Фізичні типи, що визначені юзером
Фізичні типи унікальні у VHDL, тому що вони визначають не тільки значення об’єкта, а ще й одиниці, у яких ці значення виражені. Це дозволяє використовувати такі фізичні величини як час, відстань, струм, температура, і т.ін., які визначаються з необхідною точністю. Стандарт VHDL визначає тільки один фізичний тип – time(час), однак інші фізичні типи при бажанні також можуть бути визначені.
Є два види одиниць у деклараціях фізичних типів: первинні одиниці і вторинні одиниці, які визначаються в термінах первинних одиниць. Діапазон, зазначений у заголовку декларації типу відноситься лише до первинних одиниць.
Незважаючи на те що фізичні типи дуже наочні і привабливі для описів, вони не синтезуються.
<визначення фізичного типу> ::=
RANGE <діапазон>;
UNITS <ім’я базової одиниці>;
<<<ім’я вторинної одинці>=<значення одиниці>; >>
END UNITS [<ім’я типу>];
Пр. TYPE voltage IS RANGE –SE6 to +SE6;
UNITS uV;
mV = 1000 uV;
V = 1000 mV;
END UNITES voltage;
22. Масиви
Масиви – складний тип з регулярною структурою, який складається з елементів одного типу. Кількість елементів масиву визначається діапазоном масиву. Діапазон може бути необмеженим або обмеженим, з “підтримкою” лівої або правої границі і напрямку індексації. Необмежений діапазон визначається як:
range<>
У VHDL є два визначених масиви – bit_vector (з елементами типу bit) і string (з елементами типу character). Обидва вони декларуються з необмеженим діапазоном. Однак в цих масивах по різному визначається нижня границя: індексація елементів bit_vector починається з 0, а індексація string – з 1.
Оголошення масиву:
<визначення типу масиву> ::= ARRAY(<діапазон><<, <діапазон>>>) OF <тип елемента масиву>
Пр. TYPE ram IS ARRAY(length-1 DOWNTO 0) OF INTEGER
RANGE 2**width-1 DOWNTO 0;
TYPE ram1 IS ARRAY(length-1 DOWNTO 0, width-1 DOWNTO 0) OF std_logic;
TYPE ram2 IS ARRAY(integer RANGE<>, integer RANGE<>) OF std_logic;
У всіх трьох типу оголошується матриця памяті об’ємом length слів по width розрядів в кожному слові. В першому прикладі – одномірний масив цілих. В другому і третьому – двомірний масив біт, при чому в другому конкретно задані межі зміни індексів, а в третьому – двомірний необмежений масив.
Приклади декларування елементів масиву
ram2_ins(y,5) := x0; x0 – визначено як bit, а y як ціле
z <= ram_ins(Y) – Y та z – цілі.
Для одномірних масивів визначено декілька групових операцій, в яких масив розглядається як єдине ціле, це перш за все операція конкатинації стрічок (об’єднання) &.
Наприклад такі оператори a := “1001”, bc := “1101” & a; присвоюють значення сигналу 11011001
Операції зсуву визначені для одномірного масиву бітового та логічного типу BIT, BOOLEAN. Записується наступним чином: <імя масиву><символ операції зсуву><ціле>
Визначені наступні операції
sll – логічний зсув вліво, srl, - вправо.
sla, sra – арифметичний зсув
sol, sor – циклічні зсуви
23. Записи
Запис - це структура даних, кожна інформаційна одиниця якої називається полем запису, має індивідуальне ім’я і може бути індивідуального типу. Оголошується так:
<визначення типу запису> ::= RECORD <список полів запису:тип>;
<<<список полів запису:тип>>>
END RECORD;
Звернення до елементу запису має наступну форму:
record_name.element_name
Імена елементів завжди записуються без круглих дужок.
Головне призначення записів – згрупувати разом різні параметри одного об’єкту.
Пр1:
Type Instr_T is record
Mnemonic :String;
Code :Bit_vector(3downto0);ExeCycles:Integer;
End record;
Signal Instr1,Instr2,Instr3:Instr_T;
Декларація починається з ключового слова type, після якого вказується ім’я типу. Ключове слово record ідентифікує клас типу і вказує на початок декларування полів.
Кожне поле описується ім’ям та його типом. Якщо два або більше полів мають той самий тип, вони можуть бути описані разом, при цьому імена полів розділяються комами.
Для Декларація сигналів необхідне лише ім’я типу. Від інших типів вони відрізняються способом звертання до полів запису.
Пр2.
TYPE pixel IS RECORD red, green, blue: integer RANGE 0 TO 255;
END RECORD;
Пр3.
TYPE machine IS
RECORD s:state;
x:machine_input;
y:machine_output;
END RECORD
24. Підтипи
Підтип – це підмножина значень даного типу.
Об’єкти віднесені до підтипу зберігають сумність з даними типу, з якого виділяється цей підтип. Введення підтипу дозволяє:
Визначити множину допустимих значень даних підтипу, як підмножину допустимих значень базового типу.
Дозволяє вводити додаткові функції перетворення, визначених тільки для даних підтипу.
<декларація підтипу> ::= <ім’я підтипу> IS [<ім’я функції розв’язку>]
<ім’я базового типу чи підтипу> [<обмеження>]
SUBTYPE bit_in_word_number IS integer RANGE 31 downto 0;
Підтип визначається як тип із обмеженням (уточненням) наступним чином
Subtype ім’я підтипу is базовий тип[уточнення];
Декларація підтипу не визначає новий тип. Оскільки значення підтипу відносяться до базового типу, між об’єктами підтипу та базового типу непотрібно виконувати ніяких конвертацій. Крім того, весь набір операцій, визначений для операндів базового типу, можна застосовувати до операндів підтипу.
Приклад визначення типу:
Type byte_int is range 0 to 255;
Приклад визначення підтипу:
Subtype nibble_int is byte_int range 0 to 15;
25. Сигнали і змінні. Особливості сигналу як категорії даних.
Кожний сигнал має три властивості: тип, значення і час. Є досить тісний зв’язок між значенням і часом, оскільки для кожного сигналу відбувається його трасувальний запис в часі. Цей запис називається історією сигналу і дозволяє перевірити, які значення мав сигнал раніше, або в який момент відбулася його зміна.
З іншого боку, змінна має тільки дві властивості: тип і значення. Оскільки немає відповідності між її значенням і часом, змінна може мати тільки біжуче значення.
Найбільш важливі відмінності сигналів та змінних
Змінні міняють значення відразу після присвоєння, значення враховуються у всіх перетвореннях, записаних після такого присвоєння.
Значення сигналу міняється не відразу після виконання присвоєння. Оператору присвоєння співставляється деякий буфер, який називають контейнером(драйвером) сигналу. Оператор присвоєння передає нове значення драйверу сигналу, і тільки після того як виконані всі перетворення, ініційовані спільною подією значення драйвера передається сигналу. Передача значення сигналу може бути ще більш затримана, якщо оператор присвоєння містить вираз затримки AFTER.
Змінна визначена тільки всередині тіла процесу. Сигнал ж – у всьому архітектурному тілі.
Змінній можна перепресвоювати значення в тілі процесу. Сигнал ж – всередині одного процесу може мати тільки один драйвер.
Присвоєння значення сигналу відбувається після припинення процесу. Більше того, якщо сигналу присвоюється декілька значень на протязі виконання процесу, тільки останнє присвоєння має силу. При цьому необхідно зберігати інформацію про події з сигналами.
Ця функція виконується драйвером. VHDL-компілятор створює драйвер для кожного сигналу, якому присвоюється значення в середині процесу. Правило дуже просте: неважливо, скільки значень присвоювалось сигналу – існує тільки один драйвер сигналу в процесі. Усі операції виконуються із драйвером, значення з якого копіюється в сигнал тільки при припиненні процесу.
26. Послідовні і паралельні оператори в мові VHDL. Їх відмінності, локалізація в програмі та принципи ініціалізації.
Для описання дискретних фізичних систем у мові VHDL використовуються елементи, які мають назву паралельних операторів. Послідовність виконання паралельних операторів не залежить від порядку їх запису в архітектурі. Оператори активуються подіями сигналів, які їх пов’язують. Саме існування сигналів та паралельних операторів відрізняють VHDL від інших мов програмування. Існують такі паралельні оператори:
паралельний_оператор::= процесу | контролю | присвоєння | умовний | вибору | виклик_процедури | встановлення_компонента | generate | блоку
Дуже важливо чітко уявляти різницю між послідовними (sequential) та паралельними (concurrent) операторами. Послідовні оператори зустрічаються тільки в процесах. Оператори, що виконуються паралельно, зустрічаються в архітектурі між операторами begin та end.
Рис.1.3. Послідовні та паралельні оператори
У наведеному прикладі опис комбінаційної та послідовної схеми виконано на функціональному рівні. Процес можна замінити послідовністю паралельних операторів, що описують комбінаційну та послідовну частину схеми. У випадку регістру зсуву це має такий вигляд:
architecture RTL of rotate is
signal D,Qreg: std_logic_vector(0 to 7);
begin