Введение в язык Verilog
Verilog – язык описания аппаратуры (HDL). Это язык, используемый для описания цифровых систем, например, сетевого коммутатора, микропроцессора, памяти или простого триггера. Это означает, что на нем можно описать любую (цифровую) аппаратуру, на любом уровне.
Verilog Code:
//код D триггера module d_ff ( d, clk, q, q_bar); input d ,clk; output q, q_bar; wire d ,clk; reg q, q_bar; always @ (posedge clk) begin q <= d; q_bar <= ! d; end endmodule
Можно описать простой триггер, показанный на рисунке выше, и можно описать сложное устройство, содержащее миллион логических элементов. Verilog – это один из языков, используемых в промышленности для описания аппаратуры. Он позволяет нам проектировать цифровые системы на уровнях: поведения, передачи данных между регистрами (RTL), логики, и уровне переключателей (транзисторов). Verilog позволяет разработчикам описывать поведение устройства, откладывая детали его выполнения на будущее.
Многие инженеры, желающие изучить Verilog часто интересуются: – сколько времени займет его изучение? Ответ автора будет следующим: – не больше недели, если вы уже знакомы хотя бы с одним из языков программирования.
Методы проектирования
Verilog, подобно другим языкам описания аппаратуры, позволяет вести проектирование как восходящим, так и нисходящим методом.
Восходящий метод проектирования
Это традиционный метод проектирования в электронике. Каждый проект выполняется снизу, начиная с использования стандартной логики (См. подробности в Digital Section). С увеличением сложности проекта такой метод становится использовать все труднее, вплоть до невозможности. Современные разработки содержат специализированные интегральные схемы (ASIC) или микропроцессоры, содержащие тысячи транзисторов. Поэтому традиционный восходящий метод разработки уступает дорогу новому, структурному, иерархическому методу, дающему возможность справиться со сложностью новых устройств.
Нисходящий метод проектирования
Предпочтительный способ для всех разработчиков – нисходящий. Он обеспечивает возможность раннего тестирования, легкого изменения технологий, структурирования системы и еще множество других преимуществ. Однако такой метод, если строго его придерживаться, связан со значительными трудностями. По этой причине, большинство разработчиков используют комбинацию восходящего и нисходящего методов, используя их преимущества по обстоятельствам.
Пример нисходящего проектирования
Уровни абстракции Verilog
Verilog поддерживает проектирование на разных уровнях абстракции. Три из них очень важны:
- Уровень поведения
- Уровень межрегистровых передач (УМП),
- Уровень логических элементов
Уровень поведения
Этот уровень описывает систему при помощи конкурирующих алгоритмов (поведения). Каждый алгоритм последователен, что означает его представление в виде набора инструкций, выполняющихся одна за другой. Функции, задачи и постоянные блоки являются основными элементами. Структурная реализация на этом уровне не учитывается.
Уровень межрегистровых передач (УМП)
На данном уровне разработка выполняется путем описания операций и передачи данных между регистрами. При этом используется тактовый сигнал. Уровень RTL требует привязки всех операций ко времени и учета тактовых сигналов (тайминг). Современное определение RTL кода таково: любой код, поддающийся синтезу, можно считать RTL-кодом.
Уровень логических элементов
На уровне логики характеристики системы описываются связями между логическими элементами и их временными свойствами (задержкой распространения сигналов). Все сигналы считаются дискретными. Они должны иметь только стандартные логические уровни: 0, 1, X, Z. Используемые операции являются стандартными логическими примитивами: И, ИЛИ, НЕ и т.д. Нужно учесть, что использование уровня логики не является хорошей идеей. Такой уровень автоматически синтезируется соответствующими программами, и полученный список узлов используется симулятором и для дальнейших целей.