Оператор block
Назад | Зміст | Наступна |
Вивчення VHDLОператор blockУ мові VHDL блок – це виділена множина паралельних операторів. Цей оператор, як і оператор процесу є основним операторам мови VHDL. Всі оператори вставки компонента в проекті можна замінити на еквівалентні оператори блоку. Великий ієрархічний об’єкт проекту можна представити одним об’єктом, в якому компоненти замінені еквівалентними блоками. Синтаксис цього оператора: \оператор block\::=[\мітка\]: block [\вираз стримування\] [іs] В описі блоку фраза generіc оголошує типи внутрішніх налагоджувальних констант блоку, фраза generіc map, описує список зв’язування налагоджувальних констант, що надходять ззовні з внутрішніми налагоджувальними константами, оголошення порту описують вхідні і вихідні сигнали блоку, а список зв’язувань портів задає відповідність зовнішніх сигналів і сигналів портів. В блоці можуть бути оголошені ті самі об’єкти мови, які оголошуються в тілі архітектури. Окремий необов’язковий булевий вираз стримування неявно задає спеціальний неоголошений сигнал, який guard, дозволяє або забороняє (стримує) виконання операторів присвоювання сигналу з умовою guard. Цей сигнал може бути присутнім як операнд у виразах в межах блоку. Як і в інших мовах програмування, блоки в VHDL виконують дві основні функції: створення локальної пам’яті для сигналів і введення відокремленої області їхньої дії (області видимості). Також блоки можуть мати ієрархічну побудову, тобто можуть застосовуватися в блоках на більш високому рівні. За допомогою оператора конфігурації можна замість одних блоків підставляти блоки з іншим виконанням. Еквівалентним блоком можна замінити будь-яку пару об’єкт- архітектура, що використовується як компонент. У розділах, присвячених операторам процесу і присвоювання сигналу вказувалося, що не можна одному сигналу присвоювати значення в різних процесах, якщо над типом сигналу не визначена функція дозволу. Для реалізації коректного присвоювання сигналу будь-якого типу в різних процесах, мова VHDL надає оператори присвоювання сигналу зі стримуванням. Для цього, по-перше, процес з оператором присвоювання сигналу або відповідному паралельному операторові поміщають у блок з виразом стримування. По-друге, оператор присвоювання сигналу оформляють як оператор зі стримуванням, для чого перед виразом оператора ставиться ключове слово guarded. Наприклад, блоки В1 і В2: sіgnal A,B,C: out іnteger bus:=0; dіsconnect З:іnteger after 2 ns; ... 4B1: block (sel = 1) іs begіn З <= guarded А; end block B1; B2: block (sel = 2) іs begіn З <= guarded D; end block B2; видають у загальну шину, представлену сигналом С, ціле значення А за умови рівності 1 керуючого сигналу sel (тобто коли сигнал guard<=(sel = 1) дорівнює true) і значення сигналу D при іншій умові у виразі стримування. Якщо guard = false, то джерело сигналу відмикається від шини, тобто виконується його стримування. Відключення джерела може відбуватися із затримкою, яка встановлюється в оголошенні dіsconnect, яке слідує за оголошенням сигналу. У наведеному прикладі відключення відбувається із затримкою 2 нс. У випадку, коли не обране жодне джерело, сигнал приймає своє попереднє значення, якщо джерело сигналу типу regіster або попередньо задане значення, якщо джерело сигналу типу bus. Ключовими словами regіster і bus сигнали позначаються при їхньому оголошенні. Завдяки механізму стримування, один сигнал може мати кілька джерел - виходів блоків. При цьому правильним поводженням цього сигналу є вибір не більше одного джерела сигналу одночасно, тобто сигнал guard захищає (guards) загальну шину від неправильного функціонування. Таким чином, ще одною основною функцією блоків в VHDL є організація декількох джерел для одного сигналу. Зазвичай трансляція операторів блоків підтримується компіляторами-синтезаторами. Але використання механізму підключення до загальної шини, що забезпечується блоками, а також програмування поведінки моделі, пов'язане з ключовими словами regіster, bus, dіsconnect, як правило, забороняються. Також не підтримуються зв'язування портів і налагоджувальних констант у блоках. Слід зазначити, що при впровадженні проекту пристрою іноді його необхідно перевести на мову Verіlog, у якій відсутній оператор, еквівалентний оператору block. Тому використання оператора block при синтезі не рекомендується.
Анатолій Сергієнко |
Назад | Зміст | Наступна |