Оператор block

Зміст Наступна

Вивчення VHDL

Оператор block

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

\оператор block\::=[\мітка\]: block [\вираз стримування\] [іs]
       [generіc(\оголошення налагоджувальної константи\
           {; \оголошення налагоджувальної константи\});]
       [generіc map(\зв’язування налагоджувальної константи\
           {, \зв’язування налагоджувальної константи\});]
       [port (\оголошення порту\ {;\оголошення порту\});]
       [port map (\зв’язування порту\
           {,\зв’язування порту\})];
           {\оголошення в блоці\}
       begіn
           {\паралельний оператор\ }
     end block [\мітка\];

В описі блоку фраза 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 при синтезі не рекомендується.

Анатолій Сергієнко
E-mail: aser@comsys.kpi.ua