Ответы:
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 подразумевает триггер:
logic a; //logic is SystemVerilog, could be a 'reg'
logic k; // Driven by RTL not shown
always @(posedge clk or negede rst_n) begin
if (~rst_n) begin
a <= 'b0 ;
end
else begin
a <= k ;
end
end
Комбинаторные побитовые операторы:
logic [1:0] n;
logic [1:0] m;
logic [1:0] result;
assign result = n & m ;
Уровень шлюза - это конструкция с использованием логических элементов (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Он не нуждается в синтезе или является результатом синтеза. Это самый низкий уровень абстракции. это логические элементы, которые вы будете использовать на чипе, но в нем отсутствует позиционная информация.
Уровень ворот Verilog (та же функция, что и выше):
wire a;
wire k;
DFFRX1 dffrx1_i0 (
.Q (a), //Output
.QN( ), //Inverted output not used
.D (k), //Input
.CK(clk), //Clk
.RN(rst_n)// Active Low Async Reset
);
комбинаторный
wire [1:0] n;
wire [1:0] m;
wire [1:0] result;
AND2X1 and2x1_i0 (
.Y( result[0]),
.A( n[0] ),
.B( m[0] )
);
AND2X1 and2x1_i1 (
.Y( result[1]),
.A( n[1] ),
.B( m[1] )
);
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 выполняется с идеальными компонентами.