RTL vs HDL? Apa bedanya

24

Apa perbedaan utama antara RTL dan HDL? Sejujurnya saya mencari / meng-google-kannya, tetapi orang-orang terbagi dalam pendapat mereka. Saya ingat seseorang mengatakan bahwa HDL adalah bahasa komputer yang digunakan untuk menggambarkan sirkuit digital dan ketika disintesis, maka itu dianggap RTL.

Ingin
sumber

Jawaban:

18

HDL adalah catch all name untuk semua bahasa definisi perangkat keras (Verilog, VHDL, dll.) Dengan cara yang sama dengan Object Oriented dapat merujuk ke C ++, Java, dll.

RTL di sisi lain adalah cara menggambarkan rangkaian.

Anda menulis kode level RTL Anda dalam bahasa HDL yang kemudian diterjemahkan (dengan alat sintesis) ke gerbang deskripsi tingkat dalam bahasa HDL yang sama atau apa pun perangkat / proses target Anda akan mengambil.

Biarkan saya memberi Anda sebuah contoh. Berikut ini adalah baris Verilog (HDL) yang menggambarkan mux di RTL:

assign mux_out = (sel) ? din_1 : din_0;

Alat sintesis Anda dapat mengambil dan mengonversinya menjadi satu set gerbang logika, atau hanya makro mux yang didukung oleh perangkat akhir Anda. Misalnya mungkin instantiate makro mux

mux u3 (mux_out, din_1, din_0);

Dalam kedua kasus, Anda dapat memasukkan input yang sama ke blok (RTL, atau tingkat gerbang) dan output Anda harus sama. Bahkan ada alat yang memeriksa output sintesis Anda terhadap kode RTL Anda untuk memastikan alat tidak disengaja mengoptimalkan atau mengubah sesuatu selama sintesis yang menyebabkan ketidakcocokan. Ini disebut Verifikasi Formal.

Untuk berbagai alasan, interoperabilitas, kemudahan perubahan, dapat dimengerti Anda menulis deskripsi Anda tentang sirkuit digital sebagai RTL, bukan tingkat gerbang.

EEToronto
sumber
3
Jawaban yang bagus, hanya penyempurnaan lebih lanjut ... RTL mengasumsikan gaya desain yang diberikan - cloud logika, register, cloud logika, register dll. Yang menyiratkan desain sinkron (clocked). JIKA Anda membuat kode dalam hdl untuk desain tanpa jarum jam (asinkron), alat sintesis Anda mungkin menggunakan sesuatu selain RTL.
placeholder
,, Sebenarnya ada alat yang memeriksa output sintesis Anda terhadap kode RTL Anda untuk memastikan alat tersebut tidak disengaja mengoptimalkan atau mengubah sesuatu selama sintesis yang menyebabkan ketidakcocokan. Ini disebut Verifikasi Formal. "" Tidak, ini tidak. Ini disebut Pengecekan Logika Kesetaraan atau Pengecekan Kesetaraan Formal. Verifikasi Formal lebih merupakan proses pembuktian (menggunakan metode matematika, tanpa simulasi / tes bangku) bahwa deskripsi perangkat keras Anda benar-benar menggambarkan perilaku yang dimaksudkan untuk dijelaskan.
Al Bundy
14

HDL (Hardware description Language) adalah jenis bahasa yang digunakan, Verilog / VHDL versus javascript non-HDL.

RTL (Register-transfer level) adalah level abstraksi yang Anda tulis. Tiga level yang saya maksud adalah Behavioral, RTL, Gerbang-level.

Behavioral memiliki lapisan abstraksi tertinggi yang menggambarkan perilaku keseluruhan dan seringkali tidak dapat disintesis, tetapi berguna untuk verifikasi.

RTL menjelaskan perangkat keras yang Anda inginkan dengan menyiratkan logika. mendefinisikan sandal jepit, kait dan bagaimana data ditransfer di antara mereka. Ini dapat disintesis, sintesis dapat mengubah / mengoptimalkan logika yang digunakan tetapi bukan perilaku. Beralih mux untuk gerbang dll beberapa kali membalikkan sinyal untuk lebih mengoptimalkan desain.

Verilog RTL menyiratkan 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

Operator Bitwise Kombinatorial:

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

assign result = n & m ;

Gerbang tingkat adalah desain menggunakan gerbang logika dasar (NAND, NOR, AND, OR, MUX, FLIP-FLOP). Tidak perlu disintesis atau merupakan hasil dari sintesis. Ini memiliki tingkat abstraksi terendah. itu adalah gerbang logika yang akan Anda gunakan pada chip, tetapi tidak memiliki informasi posisi.

Gerbang level Verilog (fungsi yang sama seperti di atas):

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

Kombinatorial

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]     )
);
pre_randomize
sumber
Jika seseorang mendesain sirkuit sebagai 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;(register shift paralel-beban asinkron yang dapat diimplementasikan pada Xilinx 9536 CPLD menggunakan blok dengan async reset / preset) akankah itu dianggap RTL atau level gerbang?
supercat
RTL, level gerbang akan terlihat seperti AND(.a(),.b()) OR(.a(),.b())gerbang logika murni yang dihubungkan. Saya mendapat kesan bahwa RTL adalah apa pun yang ingin Anda sintesiskan, bahkan sirkuit kombinatorial karena Anda masih menggambarkan perubahan dalam data, tetapi bukan gerbang logika secara langsung.
pre_randomize
1
Maaf saya tidak mengikuti, Akan mencoba mengklarifikasi. RTL menyiratkan flip-flop. Gerbang-tingkat instantiates flip-flop. Untuk rangkaian sederhana maka menghubungkan sekelompok gerbang logika mungkin sederhana. tetapi mungkin tidak efisien daya area. Sebuah Prosesor Atom memiliki 47 juta transistor yang setara dengan 10 juta NAND2. Apakah Anda ingin mendefinisikan dan men-debug 10 juta gerbang kabel tangan? Ini adalah keuntungan dari sedikit mengabstraksikan kita dapat mempelajari dan men-debug perilaku yang dimaksud.
pre_randomize
1
Misalkan seseorang mencoba menentukan 74HC74 dalam HDL. Ada berbagai cara orang dapat mensintesis alat seperti itu menggunakan kombinasi logika kombinatorial, hanya synch-flop, dan kait transparan, tapi saya tidak dapat menemukan implementasi yang tidak melibatkan kondisi ras atau menciptakan anomali perilaku yang akan tidak ada dengan perangkat keras primitif (misalnya jika D dan Q tinggi, pulsa runtuh pada CP atau / SD seharusnya tidak memiliki efek, tetapi dalam implementasi saya dapat mengetahui pulsa tersebut dapat menyebabkan metastabilitas dan / atau kesalahan keluaran).
supercat
1
Bagaimana Anda MyLatchmembuatnya apakah itu sel dasar yang dipakai atau kait yang tersirat. Jika Anda instantiate gerbang itu adalah gerbang tingkat Jika Anda menyiratkannya, itu adalah RTL. Pustaka tingkat gerbang akan memiliki waktu yang terkait dengannya untuk memodelkan kondisi / gangguan balapan dll. Simulasi RTL berjalan dengan komponen yang ideal.
pre_randomize