Читайте также:
|
|
VHDL имеет несколько наименований операторов последовательной логики (sequential logic), которые включаются в тело оператора process:
А) Оператор декларирующий Переменную (variable declaration) имеет такую конструкцию:
variable variable-names: variable-typ e;
Б) Оператор присвоения значения переменной (variable-assignment statement) имеет такую конструкцию:
variable-name := expressio n
Переменная (variable) в языке VHDLподобна сигналам, за исключением того, что она обычно не имеют физической реализации. Она используются только в функциях, процедурах и в теле оператора процесс, чтобы следить за состоянием некоторых промежуточных данных в пределах оператора process и являются не видимой вне оператора process.
Example - Пример показывающий применение переменной в теле оператора proces s. VHDL Архитектура обрабатывает поток данных и описывает проект детектора простых чисел)
architecture prime6_arch of prime is
Begin
proces s(N)
variable N3L_N0, N3L_N2L_N1, N2L_N1_N0, N2_N1L_N0: STD_LOGIC;
Begin
N3L_N0:= not N(3) and N(0);
N3L_N2L_N1:= not N(3) and not N(2) and N(1);
N2L_N1_N0:= not N(2) and N(1) and N(0);
N2_N1L_N0:= N(2) and not N(1) and N(0);
F <= N3L_N0 or N3L_N2L_N1 or N2L_N1_N0 or N2_N1L_N0;
end proces s;
end prime6_arch;
В) Оператор sequential signal-assignment – оператор назначения сигнала для проектирования устройств последовательной логики имеет такую конструкцию:
signal-name <= expressio n;
По конструктивному оформлению он такой же как конкурентныйоператор назначения сигнала (concurrent signal-assignment statement). Однако он - последовательный (sequential), потому что располагается в теле оператора process, а не в теле архитектуры.
Так как, мы не имеем начальных определений сигнала, которому назначается значение при выполнении оператора process, имя сигнала (signal-name) при оформлении sequential signal-assignment должно быть указано в списке чувствительности.
Г) Оператор if...then (if statement ) – Оператор условной передачи управления имеет несколько вариантов конструктивного оформления:
if boolean-expression then sequential-statement end if; --вид 1
if boolean-expression then --вид 2
sequential-statement
else sequential-statement
End if;
--вид 3
if boolean-expression then
sequential-statement
elsif boolean-expression then sequential-statement
…………………………………………………………………………………..
elsif boolean-expression then sequential-statement
else sequential-statement
End if;
Принцип действия оператора if...then в языке VHDL аналогичен принципу действия оператора if в традиционных языках программирования.
Example – Пример, показывающий применение оператора if...then для детектирования простых чисел:
architecture prime7_arch of prime is
Begin
proces s(N)
variable NI: intege r;
Begin
NI:= CONV_INTEGER(N);
if NI=1 or NI=2 then F <= '1';
elsif NI=3 or NI=5 or NI=7 or NI=11 or NI=13 then F <= '1';
else F <= '0';
End if;
end proces s;
end prime7_arch;
Д). Оператор case (case statement ) -Оператор выбора имеет такую конструкцию:
case expression is
when choices => sequential-statements -- one or more sequential
-- statements can be used
…………………………………………………………………………………………..
when choices => sequential-statements
when others => sequential-statements -- optional; to denote all
--values that have not yet been covered.
End case;
Принцип действия оператора case в языке VHDL аналогичен принципу действия оператора case в традиционных языках программирования.При синтезе цифровых устройств
оператор case обычно более читаем, и имеет более высокий уровень выхода годных СБИС.
Конструктивные элементы choices (выбор) должен быть взаимоисключающими и содержать все возможные варианты.
Example – Пример показывающий применение оператора case для детектирования простых чисел:
architecture prime8_arch of prime is
Begin
proces s(N)
Begin
case CONV_INTEGER(N) is
when 1 => F <= '1';
when 2 => F <= '1';
when 3 | 5 | 7 | 11 | 13 => F <= '1';
when others => F <= '0';
End case;
end proces s;
end prime8_arch;
Е) Оператор loop (loop statements) - Оператор цикла имеет несколько вариантов конструктивного оформления:
for identifier in range loop -- for loop --вид 1
sequential-statement
…
sequential-statement
End loop;
loop -- infinite loop --(бесконечный цикл) --вид 2
sequential-statement
…
sequential-statement
End loop;
Принцип действия оператора loop в языке VHDL аналогичен принципу действия операторов цикла в традиционных языках программирования. В операторе for... loop конструктивныйэлемент identifier объявлен неявно своим написанием {видом}. Он должен и иметь тот же тип как и диапазон (rang e ). Эта переменная может использоваться в теле оператора for... loop. Однако ни один из операторов содержащихся в теле цикла for... loop не должен изменять ее значения.
Example – Пример - поведенческого описания VHDL проекта для детектирования простых чисел, где применен оператор loop:
library IEEE;
use IEEE.std_logic_1164.all;
entity prime9 is
port (N: in STD_LOGIC_VECTOR (15 downto 0);
F: out STD_LOGIC);
end prime9;
architecture prime9_arch of prime9 is
Begin
proces s(N)
variable NI: intege r;
variable prime: boolea n;
Begin
NI:= CONV_INTEGER(N);
prime:= true;
if NI=1 or NI=2 then nul l; -- анализ граничных значений
Else
for i in 2 to 253 loop
if NI mod i = 0 then
prime:= fals e;
exi t;
end i f;
end loo p;
end i f;
if prime then F <= '1';
else F <= '0';
end i f;
end proces s;
end prime9_arch;
Ж) Оператор exit (exit statements) – Вспомогательный Оператор передачи управления, обеспечивающий выхода из цикла. Управление передается на оператор стоящий после тела оператора цикла (после end loo p;). Он имеет следующий синтаксис:
exit; -- transfers control to the statement immediately
- -following the loop end(Оператор выхода из цикла)
З) Оператор next (next statements) – Вспомогательный Оператор передачи управления, обеспечивающий прекращение выполнения очередной циклической итерации с последующей передачей управления на следующий шаг цикла. Он имеет следующий синтаксис:
next; -- causes any remaining statements in the
-- loop to be bypassed and begins the next iteration
-- of the loop
И) Оператор null (null statements) - Пустой оператор. Этотоператор не выполняет никаких действий. Его функция только переход к следующему оператору. Он имеет следующий синтаксис:
Null;
Дата добавления: 2015-11-14; просмотров: 40 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Элементы проектирования устройств комбинаторной логики через поток данных (Dataflow design elements) | | | На потоке данных (Dataflow design data) |