Тема 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