HDL - это универсальное имя для всех языков определения оборудования (Verilog, VHDL и т. Д.), Точно так же, как объектно-ориентированный может ссылаться на C ++, Java и т. Д.
RTL, с другой стороны, является способом описания схемы.
Вы пишете свой код уровня RTL на языке HDL, который затем переводится (с помощью инструментов синтеза) в описание уровня шлюза на том же языке HDL или на любом другом устройстве / процессе, которое вы примете.
Позвольте привести пример. Вот строка Verilog (HDL), описывающая мультиплексирование в RTL:
assign mux_out = (sel) ? din_1 : din_0;
Ваш инструмент синтеза может взять это и преобразовать в набор логических элементов или просто в макрос mux, который поддерживается вашим конечным устройством. Например, это может привести к созданию макроса mux
mux u3 (mux_out, din_1, din_0);
В обоих случаях вы можете подавать одни и те же входы на блок (RTL или уровень шлюза), и ваш вывод должен быть одинаковым. Фактически есть инструменты, которые проверяют вывод вашего синтеза по сравнению с вашим кодом RTL, чтобы убедиться, что инструмент случайно не оптимизировал или не изменил что-то во время синтеза, что вызвало несоответствие. Это называется формальной проверкой.
По ряду причин, функциональной совместимости, простоты изменения, понятности вы пишете свое описание цифровой схемы как RTL, а не на уровне шлюза.
HDL (Описание аппаратного языка) - это тип используемого языка, Verilog / VHDL, в отличие от JavaScript, не являющегося HDL.
RTL (уровень регистрации-передачи) - это уровень абстракции, на котором вы пишете. Я имею в виду три уровня: Поведенческий, RTL, Уровень шлюза.
Поведенческий имеет самый высокий уровень абстракции, который описывает общее поведение и часто не синтезируется, но полезен для проверки.
RTL описывает аппаратное обеспечение, которое вы хотите, подразумевая логику. определение триггеров, защелок и как данные передаются между ними. Это можно синтезировать, синтез может изменить / оптимизировать используемую логику, но не поведение. Переключение мультиплексоров для ворот и т. Д. Иногда инвертирование сигналов для лучшей оптимизации дизайна.
Verilog RTL подразумевает триггер:
Комбинаторные побитовые операторы:
Уровень шлюза - это конструкция с использованием логических элементов (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Он не нуждается в синтезе или является результатом синтеза. Это самый низкий уровень абстракции. это логические элементы, которые вы будете использовать на чипе, но в нем отсутствует позиционная информация.
Уровень ворот Verilog (та же функция, что и выше):
комбинаторный
источник
MyReg[7..1] := MyReg[6..0]; MyReg[0] := SerInput; MyReg.Clk = SerClk; MyReg[7..0].AR = !InBus[7..0] & Load; MyReg[7..0].AP = InBus[7..0] & Load;
(асинхронный сдвиговый регистр с параллельной нагрузкой, который может быть реализован на CPLD Xilinx 9536 с использованием блоков с асинхронным сбросом / предустановкой), это будет считаться RTL или уровнем шлюза?AND(.a(),.b()) OR(.a(),.b())
чисто логические ворота, подключаемые. У меня сложилось впечатление, что RTL - это то, что вы намереваетесь синтезировать, даже комбинаторные схемы, поскольку вы все еще описываете изменение данных, но не логические элементы непосредственно.MyLatch
, это базовая ячейка, созданная вами, или подразумеваемая защелка? Если вы создаете экземпляр шлюза, это уровень шлюза. Если вы подразумеваете это, это RTL. С библиотекой уровня ворот будет связано время для моделирования условий гонки / сбоев и т. Д. Моделирование RTL выполняется с идеальными компонентами.