Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> VHDL

Освоение параллельных операторов в VHDL: практическое руководство

Параллельный оператор (concurrent statement) в VHDL — это присваивание сигнала, которое находится непосредственно в архитектуре, вне любого блока process. Его также называют параллельным присваиванием или параллельным процессом.

Когда вы пишете параллельный оператор, вы эффективно создаете процесс, который автоматически чувствителен к каждому сигналу, появляющемуся в правой части присваивания. Другими словами, параллельное присваивание — это синтаксический сахар для процесса с полным списком чувствительности.

Этот сокращенный синтаксис особенно удобен, когда вы хотите реализовать простую комбинационную логику, управляющую единственным сигналом. Вместо написания полной конструкции process со списком чувствительности, вы можете назначить целевому сигналу прямо в теле архитектуры.

Этот урок является частью серии базовых уроков VHDL.

Когда он используется правильно, намерение кода остается кристально ясным — нет необходимости загромождать дизайн процессом для каждого бита, который вы хотите переключить.

Упражнение

В этом видео мы учимся создавать параллельный оператор:

Итоговый код, который мы создали в этом уроке:

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity T13_ConcurrentProcsTb is end entity; architecture sim of T13_ConcurrentProcsTb is signal Uns : unsigned(5 downto 0) := (others => '0'); signal Mul1 : unsigned(7 downto 0); signal Mul2 : unsigned(7 downto 0); signal Mul3 : unsigned(7 downto 0); begin process is begin Uns <= Uns + 1; wait for 10 ns; end process; -- Process multiplying Uns by 4 process is begin Mul1 <= Uns & "00"; wait on Uns; end process; -- Equivalent process using sensitivity list process(Uns) is begin Mul2 <= Uns & "00"; end process; -- Equivalent process using a concurrent statement Mul3 <= Uns & "00"; end architecture; 

Окно волновой формы в ModelSim после нажатия run и увеличения временной шкалы:

Освоение параллельных операторов в VHDL: практическое руководство

Мы видим из волновой формы, что Mul1, Mul2 и Mul3 ведут себя абсолютно одинаково. Это подтверждает, что параллельный оператор и два процесса, которые мы написали, полностью эквивалентны.

Параллельный оператор работает как процесс: все сигналы, появляющиеся в правой части <=, неявно добавляются в его список чувствительности. Следовательно, сигнал слева обновляется всякий раз, когда меняется любой из оцениваемых сигналов.

В этом примере мы умножали сигнал Uns на 4, используя левый битовый сдвиг. Все наши сигналы имеют тип unsigned, поэтому компилятор трактует их как числовые значения. Добавление двух нулевых бит справа от двоичного числа эквивалентно умножению его на 4.

Освоение параллельных операторов в VHDL: практическое руководство

Выводы

Переходите к следующему уроку »

VHDL

  1. Пример процедуры VHDL: инкремент std_logic_vector
  2. Создание списков строк в VHDL: лучшие практики и пример
  3. Создание Tcl-управляемого тестбенча для VHDL-модуля кодового замка
  4. Корректное завершение симуляции VHDL-тестбенча
  5. Реализация PWM-контроллера в VHDL: проектирование, симуляция и FPGA-демо
  6. Проектирование надежного кольцевого буфера FIFO на VHDL в блочной ОЗУ
  7. Как создать самопроверяющийся тестбенч в VHDL — практическое руководство
  8. Реализация динамического связного списка в VHDL с защищенными типами и указателями доступа
  9. Использование внутрипроцессных процедур для более чистого проектирования FSM на VHDL
  10. Освоение функций VHDL: практическое руководство по эффективному дизайну