HDL veya Donanım Tanımlama Dili: Nedir?

HDL, bir grup donanım tanımlama programlama dilidir. Sadece yazılım için programlama dilleri değil, aynı zamanda bu yazıda görebileceğiniz gibi bu tür bir dilden “programlayabilir” ve donanım oluşturabilirsiniz. Ayrıca bu dillerin ne olduğunu da bileceksiniz ve örnek kod ile bazı snippet’leri görebileceksiniz.

HDL nedir?

yazılım programlama

Bir HDL (Donanım Tanımlama Dili), bir donanım tanımlama dilidir, yani donanımın tasarımı ve geliştirilmesi için kullanılan bir programlama dilidir. Evet, donanım da yaratılışın ilk aşamalarında “yazılır”, böylece yapıyı, düzeni ve yapabileceği işlemleri tanımlar.

Ek olarak, bu HDL dilleri, fiziksel olarak oluşturmadan önce işlemi simüle etmenize ve olası sorunları gidermenize de olanak tanır, bu nedenle büyük avantajlarından biridir. Öte yandan, oluşturmak istediklerinizi yazmak için EDA ortamlarında da kullanılabilirler ve yazılım, son olarak devreyi üretmek için gerekli olan düzeni oluşturmak için bileşen kitaplıklarının standart hücrelerini kullanmakla ilgilenir.

Biçimleri açısından, C gibi yazılım programlama dillerine oldukça benzerler. Yani, ifadeler, bildirimler, kontrol yapıları, değişkenler, sabitler vb. içeren metinsel bir açıklamadan oluşurlar. Bununla birlikte, yazılımların sahip olmadığı bir şeye de sahiptirler ve bu, saat güdümlü devrelerde çok gerekli olan zamanlamadır.

HDL dilleri, tasarlanmakta olan devrelerin giderek daha karmaşık hale geldiği ve tasarımcıların her şeyin daha net bir resmini elde edebilmeleri için dijital mantığın üst düzey açıklamalarını gerektirmeye başladığı 1970’lerde geliştirildi. Yani HDL dilleri de programlama dilleri gibi donanım tasarımında yüksek bir soyutlama seviyesi görevi görürler çünkü onlar da soyut diller olduğundan programcılar makine dilinde düşünmek zorunda kalmazlar.

Sonuç, programcı tarafından anlaşılabilir bir dildir ve daha sonra devreyi, bağlantı listelerini veya ağ listesini oluşturacak blokların hiyerarşisini oluşturmak için “derlenebilir”, düzgün çalıştığını doğrulamak için devrenin davranışını simüle edebilir, ve son olarak analog veya dijital, baskılı veya entegre devrelerin imalatında kullanılacak haritaları veya yerleşimleri oluşturur. Ayrıca bir devre oluşturmak ve daha sonra test için bir FPGA’ya iletmek için kullanılabilir.

Başlıca HDL dilleri

programlama için dizüstü bilgisayar

Daha fazla HDL dili olmasına rağmen, en önemlileri şunlardır:

  • Keski: Scala Gömülü Dilde Donanım Oluşturma anlamına gelir ve yakın zamanda oluşturulmuş ve diğerlerine göre avantajları nedeniyle çok fazla konuşma yapan açık kaynaklı HDL tipi bir dildir. Bu HDL, dijital devrelerin ve RTL’nin (Kayıt-Aktarım Seviyesi) tanımı için kullanılabilir. Berkeley Üniversitesi tarafından oluşturulan Scala’ya dayanmaktadır ve nesne yönelimlidir. Diğer bir avantaj ise Chisel donanım açıklamalarının sentez ve simülasyon için Verilog’a dönüştürülebilmesidir. Şu anda RISC-V projesiyle yakından bağlantılıdır ve DARPA, Google tarafından TPU birimlerini geliştirmek vb. için kullanılır. Ve geliştirmesi Verilog’dan çok daha hızlıdır ve bu diğer HDL’den 5 kata kadar daha az kod gerektirir.
  • Verilog: C programlama dilinden ilham alan bir sözdizimine sahip başka bir dildir, bu nedenle mühendislere oldukça aşinadır. Ayrıca C gibi bir ön işlemciye sahiptir ve ayrılmış kelimelerin çoğu aynıdır. Ancak, C’nin kullandığı parantezler yerine {} kod bloklarını açmak ve kapatmak için Begin ve End kelimeleri gibi farklılıkları vardır.Cisel gibi, her türlü donanımı geliştirmek, sentezlemek ve simüle etmek için kullanılabilir. FPGA veya CPLD’de kayıt yapmak için bir ASIC. Bu dil, Phil Moorby tarafından 1985 yılında Automated Integrated Design Systems’de (daha sonra Gateway Design Automation olarak yeniden adlandırıldı ve daha sonra Cadence tarafından satın alındı) çalışırken icat edildi. Açık kaynak değildir, ancak Cadence daha sonra VHDL’nin başarısı nedeniyle onu açık bir standart haline getirmeye karar vermiştir.
  • VHDL: VHSIC (Very High Speed ​​​​Integrated Circuit) ve HDL kısaltmalarının birleşiminden ortaya çıkan kısaltmalardır. Ayrıca, ASIC’ler gibi, FPGA’ları veya PLD’leri vb. programlamak için her türlü devreyi tanımlamak için kullanılır. Şu anda IEEE tarafından bir standart olarak tanımlanmaktadır ve ilk olarak 1980’lerin başında Amerika Birleşik Devletleri Savunma Bakanlığı tarafından dijital devreleri geliştirmek ve simüle etmek için ADA programlama diline dayalı olarak geliştirilmiştir. Şu anda aynı zamanda çip geliştirme için en yaygın kullanılanlardan biridir, ancak Chisel, HDL sahnesine en son gelen ürün olduğu için çok dikkat çekiyor.

