Изучение VHDLПараллельные операторы.
VHDL – это язык параллельного программирования. Параллелизм в программе задается явным образом в параллельных операторах. Параллельным операторам соответствуют виртуальные процессорные элементы в программистской модели вычислителя VHDL. Параллельные операторы образуют исполнительную часть тела архитектуры. Оператор процесса - это основной параллельный оператор. Оператор вставки компонента - также важный оператор, наиболее встречаемый в проектах. В этом разделе рассмотрены эти и другие параллельные операторы.
Все параллельные операторы, кроме оператора блока и вставки компонента, могут быть заменены на эквивалентные операторы процесса, в которых список чувствительности содержит все входные сигналы выражений исходного оператора и у которых оператор wait стоит последним в цепочке последовательных операторов.
Оператор параллельного присваивания.
Этот оператор имеет такой же синтаксис, как и оператор присваивания сигналу в процессе. Такой оператор эквивалентен оператору процесса, в котором этот оператор повторен в его исполнительной части, а последним оператором стоит оператор wait со списком чувствительности. Например, следующие два оператора эквивалентны:
ADDER:A<=B+C;
ADDER_P:process begin
A<=B+C;
wait on B,C;
end process;
Оператор условного параллельного присваивания.
Оператор условного параллельного присваивания имеет синтаксис:
\условное параллельное присваивание\::= \имя\<= [\способ задержки\]
{\график\ when \булевское выражение\ else }
\график\[when \булевское выражение\];
где определение способа задержки и графика представлено выше при описании оператора присваивания сигналу.
Любой оператор условного параллельного присваивания имеет эквивалентное представление в виде процесса, как например, оператор:
cntrl<= one when st=1 else
two when st=2 or st=3 else
three;
эквивалентен оператору
process(st,one,two,three)
begin
if st=1 then
cntrl<= one;
elsif st=2 or st=3 then
cntrl<= two;
else
cntrl<=three;
end if;
end process;
Оператор селективного параллельного присваивания.
Оператор селективного параллельного присваивания имеет синтаксис:
\селективное параллельное присваивание\::= with \выражение\ select
{\имя\<= [\способ задержки\]{\график\ when \альтернативы\,}
\график\[when others ];
где \альтернативы\ имеют то же значение, что и в операторе case. Этот оператор эквивалентен соответствующему процессу, как например, оператор:
with st select
cntrl<= one when 1,
two when 2 to 3,
three when others;
выполняет такие же действия, что и процесс:
process(st,one,two,three)
begin
case st is
when 1 => cntrl<= one;
when 2 to 3 => cntrl<= two;
when others => cntrl<= three;
end case;
end process;
Требования к выражению селектора и альтернативам оператора такие же, как у оператора case. Так, каждая из альтернатив должна быть такого же типа, что и \выражение\ и представлена статическим выражением или диапазоном. Никакие два значения, получаемые из выражений альтернатив, не должны быть равны друг другу.
Параллельный оператор assert.
Этот оператор имеет такой же синтаксис, как и соответствующий ему последовательный оператор. Он выполняется точно также, как и процесс, в исполнительной части которого стоит последовательный оператор assert с таким же содержанием.
Параллельный вызов процедуры.
Параллельный вызов процедуры имеет такой же синтаксис, как у последовательного вызова процедуры. Он исполняется точно так же, как процесс, который имеет в своей исполнительной части такой же вызов процедуры с такими же параметрами и оператор wait ожидания прихода сигналов - входных параметров. Поэтому каждый параллельный вызов процедуры соответствует некоторому виртуальному процессорному элементу, исполняющему алгоритм этой процедуры.
Если программа предназначена для синтеза, то процедура, вызываемая параллельно, не должна иметь операторов wait. Такая процедура отображается в комбинационную схему или комбинацию шин, т.е. некоторый специализированный процессорный элемент.
Отложенные параллельные операторы.
Так как всем вышеперечисленным параллельным операторам ставится в соответствие оператор процесса, то поскольку процесс бывает отложенным, то и эти параллельные операторы могут быть отложенными. Такие операторы, как и отложенный процесс, обозначаются ключевым словом postponed, которое ставится перед оператором.