Тема 6 Оператори присвоювання значень сигналу

1. Паралельні оператори присвоювання.

До паралельних операторів присвоювання належать - простий паралельний оператор присвоювання, оператор умовного присвоювання, оператор селективного присвоювання. На відміну від послідовних операторів, паралельні можуть використовуватися не тільки всередині процесів, але й в будь-якому місці тіла архітектурного опису.

1.1.                          Простий паралельний оператор присвоювання.

Простий паралельний оператор присвоювання має такий же формат як і послідовний, але описується безпосередньо в архітектурному описі, між begin і end.

Пиклад

Architecture haddl of sm is begin

S<=(a xor b) after 4 ns; c<=(a and b) after 4 ns; end architecture haddl;

В наведеному прикладі задано два прості паралельні оператори, що активізуються при зміні будь-якого з вхідних сигналів a чи b. Обидва оператори активізуються і виконуються паралельно в модельному часі.

1.2.                           Оператор умовного присвоювання.

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

Name<=[delay_mechanism] (waveform when boolean_expression else}

Waveform [when boolean_expression];

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

Zmux: z<=d0 when sell='0' and sel0='0' else dl when sell='0' and sel0='0' else d2 when sell='l' and sel0='0' else d3 when sell='l' and sel0='l';

Цей фрагмент аналогічний наступному прикладу. Приклад

Zmux:process begin

If sel1='0' and sel0='0' then z<=d0; elsif sel1='0' and sel0='1' then z<=d1; elsif sel1='1' and sel0='0' then z<=d2; elsif sel1='1' and sel0='1' then z<=d3; end if;

Wait on d0, d1, d2, d3, sel0, sel1; end process zmux;

В останньому прикладі список чутливості для процесу відсутній. Замість нього використовується конструкція wait on зі списком сигналів. При цьому процес виконується один раз до оператора wait on і очікує поки не відбудеться зміна одного з перерахованих в списку чутливості сигналів, а потім процес виконується спочатку і т. Д.

Механізм умовних присвоюваннь і механізм процесів мають деякі відмінності у викоистанні і особливості функціонування. Так, якщо в останній секції умовного присвоювання не буде умови, то цей оператор в будь-якому випадку буде присвоювати сигналу значення. Але процес, якщо ні один з сигналів, включених до списку чутливості, не зміниться, не буде виконуватись, в результаті чого сигнал може не отримати ніякого значення і залишиться в невизначеному стані. Це проілюстровано в наступних 2 прикладах. Приклад 1

Reset_gen: reset<='1', '0' after 200 ns when extended_reset else

'1', '0' after 50 ns;

Приклад 2

Reset_gen: process begin

If extended_reset then

Reset<='1', '0' after 200 ns;

Else

Reset<='1', '0' after 50 ns; end if; wait;

End process reset_gen;

Якщо за час виконання моделювання сигнал extended_reset ні разу не змінював свого значення, то процес в прикладі 2 не виконається ні разу і в результаті сигнал reset залишиться невизначеним. Проте в прикладі 1 умовний оператор присвоє в такому випадку другий варіант записаний в операторі ('1' - в момент початку моделювання і '0' через 50 нс.).

Крім того, якщо при виконанні деякої логічної умови не потрібно виконувати ніяких дій з сигналом, замість форми сигналу пишеться слово unaffected наприклад:

St: r<=a when s1='1' and s2='3' else

Unaffected when s1='1' and s2='1' else b; при рівності одиниці обох сигналів s1, s2, оператор не буде змінювати значення сигналу z.

2. Оператор селективного присвоювання оператор селективного присвоювання має наступний синтаксис: with expression select

Name<=[delay_mechanism] {waveform when choices,} waveform when choices;

Оператор селективного присвоювання дозволяє робити вибір між

Декількома можлививми формами сигналу в залежності від значення

Виразу в заголовку оператора. Цей оператор чутлививй до зміни всіх

Сигналів (і тих, що входять у вираз заголовку, і тих, що входять в форми,

Які визначають вихідний сигнал). В операторі селективного

Присвоювання перевіряються всі умови і необхідно щоб набір умов

Охоплюав весь діапазон можливих значень. Щоб в умові не робити

Повного переліку значень, можна використати ключове слово others

(інші значення).

Приклад

Entity sell is port (data_a, data_b, data_c: in std_logic_vector(0 to 30); isr: in integer:=1;

Data_out: out std_logic_vector(0 to 30); end;

Architecture behavior of sell is

Begin

With isr select

Data_out<=data_a when 1, data_b when 2, data_c when others;

End;

Дописати про атрибути сигналів, оператор wait і asser

1 2 3 4 5  Наверх ↑