RTL проти HDL? Яка різниця


24

У чому головна відмінність RTL від HDL? Якщо чесно, я шукав / гуглив це, але люди розділені у своїх думках. Я пам'ятаю одне твердження, що HDL - це комп'ютерна мова, яка використовується для опису цифрової схеми, і коли вона синтезується, то вона вважається RTL.

Відповіді:


18

HDL - це найменування для всіх мов визначення апаратних засобів (Verilog, VHDL тощо) точно так само, як об'єктно-орієнтоване може посилатися на C ++, Java тощо.

RTL з іншого боку - це спосіб опису схеми.

Ви пишете свій код рівня RTL мовою HDL, який потім буде переведений (інструментами синтезу) для опису рівня воріт на тій самій мові HDL або будь-якого вашого цільового пристрою / процесу.

Дозвольте навести вам приклад. Ось рядок Verilog (HDL), що описує mux у RTL:

assign mux_out = (sel) ? din_1 : din_0;

Ваш інструмент синтезу може взяти це і перетворити його на набір логічних воріт або просто в мак-макс, який підтримується кінцевим пристроєм. Наприклад, він може створити макрос mux

mux u3 (mux_out, din_1, din_0);

В обох випадках ви можете подавати однакові входи до блоку (RTL або рівень воріт), і ваш вихід повинен бути однаковим. Насправді є інструменти, які перевіряють вихід вашого синтезу на ваш код RTL, щоб переконатися, що інструмент не випадково оптимізував чи змінив щось під час синтезу, що спричинило невідповідність. Це називається формальною верифікацією.

З різних причин, сумісності, простоти змін, зрозумілості ви пишете свій опис цифрової схеми як RTL, а не на рівні воріт.


3
Приємна відповідь, лише подальше уточнення ... RTL передбачає заданий стиль дизайну - логічну хмару, регістр, логічну хмару, регістр тощо, що передбачає синхронний (тактований) дизайн. Якби ви кодували у своєму hdl для годинникового (асинхронного) дизайну, ваш інструмент синтезу може використовувати щось інше, ніж RTL.
заповнювач

,, Насправді є інструменти, які перевіряють вихід вашого синтезу на ваш RTL-код, щоб переконатися, що інструмент не випадково оптимізував або змінив щось під час синтезу, що спричинило невідповідність. Це називається формальною верифікацією. '' Ні, це не так. Це називається перевірка логічної еквівалентності або перевірка формальної еквівалентності. Формальна перевірка - це скоріше процес доведення (використовуючи математичні методи, без моделювання / тестових стендів), що ваш опис обладнання справді описує поведінку, яку він мав описувати.
Аль Бенді

14

HDL (Мова опису обладнання) - це тип використовуваної мови, Verilog / VHDL порівняно з не-HDL-javascript.

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;(асинхронний регістр зсуву паралельного навантаження, який можна було б реалізувати на Xilinx 9536 CPLD з використанням блоків з асинхронним скиданням / попередньою задачею), це вважатиметься RTL або рівнем воріт?
supercat

RTL, рівень воріт виглядатиме як AND(.a(),.b()) OR(.a(),.b())підключені чисто логічні ворота. Я маю враження, що RTL - це все, що ти маєш намір синтезувати, навіть комбінаторні схеми, оскільки ти все ще описуєш зміну даних, але не логічне введення безпосередньо.
pre_randomize

1
Вибачте, що не слідую, спробую уточнити. RTL передбачає триггер. Рівень воріт створює тригер. Для простих мікросхем тоді підключення купі логічних воріт може бути простим. але може бути неефективною. Атомний процесор має 47 мільйонів транзисторів, що становить близько 10 мільйонів еквівалентів NAND2. Ви хочете визначити та відладкувати 10 мільйонів ручних провідних воріт? Ця перевага полягає в тому, що ми можемо трохи зменшити те, що ми можемо вивчити та налагодити заплановану поведінку.
pre_randomize

1
Припустимо, хтось намагався вказати 74HC74 у HDL. Існує безліч способів синтезу такого пристрою, використовуючи комбінацію комбінаторної логіки, синхронні флопи та прозорі засувки, але я не можу зрозуміти жодної реалізації, яка не передбачає або гоночних умов, ні створює поведінкові аномалії, які б не існує з апаратними примітивами (наприклад, якщо D і Q високі, імпульс запуску на CP або / SD не повинен мати ніякого ефекту, але в реалізаціях я можу зрозуміти, що такі імпульси можуть спричинити метастабільність та / або вихідний збій).
supercat

1
Як ви це створюєте MyLatch, це копія базової клітини або мається на увазі засувка. Якщо ви інстанціюєте ворота, це рівень воріт. Якщо ви це маєте на увазі, це RTL. Бібліотека рівня воріт матиме пов'язані з нею терміни для моделювання перегонів / глюків тощо. Моделювання RTL працює з ідеальними компонентами.
pre_randomize
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.