HDL vs RTL? Fark ne


24

RTL ve HDL arasındaki temel fark nedir? Dürüst olmak gerekirse araştırdım / googledim, ancak insanlar düşüncelerine göre ayrılıyor. Birinin HDL'nin bir dijital devreyi tanımlamak için kullanılan bilgisayar dili olduğunu ve sentezlenebilir olduğunda RTL olarak kabul edildiğini söylediğimi hatırlıyorum.

Yanıtlar:


18

HDL, tüm donanım tanımı dilleri (Verilog, VHDL, vb.) İçin yakalanan tüm adlardır, aynı şekilde Object Oriented, C ++, Java vb.

Diğer yandan RTL, bir devrenin tanımlanmasının bir yoludur.

RTL seviye kodunuzu, bir HDL dilinde yazıp, aynı HDL dilinde ya da hedef cihazınız / işleminiz ne olursa olsun, kapı seviyesi tanımına çevrilmiş (sentez araçlarıyla) çevrilir.

Sana bir örnek vereyim. İşte RTL'de bir mux tanımlayan bir Verilog (HDL) satırı:

assign mux_out = (sel) ? din_1 : din_0;

Sentez aracınız bunu alabilir ve bunu bir dizi mantık kapısına veya yalnızca son cihazınız tarafından desteklenen bir mux makrosuna dönüştürebilir. Örneğin, bir mux makrosunu başlatabilir

mux u3 (mux_out, din_1, din_0);

Her iki durumda da aynı girişleri bloğa (RTL veya geçit seviyesi) besleyebilirsiniz ve çıktınız aynı olmalıdır. Aslında, aracın yanlışlıkla uyumsuzluğa neden olan bir şeyi sentez sırasında kazara optimize etmediğinden veya değiştirdiğinden emin olmak için sentezinizin çıktısını RTL kodunuza göre kontrol eden araçlar vardır. Buna Resmi Doğrulama adı verilir.

Çeşitli nedenlerle, birlikte çalışabilirlik, değişiklik kolaylığı, anlaşılabilirlik için dijital devre açıklamanızı geçit seviyesi yerine RTL olarak yazıyorsunuz.


3
Güzel cevap, daha fazla ayrıntılandırma… RTL, belirli bir tasarım stilini varsayar - mantık bulutu, kayıt, mantık bulutu, kayıt vb. Eğer clockless (asenkron) için HDL sizin sentez aracı tasarlamak içinde kodlama edildi IF olabilir RTL dışında bir şey kullanın.
yer tutucu

,, Aslında, sentez sırasında aletin uyumsuzluğa yol açan bir şeyi yanlışlıkla optimize etmemesini veya değiştirmemesini sağlamak için sentezinizin çıktısını RTL kodunuza göre kontrol eden araçlar vardır. Buna Resmi Doğrulama denir. '' Hayır, bu değil. Buna Mantıksal Eşdeğerlik Kontrolü veya Resmi Eşitlik Kontrolü denir. Biçimsel Doğrulama, donanım tanımlamanızın gerçekten tanımlamak istediği davranışı tanımladığını ispatlama işlemidir (matematiksel yöntemleri kullanarak, simülasyon / test tezgahları olmadan).
Al Bundy

14

HDL (Donanım tanımı Dili) kullanılan dilin türüdür, Verilog / VHDL'ye karşı, HDL olmayan bir javascript.

RTL (Kayıt-transfer seviyesi) yazdığınız bir soyutlama seviyesidir. Bahsettiğim üç seviye Davranışsal, RTL, Kapı seviyesidir.

Davranış , genel davranışı tanımlayan ve genellikle sentezlenemeyen, ancak doğrulama için yararlı olan en yüksek soyutlama katmanına sahiptir.

RTL , istediğiniz donanımı mantık uygulayarak açıklar. parmak arası terliklerin, mandalların ve verilerin aralarında nasıl aktarıldığını tanımlama. Bu sentezlenebilirdir, sentez kullanılan mantığı değiştirebilir / optimize edebilir ancak davranışı değiştiremez. Kapıları vb. İçin anahtar değiştirme düğmeleri, tasarımı daha iyi hale getirmek için bazı zamanlarda sinyalleri ters çevirir.

Bir flip-flop ima eden 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

Kombinatoryal Bitwise operatörleri:

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

assign result = n & m ;

Geçit seviyesi , temel mantık geçitlerini (NAND, NOR, AND, VEYA, MUX, FLIP-FLOP) kullanan bir tasarımdır. Sentezlenmesi gerekmez veya sentezden elde edilen çıktıdır. Bu en düşük soyutlama seviyesine sahiptir. çipte kullanacağınız mantık geçitleridir, ancak konumsal bilgi içermemektedir.

Geçit seviyesi Verilog (yukarıdaki ile aynı fonksiyon):

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

kombinatoryal

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

Eğer bir devre 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;(asenkron reset / ön ayarlı bloklar kullanılarak bir Xilinx 9536 CPLD üzerine uygulanabilecek olan bir asenkron paralel yük kaydırma yazmacı) tasarlanırsa, bu RTL veya geçit seviyesi olarak kabul edilir mi?
Supercat,

RTL, geçit seviyesi AND(.a(),.b()) OR(.a(),.b())tamamen bağlanan mantık kapılarına benzeyecek . RTL'nin sentezlemek istediğiniz herhangi bir şey olduğu izlenimindeyim, verilerdeki değişimi hala tanımladığınız gibi kombinatoryal devreler bile, ama doğrudan mantık geçitlerini değil.
pre_randomize

1
Üzgünüm takip etmiyorum, açıklığa kavuşturmaya çalışacağım. RTL, flip-flop anlamına gelir. Geçit seviyesi flip-flop'u başlatır. Basit devreler için bir grup mantık kapısının takılması basit olabilir. ancak güç alanı açısından verimli olmayabilir. Bir Atom İşlemcisi, yaklaşık 10 milyon NAND2 eşdeğeri olan 47 milyon transistöre sahiptir. 10 milyon el kablolu geçidi tanımlayıp hata ayıklamak ister misiniz? Bu, amaçlanan davranışı incelemek ve hata ayıklamak için biraz soyutlamanın avantajı.
pre_randomize

1
Birinin HDL'de 74HC74 belirtmeye çalıştığını varsayalım. Bir birleşimsel mantık, sadece eşzamanlı floplar ve saydam mandalların bir kombinasyonunu kullanarak böyle bir cihazı sentezlemenin çeşitli yolları vardır, ancak yarış koşullarını içermeyen veya davranışsal anormallikler oluşturan herhangi bir uygulama bulamıyorum. donanım ilkelleriyle mevcut değil (örneğin, eğer D ve Q yüksekse, CP veya / SD üzerindeki bir darbe darbesinin etkisi olmamalıdır, ancak uygulamalarda bu tür pulsların metastabiliteye ve / veya bir çıkış sorununa neden olabileceğini tahmin edebilirim).
supercat

1
Nasıl yaratıyorsunuz MyLatch, somutlaştırılmış bir temel hücre veya zımni bir mandaldır. Geçidi başlatırsanız, geçit seviyesidir. Bunu ima ederseniz, RTL'dir. Kapı seviyesi kütüphanesi, yarış koşullarının / aksaklıkların vs. modellenmesi için bununla ilişkili zamanlamaya sahip olacaktır.
pre_randomize
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.