HDL dillerinin pratik örnekleri

Son olarak, bitirmek için, bu dillerin neye benzediğine dair bazı örnekler göstermenin zamanı geldi. Bunu yapmak için, bir elektronik devrenin bir elemanının bunlarla nasıl tanımlanabileceğine dair küçük parçalar göstereceğim:

keski

CHISEL dilinde 8 bitlik bir toplayıcının HDL örneği:

class Add genişletme Modülü {
val io = IO (yeni Paket {
val a = Giriş(UInt(8.W))
val b = Giriş(UInt(8.W))
val y = Çıktı(UInt(8.W))
})
io.y: = io.a + io.b
}

VHDL

VHDL dilinde 8 bitlik bir toplayıcının HDL örneği:

kütüphane ieee;
ieee.std_logic_1164.all’ı kullanın;

varlık FA_8bit
port(x,y : std_logic_vector(7’den 0’a kadar);
cin : std_logic’te;
toplam: out std_logic_vector(7’den 0’a kadar);
co : çıkış std_logic);
FA_8bit’i sonlandır;

FA_8bit’in FA_arch mimarisi
sinyal cary : std_logic_vector(6’dan 0’a);

bileşen full_adder
bağlantı noktası (p,q,r: std_logic içinde; sm,cr: std_logic çıkışı);
uç bileşen;
başlamak
a0:full_adder bağlantı noktası haritası (x(0),y(0),cin,sum(0),cary(0));
a1:full_adder bağlantı noktası haritası (x(1),y(1),cary(0),sum(1),cary(1));
a2:full_adder bağlantı noktası haritası (x(2),y(2),cary(1),sum(2),cary(2));
a3:full_adder bağlantı noktası haritası (x(3),y(3),cary(2),sum(3),cary(3));
a4:full_adder bağlantı noktası haritası (x(4),y(4),cary(3),sum(4),cary(4));
a5:full_adder bağlantı noktası haritası (x(5),y(5),cary(4),sum(5),cary(5));
a6:full_adder bağlantı noktası haritası (x(6),y(6),cary(5),sum(6),cary(6));
a7:full_adder bağlantı noktası haritası (x(7)),y(7),cary(6),sum(7),co);
FA_arch’ü sonlandır;

kütüphane ieee;
ieee.std_logic_1164.all’ı kullanın;
varlık full_adder
bağlantı noktası (p,q,r: std_logic içinde; sm,cr: std_logic çıkışı);
full_adder’ı sonlandır;

full_adder’ın FA_arc mimarisi
başlamak
sm <= p x veya q x veya r;
cr <= (p ve q) veya (q ve r) veya (r ve p);
FA_arc’ı sonlandır;

verilog

Verilog programlama dilinde 8 bitlik toplayıcı örneği:

`zaman ölçeği 1ns / 1ps

modül toplayıcı8(
çıktı cout, //MSB, cevabın olumlu mu yoksa olumsuz mu olduğunu belirler
çıktı [7:0] s,
giriş [7:0] a,
giriş [7:0] b,
cin gir // 1 ise çıkar, 0 ise ekle. Bu, b ile XOR’landı
);

tel [7:0] çöp Kutusu;
çöp kutusu ata[0] = b[0]^cin;
çöp kutusu ata[1] = b[1]^cin;
çöp kutusu ata[2] = b[2]^cin;
çöp kutusu ata[3] = b[3]^cin;
çöp kutusu ata[4] = b[4]^cin;
çöp kutusu ata[5] = b[5]^cin;
çöp kutusu ata[6] = b[6]^cin;
çöp kutusu ata[7] = b[7]^cin;

tel [8:1] taşımak;
full_adder FA0(taşıma[1],s[0],a[0],çöp Kutusu[0],cin);
full_adder FA1(taşıma[2],s[1],a[1],çöp Kutusu[1],taşımak[1]);
full_adder FA2(taşıma[3],s[2],a[2],çöp Kutusu[2],taşımak[2]);
full_adder FA3(taşıma[4],s[3],a[3],çöp Kutusu[3],taşımak[3]);
full_adder FA4(taşıma[5],s[4],a[4],çöp Kutusu[4],taşımak[4]);
full_adder FA5(taşıma[6],s[5],a[5],çöp Kutusu[5],taşımak[5]);
full_adder FA6(taşıma[7],s[6],a[6],çöp Kutusu[6],taşımak[6]);
full_adder FA7(taşıma[8],s[7],a[7],çöp Kutusu[7],taşımak[7]);

cout ata = cin^carry[8];

uç modül
En iyi işlemciler hakkındaki kılavuzumuzu okumanızı öneririz. Gördüğünüz gibi, birbirlerinden çok farklılar. Hangisinde kalıyorsun?

Similar Posts

Leave a Reply

Your email address will not be published.