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

Мастерство VHDL и Verilog: написание чистой комбинационной и последовательной логики

Использование блоков Process в VHDL и Always в Verilog

И в VHDL, и в Verilog блоки Process (VHDL) и Always (Verilog) являются основными конструкциями для описания поведения аппаратуры. Они используются для моделирования двух различных типов логики:

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

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

Почему D-триггеры важны

В сердце каждой последовательной схемы лежит D-триггер, минимальный элемент, захватывающий и хранящий один бит данных на фронте такта. Понимание его тайминга и ограничений setup/hold необходимо перед погружением в HDL-код более высокого уровня.

Мастерство VHDL и Verilog: написание чистой комбинационной и последовательной логики

Читатели, незнакомые с основами D-триггера, должны прерваться здесь, чтобы повторить базовую работу триггера.

Комбинационная логика в блоке Process/Always

Хотя возможно, использование блока Process или Always исключительно для комбинационных присваиваний редко рекомендуется. Прямое непрерывное присваивание понятнее и менее ошибочно.

Пример VHDL

process (input_1, input_2) begin and_gate <= input_1 and input_2; end process; 

Пример Verilog

always @ (input_1 or input_2) begin and_gate = input_1 & input_2; end 

Список чувствительности (например, input_1, input_2) гарантирует выполнение блока при изменении любого перечисленного сигнала. Однако ту же функциональность можно выразить более лаконично с непрерывным присваиванием:

-- VHDL and_gate <= input_1 and input_2; 
// Verilog assign and_gate = input_1 & input_2; 

Эти операторы эквивалентны по эффекту, но непрерывное присваивание предпочтительно для чистой комбинационной логики.

Последовательная логика: распространенный вариант использования

Блоки Process (VHDL) и Always (Verilog) блестят при моделировании тактируемого поведения. Типичный паттерн включает список чувствительности с тактом и опциональным асинхронным сбросом:

Пример последовательной логики VHDL

process (clk, rst_n) begin if rst_n = '0' then q <= '0'; elsif rising_edge(clk) then q <= d; end if; end process; 

Пример последовательной логики Verilog

always @(posedge clk or negedge rst_n) begin if (!rst_n) q <= 1'b0; else q <= d; end 

Эти фрагменты иллюстрируют, как D-триггер неявно инстанцируется HDL. Проектировщики должны использовать этот паттерн всякий раз, когда сигнал должен быть зарегистрирован или состояние сохранено.

Лучшие практики

Следуя этим рекомендациям, вы напишете HDL, который эффективен для синтеза и прост для верификации.

VHDL

  1. Мастерство VHDL и Verilog: написание чистой комбинационной и последовательной логики
  2. Infrastructure as Code: преимущества, вызовы и лучшие практики
  3. Комбинационные логические функции: основы и практические применения
  4. Что такое программирование: практическое руководство по языкам, рабочим процессам и частым вызовам
  5. Освоение Xilinx Vivado: Integrated Logic Analyzer (ILA) и Virtual Input/Output (VIO) для отладки
  6. Stack vs Heap в Java: Практическое руководство по распределению памяти
  7. Как читать и писать CSV файлы в Python: подробное руководство
  8. Ladder Logic 102: плюсы, минусы и когда применять
  9. Цифровое написание процедур: простое, эффективное и надежное
  10. G-код против M-кода: ключевые различия для операторов станков с ЧПУ