RTL czy HDL? Co za różnica


24

Jaka jest główna różnica między RTL a HDL? Szczerze mówiąc, szukałem / przeglądałem go, ale ludzie są podzieleni w swoich opiniach. Pamiętam jedno powiedzenie, że HDL jest językiem komputerowym używanym do opisywania obwodu cyfrowego, a kiedy można go zsyntetyzować, uważa się go za RTL.

Odpowiedzi:


18

HDL to nazwa „catch-all” dla wszystkich języków definicji sprzętu (Verilog, VHDL itp.) W taki sam sposób, w jaki obiektowe może odnosić się do C ++, Java itp.

Z drugiej strony RTL jest sposobem opisu obwodu.

Piszesz swój kod poziomu RTL w języku HDL, który następnie zostaje przetłumaczony (za pomocą narzędzi do syntezy) na opis poziomu bramki w tym samym języku HDL lub cokolwiek zabierze twoje urządzenie / proces docelowy.

Dam ci przykład. Oto linia Verilog (HDL) opisująca multiplekser w RTL:

assign mux_out = (sel) ? din_1 : din_0;

Narzędzie do syntezy może to zrobić i przekształcić w zestaw bramek logicznych lub po prostu makro multipleksera obsługiwane przez urządzenie końcowe. Na przykład może utworzyć wystąpienie makra multipleksera

mux u3 (mux_out, din_1, din_0);

W obu przypadkach możesz podać te same dane wejściowe do bloku (RTL lub poziom bramki), a twój wynik powinien być taki sam. W rzeczywistości istnieją narzędzia, które sprawdzają wyniki syntezy względem kodu RTL, aby upewnić się, że narzędzie nie przypadkowo zoptymalizowało lub zmieniło coś podczas syntezy, które spowodowało niedopasowanie. Nazywa się to formalną weryfikacją.

Z różnych powodów, interoperacyjności, łatwości zmiany, zrozumiałości piszesz opis obwodu cyfrowego jako RTL, a nie na poziomie bramki.


3
Dobra odpowiedź, tylko dalsze udoskonalenie ... RTL zakłada określony styl projektowania - chmurę logiczną, rejestr, chmurę logiczną, rejestr itd., Co implikuje projektowanie synchroniczne (taktowane). JEŚLI kodowałeś w swoim hdl dla projektowania bez zegara (asynchronicznego), twoje narzędzie do syntezy mogłoby użyć czegoś innego niż RTL.
symbol zastępczy

,, W rzeczywistości istnieją narzędzia, które sprawdzają wyniki syntezy względem kodu RTL, aby upewnić się, że narzędzie nie przypadkowo zoptymalizowało lub zmieniło coś podczas syntezy, które spowodowało niedopasowanie. Nazywa się to formalną weryfikacją. ”„ Nie, to nie jest. Nazywa się to logiczną kontrolą równoważności lub formalną kontrolą równoważności. Weryfikacja formalna jest raczej procesem udowodnienia (przy użyciu metod matematycznych, bez symulacji / stanowisk testowych), że opis sprzętu naprawdę opisuje zachowanie, które miał opisać.
Al Bundy

14

HDL (język opisu sprzętu) to rodzaj używanego języka, Verilog / VHDL w porównaniu z javascript innym niż HDL.

RTL (poziom transferu rejestru) to poziom abstrakcji, w którym piszesz. Trzy poziomy, o których mówię, to behawioralny, RTL, poziom bramkowy.

Behawioralna ma najwyższą warstwę abstrakcji, która opisuje ogólne zachowanie i często nie jest możliwa do syntezy, ale jest przydatna do weryfikacji.

RTL opisuje pożądany sprzęt, sugerując logikę. definiowanie przerzutników, zatrzasków i sposób przesyłania danych między nimi. Można to syntetyzować, synteza może zmienić / zoptymalizować zastosowaną logikę, ale nie zachowanie. Przełączanie multiplekserów dla bram itp. Czasami odwraca sygnały, aby lepiej zoptymalizować projekt.

Verilog RTL sugeruje flip-flop:

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

Kombinatoryjne operatory bitowe:

logic [1:0] n;
logic [1:0] m;
logic [1:0] result;

assign result = n & m ;

Poziom bramy bramki to projekt wykorzystujący podstawowe bramki logiczne (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Nie wymaga syntezy lub jest wynikiem syntezy. To ma najniższy poziom abstrakcji. to bramki logiczne, których użyjesz na chipie, ale brakuje mu informacji o położeniu.

Poziom bramy Verilog (taka sama funkcja jak powyżej):

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
);

Kombinatoryczny

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]     )
);

Gdyby zaprojektować obwód jako 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;(asynchroniczny rejestr przesuwny równoległego obciążenia, który można zaimplementować w Xilinx 9536 CPLD przy użyciu bloków z resetowaniem / ustawieniem asynchronicznym), czy można by to uznać za RTL lub poziom bramki?
supercat

RTL, poziom bramki wyglądałby jak AND(.a(),.b()) OR(.a(),.b())podłączenie czysto logicznych bramek. Mam wrażenie, że RTL jest wszystkim, co zamierzasz zsyntetyzować, nawet układami kombinatorycznymi, ponieważ wciąż opisujesz zmianę danych, ale nie bramkami logicznymi bezpośrednio.
pre_randomize

1
Przepraszam, nie podążam, Spróbuję to wyjaśnić. RTL oznacza przerzut. Poziom bramy tworzy flip-flop. W przypadku prostych obwodów podłączenie wiązki bramek logicznych może być proste. ale może nie być efektywny pod względem mocy. Procesor atomowy ma 47 milionów tranzystorów, co stanowi około 10 milionów ekwiwalentów NAND2. Czy chcesz zdefiniować i debugować 10 milionów ręcznie okablowanych bram? Jest to zaleta polegająca na tym, że trochę abstrakcyjnie możemy przestudiować i debugować zamierzone zachowanie.
pre_randomize

1
Załóżmy, że ktoś próbował określić 74HC74 w HDL. Istnieje wiele sposobów syntezy takiego urządzenia za pomocą kombinacji kombinatorycznej logiki, tylko synchronizacji i przezroczystych zatrzasków, ale nie potrafię wymyślić żadnej implementacji, która nie wiąże się z warunkami wyścigu ani nie tworzy anomalii behawioralnych, które mogłyby nie istnieje z prymitywami sprzętowymi (np. jeśli D i Q są wysokie, impuls runtowania na CP lub / SD nie powinien mieć żadnego wpływu, ale w implementacjach mogę domyślić się, że takie impulsy mogą spowodować metastabilność i / lub usterkę wyjściową).
supercat

1
Jak tworzysz, czy MyLatchjest to instancja komórki bazowej lub domniemana zatrzask. Jeśli tworzona jest instancja bramy, jest to poziom bramy. Jeśli implikujesz, to jest to RTL. Biblioteka poziomu bramki będzie powiązana z czasem dla modelowania warunków wyścigu / błędów itp. Symulacje RTL przebiegają z idealnymi komponentami.
pre_randomize
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.