Реализация поведения оборудования невозможна без условных операторов и механизмов управления логикой. Verilog предоставляет набор блоков управления потоком для этих целей. if-else-if Этот условный оператор решает, выполнять ли определенные операторы. Он очень похож на if-else-if в C. Если выражение
Блокирующие назначения (=) Блокирующие назначения выполняются с помощью = и выполняются последовательно внутри процедурного блока. Однако это не предотвращает выполнение операторов в параллельных блоках. module tb; reg [7:0] a, b, c, d, e; initial begin a = 8hDA; $display ([%0t] a=0x%0h
Размещение значений на сигналах (nets) и переменных называется назначениями (assignments). Существует три основных типа: Процедурные (Procedural) Непрерывные (Continuous) Процедурные непрерывные (Procedural continuous) Допустимые значения левой части (LHS) Назначение состоит из двух частей: право
Существуют способы группировать набор операторов в синтаксически эквивалентный одиночный оператор — блоки операторов. Два вида: последовательные и параллельные. Последовательные (Sequential) Операторы оборачиваются в begin и end и выполняются последовательно в заданном порядке. Значения задержки тра
Предыдущий пример рассматривал простой детектор последовательности. Здесь — другой пример для детектора чуть более длинного образа. Дизайн Детектор последовательности 110101: module det_110101 ( input clk, input rstn, input in, output out ); parameter IDLE = 0, S1 = 1, S11 = 2, S110 = 3, S1101 = 4,
Частый пример конечного автомата (КА) — детектор последовательности, где аппаратный дизайн должен обнаружить фиксированный образец в потоке битов на входе. Пример Детектор последовательности 1011: module det_1011 ( input clk, input rstn, input in, output out ); parameter IDLE = 0, S1 = 1, S10 = 2, S
generate блок позволяет множить инстансы модулей или выполнять условное инстанцирование любого модуля. Даёт возможность строить дизайн на основе параметров Verilog. Особенно удобно, когда одна операция или инстанс модуля нужно повторить много раз или включить код условно по заданным параметрам. gene
Весь поведенческий код пишется внутри module и endmodule. Любой цифровой дизайн, который вы хотите создать, пойдёт внутрь блока module. Порты могут быть определены или нет — позволяют сигналам входить как input или выходить как output. Модуль Пустой модуль в примере называется testbench. Имя может б
Набор Verilog-операторов обычно выполняется последовательно в симуляции. Эти операторы помещаются в процедурный блок. В Verilog два основных типа процедурных блоков — initial и always. Синтаксис initial [single statement] initial begin [multiple statements] end Для чего нужен initial блок? initial
Предыдущая статья показывала примеры комбинационной логики с always. always блок также широко используется для последовательной логики с элементами памяти (триггеры), способными удерживать значения. JK-триггер JK-триггер — один из типов триггеров для хранения значений с двумя входами данных j и k, с
Блок always в Verilog можно использовать и для последовательной, и для комбинационной логики. В предыдущей статье показаны примеры с assign. Те же дизайны рассмотрим с always. Пример #1: Простая комбинационная логика Код ниже реализует простую цифровую комбинационную логику с выходным сигналом z тип
always блок — один из процедурных блоков в Verilog. Операторы внутри always выполняются последовательно. Синтаксис always @ (event) [statement] always @ (event) begin [multiple statements] end always блок выполняется при определённом событии. Событие задаётся списком чувствительности. Что такое спи
Многобитные провода и переменные Verilog можно объединять в более крупные многобитные сети или переменные с помощью операторов конкатенации { и }, разделённых запятыми. Конкатенация допускает выражения и размерные константы как операнды дополнительно к проводам и переменным. Размер каждого операнда
Данные, которые нельзя обработать, бесполезны — в цифровых схемах и компьютерных системах всегда нужны вычисления. Разберём операторы Verilog, позволяющие инструментам синтеза реализовывать соответствующие аппаратные элементы. Арифметические операторы Если второй операнд деления или модуля равен нул
Оператор assign в Verilog обычно используется для непрерывного управления сигналом типа wire и синтезируется в комбинационную логику. Вот ещё примеры дизайнов с assign. Пример #1: Простая комбинационная логика Код ниже реализует простую цифровую комбинационную логику с выходным проводом z, непрерывн
Сигналы типа wire или подобные wire-типы требуют непрерывного присваивания значения. Например, электрический провод на макетной плате: пока к одному концу подключён аккумулятор +5В, компонент на другом конце получает нужное напряжение. В Verilog эта концепция реализуется оператором assign, где любой
Как мы видели ранее, большие и сложные дизайны строятся интеграцией множества модулей иерархическим образом. Модули могут инстанцироваться внутри других модулей, а порты этих инстансов соединяются с другими сигналами внутри родительского модуля. Эти соединения портов можно делать через упорядоченный
Порты — набор сигналов, выступающих входами и выходами модуля, и основной способ взаимодействия с ним. Представьте модуль как чип на печатной плате: очевидно, что общение с ним возможно только через его ножки. Порты — это и ножки, через которые дизайн посылает и принимает сигналы извне. Типы портов
module — блок Verilog-кода, реализующий определённую функциональность. Модули могут вкладываться друг в друга, а высокоуровневый модуль общается с низкоуровневыми через их входные и выходные порты. Синтаксис Модуль должен быть заключён между ключевыми словами module и endmodule. Имя модуля указывает
Объявление массива сети или переменной может быть скалярным или векторным. Любое число измерений создаётся указанием адресного диапазона после имени идентификатора — это многомерный массив. Массивы разрешены для типов reg, wire, integer, real. reg y1 [11:0]; // скалярный reg-массив глубины
Verilog
Управление электронагревателем воды с помощью выключателей: пошаговое руководство
Вкладывающее литье vs овермолдинг: выбор оптимального мультиматериального процесса литья под давлением
Как поверхностные финиши углеволокна влияют на качество и производительность деталей
Носимый беспроводной трибоэлектрический наногенератор для мониторинга дыхания в реальном времени