Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
derzh.docx
Скачиваний:
10
Добавлен:
17.09.2019
Размер:
10.8 Mб
Скачать

41. Створення структурного опису цифрової системи мовою vhdl

Для того, щоб здійснювати моделювання деякої цифрової системи, її спочатку треба описати. Існує два методи опису – структурний і поведінковий.

Елемент, який реалізує нашу цифрову систему, у мові VHDL називається об’єктом (entity) проекту. Він може складатися з декількох простіших об’єктів (примірників компонентів (component)). Опис деякого об’єкта через простіші компоненти називають структурним описом цифрової системи, він характеризує внутрішню структуру системи. Але часто описувати об’єкт таким чином недоцільно або ж взагалі неможливо, наприклад, якщо цей елемент є найпростішим, і за допомогою нього далі будуються інші структурні описи. У такому випадку використовують поведінковий опис, суть якого полягає у описі функцій, які виконує об’єкт, а не його внутрішньої структури.

Р озглянемо детальніше як здійснюється структурний опис цифрових систем. RS-тригер, наприклад, можна реалізувати за допомогою двох елементів АБО_НІ (класична схема такого тригера - зліва). Схема, за якою робитимемо структурний опис на малюнку нижче. Щоб користуватися елементами АБО-НІ (n_or), вони вже повинні бути описані. Вважатимемо, що такий опис уже здійснено.

Тепер покажемо приклад структурного опису нашого RS - тригера через два елементи n_or. Спочатку робиться оголошення об’єкта, яке є описом зовнішнього інтерфейсу, в ньому вказуються порти і параметри настроювання. RS - тригер має два входи та два виходи. Нижче наведено його оголошення:

entity rstrg is

port( r: in bit; --входи

s: in bit;

q: out bit; --виходи

qn: out bit);

end rstrg;

Структурний опис матиме вигляд:

architecture structure of rstrg is

component n_or --оголошення компонента n_or

generic( delay : time);

port( a : in bit;

b : in bit;

c : in bit;

--оголошення внутрішніх сигналів

signal st1 : bit:=’0’;

signal st2 : bit:=’1’;

begin

u1: n_or – створення примірника u1 компонента n_or

generic map (5ns)

-- специфікація параметра настроювання

port map (a=>s, b=>st2, c=>st1);

-- приєднання сигналів до портів компонента

U2: n_or – створення примірника u2 компонента n_or

generic map (5ns)

port map (st1, r, st2);

q<= st1;

qn<=st2;

end structure;

У цьому архітектурному тілі спочатку було оголошено компонент n_or, потім два внутрішніх сигнали st1 i st2. Далі створено два примірники компонента n_or та з’єднано їх порти із внутрішніми сигналами та портами об’єкта rstrg. Наприклад, як бачимо для u1 у дужках після port map вказується, що його порт а з’єднується з портом s тригера, а порти b та c зі внутрішніми сигналами st2 та st1 відповідно. Тут з’єднання задаються іменами,а для u2 – позиціями. Тобто на першій позиції стоїть st1, на другій – r. На третій – st2, це означає, що вони будуть з’єднані відповідно з портами a, b і c (в такому порядку як і в оголошенні компонента).

Таким чином здійснено структурний опис RS – тригера.

42. Змінні та сигнали в мові vhdl

Обєкт даних – це іменована сутність,яка асоційована з деяким типом. Перед використанням об’єкт даних потрібно оголосити у розділі оголошень. У VHDL є три класи обєктів даних:константи, змінні та сигнали.

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

оголошення_змінної ::= variable список_ідентифікаторів : опис_підтипу[:=вираз];

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

Деякі приклади оголошень змінних:

variable count: natural := 0;

variable trace : trace_array;

Якщо припустити, що тип trace_array – масив елементів типу boolean,тоді початкове значення змінної trace – масив із восьми елементів, які мають значення false.

Для існуючого об’єкта можна створити додаткову назву всього об’єкта чи назву окремої його частини. Це робиться за допомогою оголошення псевдоніму(alias):

Оголошення_псевдоніму ::= alias ідентифікатор: опис підтипу is імя;

Псевдонім інтерпретується як додаткове імя об’єкта чи його частини, вказаної в оголошенні псевдоніму. Наприклад :

variable instr : bit_vector(31down to 0);

alias op_code : bit_vector(7 downto 0) is instr (31 downto 24);

У цьому прикладі імя op_code є назвою восьми лівих бітів змінної instr.

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

оголошення_сигналу ::=

signal список_ідентифікаторів : опис_підтипу

[ клас_сигналу ]

[ := вираз ]

клас_сигналу ::=register | bus

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

Сигнали, клас яких явно не вказано, називають незахищеними. Захищені сигнали обов’язково мають тип, що дозволяє розв’язання конфліктів.

Клас сигналу визначає,яким буде його значення,якщо всі драйвери від’єднано. Сигнал класу регістр після відключення драйверів зберігає останнє своє значення. Такі сигнали використовують для моделювання елементів пам`яті. Значення сигналу класу шина,коли від нього відключено всі драйвери, визначається функцією розв`язанння конфліктів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]