Змінні та сигнали в мові VHDL 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Змінні та сигнали в мові VHDL



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

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

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

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

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

variable count: natural:= 0;

variable trace: trace_array;

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

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

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

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

variable instr: bit_vector(31 down to 0);

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

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

 

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

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

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

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

[:= вираз ]

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

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

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

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


 

Присвоювання сигналу в мові VHDL

Тут є невелике перекриття з питанням про затримки (не перекатувати в тупу)

 

 


 

Планування транзакцій та драйвер сигналу в мові VHDL

Це питання тісно пов’язано із моделлю дискретного часу, тому не має дивувати певне перекриття матеріалу. Отже, як відомо при моделюванні виконується розрахунок сигналів у дискретні моменти часу. Якщо у деякий момент часу один чи кілька вхідних сигналів об’єкта змінилися, то об’єкт реагує на ці зміни шляхом планування нових значень, що будуть присвоєні сигналам, які з’єднані з його виходами у пізніші моменти часу. Це називається плануванням транзакцій сигналу. Нові значення вихідних сигналів розраховуються шляхом виконання коду, який описує об’єкти. Кожна трансакція характеризується часом, на який вона запланована, і значенням, яке має прийняти сигнал у цей час. Множина запланованих транзакцій складає зміст драйверу. Інформація про нову транзакцію додається до драйверу сигналу оператором присвоювання значення сигналу, в якому вказується значення сигналу, що планується, і затримка між часом, коли виконується цей оператор, і часом, на який буде заплановано цю трансакцію. Якщо затримка явно не вказана в операторі присвоювання значення сигналу, то трансакцію буде заплановано на наступний крок моделювання. Така затримка називається дельта-затримкою. Але у будь-якому випадку трансакція виконується пізніше ніж оператор, що її планує.

Для повного розуміння питання непогано було би розглянути більш детально процес моделювання адже поняття трансакції відіграє тут далеко не останню роль. І взагалі цей розгляд дасть можливість практично зрозуміти, де це використовується. (АЛЕ ЦЕ ТІЛЬКИ НА МОЮ ДУМКУ, ВЗАГАЛІ ТЕ ЩО ДАЛІ КРАЩЕ ПИСАТИ ПЕРЕПИТАВШИ У ВИКЛАДАЧА) Таким чином на початку моделювання виконується ініціалізація, а згодом повторюється цикл моделювання, що складається із двох стадій. За ініціалізації всім сигналам присвоюються початкові значення, час моделювання встановлюється на нуль, і один раз виконуються описи всіх об’єктів. Це зазвичай приводить до планування трансакцій хоч одного сигналу на пізнішій момент часу.

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

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

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



Поделиться:


Последнее изменение этой страницы: 2016-07-14; просмотров: 256; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.201.28.181 (0.02 с.)