VHDL NEDİR
Bugün ki yazımızda size VHDL hakkında bir kaç kısa bilgi aktaracağım.
VHDL NEDİR
VHDL ( VHSIC Donanım Tanımlama Dili ) bir olan donanım tanımlama dili kullanılan elektronik tasarım otomasyonu tanımlamak için dijital ve karışık-sinyal gibi sistemleri alan programlanabilir kapı dizileri ve entegre devreler . VHDL ayrıca, genel amaçlı paralel bir programlama dili olarak kullanılabilir.
Tarih
VHDL ABD Savunma Bakanlığı davranışını belgelemek için ASIC tedarikçi firmalar ekipmanları da dahil olmak üzere araştırmak için geliştirilmiştir.Bu dokümandaki bilgilerden ASIC simüle etmek mümkün olma fikri o kadar açıkça çekici mantık simülatörleri VHDL dosyaları okuyabilir halde geliştirilmiştir. Bir sonraki adımda mantık sentezi gelişmesi oldu.
Ada dayalı olması kadar sözdizimi mümkün gerektiren Savunma Bakanlığından dolayı, Ada gelişiminde zaten iyice test edilmiştir yeniden icat kavramlarını önlemek için VHDL gelen ağır ödünç Ada programlama dili kavram ve hem de sözdizimi Için tasarlanmıştır,İlk sürümü IEEE standart 1076-1987 , sayısal (dahil olmak üzere veri türleri geniş bir yelpazede, dahil tamsayıve gerçek ), mantıksal ( bit ve boolean ), karakter ve zaman , artı diziler bir bit olarak adlandırılan bit_vector ve karakter adı verilen dize .
Bu sürümü tarafından çözülmüş bir sorun değil, ancak, bir sinyal sürücü gücü (yok, zayıf veya güçlü) ve bilinmeyen değerleri de kabul edebilir "çok değerli mantık", oldu. Bu gerekli IEEE standardı 1.164 skaler: 9-değeri mantık türleri tanımlanmış, std_logic ve vektör sürümü STD_LOGIC_VECTOR .
Güncellenmiş IEEE 1.076 , 1993 yılında, adlandırma daha fazla esneklik izin, sözdizimi daha tutarlı yapılan genişletilmiş
karakter
ISO-8859-1 basılabilir karakterler izin tipi, katma xnor
operatörü, vb operatörleri.
Standardında küçük değişiklikler (2000 ve 2002) korumalı tip fikri eklendi (sınıf kavramına benzer C + +) ve port haritalama kurallardan bazı kısıtlamalar kaldırıldı.
IEEE standardı 1164 olarak ek olarak, birçok çocuk standartları dilin işlevselliğini genişletmesi tanıtıldı. IEEE standart 1076,2 gerçek ve karmaşık veri türleri daha iyi taşıma ekledi. IEEE standart 1076,3 tanıtıldı imzalı ve imzasız vektörler üzerinde aritmetik işlemleri kolaylaştırmak için türleri. IEEE standart 1076,1 (olarak bilinen VHDL-AMS ) analog ve karışık sinyal devre tasarımı uzantıları sağladı.
Diğer bazı standartlar VHDL daha geniş kullanımı, özellikle HAYATİ (ASIC Kütüphaneler Doğru VHDL Girişimi) ve destek mikrodalgadevre tasarımı uzantılarıdır.
Haziran 2006'da, bir VHDL Teknik Komitesi Accellera (standart bir sonraki güncelleme üzerinde çalışmaya IEEE tarafından delege) bu yüzden VHDL-2006 Taslak 3.0 adı verilen onaylanmıştır. Eski sürümleri ile tam uyumluluk korurken, bu önerilen standart daha kolay yazma ve VHDL kodu yönetmek yapmak çok sayıda uzantıları sağlar. Önemli değişiklikler çocuk standartlarına dahil edilmesi (1164, 1076,2, 1076,3) ana 1.076 standart haline, operatörlerin uzun bir dizi, daha esnek sözdizimi içerir durumda ve oluşturmak ifadeleri, VHPI dahil edilmesi (arayüzüne C / C + + dilleri) ve bir alt kümesi PSL ( İşletme Özellikleri Dil ). Bu değişiklikler sentezlenebilir VHDL kod kalitesini artırmak gerektiğini, testbenches daha esnek yapmak ve sistem düzeyinde açıklamalar için VHDL daha geniş kullanımına izin verir.
2008 yılı Şubat ayında, Accellera VHDL 4.0 da gayri resmi sürüm 3.0 için deneme süresi boyunca tespit 90'dan fazla sorunları ele ve geliştirilmiş genel türleri içerir VHDL 2008 olarak bilinen onayladı. 2008 yılında, Accellera IEEE 1076-2008 eklenmek üzere gizli oylama için IEEE VHDL 4.0 yayındı. VHDL standardı IEEE 1076-2008 Ocak 2009'da yayınlanmıştır.
Tasarım
VHDL yaygın olarak, bir mantık devresini tarif metin modelleri yazmak için kullanılır. Böyle bir model, bu mantık tasarımının bir parçası olduğu takdirde, bir sentez programı tarafından işlenmektedir. Bir simülasyon programı tasarım arayüzü mantık devreleri temsil etmek için simülasyon modelleri kullanarak mantık tasarımı test etmek için kullanılır. Simülasyon modelleri Bu koleksiyona genellikle testbench denir.
VHDL işlemek için yapıları vardır paralellik donanım tasarımları doğasında, ancak bu yapıları ( süreçler ) Ada (içinde paralel yapıları gelen sözdizimi farklı görevleri ). Ada gibi, VHDL olduğunu kesinlikle yazılı ve bir küçük harfe duyarlı değildir . Doğrudan donanım yaygındır işlemleri temsil etmek için, bu da dahil olmak üzere Boole operatörleriyle uzun bir dizi olarak Ada bulunmayan VHDL birçok özelliği vardır NAND ve ne de . VHDL de diziler her iki yönde artan veya azalan endeksli izin verir; hem kongre donanım kullanılır, Ada ve en programlama dilleri sadece artan indeksleme kullanılabilir ise.
VHDL dosya giriş ve çıkış yetenekleri vardır, ve metin işleme için genel amaçlı bir dil olarak kullanılabilir, ancak dosyaları daha sık uyaran veya doğrulama verileri için bir simülasyon testbench tarafından kullanılmaktadır. Çalıştırılabilir ikili inşa bazı VHDL derleyiciler vardır. Bu durumda, bir yazmak için VHDL kullanmak mümkün olabilir testbench , uyaranlara tanımlamak için kullanıcı ile etkileşim ve beklenen olanlar ile karşılaştırılması için ana bilgisayarda dosya kullanarak tasarım işlevselliğini doğrulamak için. Ancak, çoğu tasarımcılar simülatörü için bu işi bırakın.
Bu başarıyla simüle ama gerçek bir cihaza sentez olamaz, yada pratik olması çok büyük kod üretmek için deneyimsiz bir geliştirici için nispeten kolaydır. Sıkan özellikle birinin yanlışlıkla üretim şeffaf mandalları yerine D-tipi flip-flop depolama elemanları olarak.
Bir üretmek için VHDL IDE (örneğin Xilinx ISE, Altera Quartus, Synopsys Synplify veya Mentor Graphics HDL Tasarımcı olarak FPGA için) donanım tasarlayabilirsiniz RTL istenen devre şematiktir. Bundan sonra, oluşturulan şematik uygun Testbench oluşturduktan sonra giriş ve devrenin çıkış dalga biçimlerini göstermektedir simülasyon programı kullanılarak doğrulanabilir. Belirli bir devre veya VHDL kodu için uygun bir testbench oluşturmak için, girişleri doğru tanımlanmalıdır. Örneğin, saat girişi, bir döngü işlem veya tekrarlanan bir açıklama için gereklidir.
Son bir nokta, bir VHDL modeli böyle bir gibi bir programlanabilir mantıksal aygıt üzerine eşleştirilir "kapıları ve teller" tercüme zaman olmasıdır CPLD veya FPGA , o zaman gerçek donanım yapılandırılmış olan, yerine VHDL kodu "idam ediliyor "gibi bir işlemci çipi çeşit üzerinde eğer.
Avantajları
Sistem tasarımı için kullanılan VHDL, en önemli avantajı, sentez araçları gerçek donanım (kapılar ve telleri) içine tasarım çevirmek önce gerekli sistem davranışını tarif (modellenmiş) ve (taklit) doğrulanması için izin vermektedir.
Başka bir yararı VHDL açıklamasını izin vermektedir eşzamanlı sistemi . VHDL bir olan veri akışı dil tüm sırayla çalıştırmak usul gibi BASIC, C gibi bilgisayar dilleri, ve montaj kodu, her seferinde bir talimat aksine,.
Bir VHDL proje çok amaçlı. Bir kez oluşturulan, bir hesaplama blok birçok diğer projelerde kullanılabilir. Ancak, birçok oluşum ve fonksiyonel blok parametreleri (kapasite parametreleri, bellek boyutu, taban eleman, blok bileşimi ve ara bağlantı yapısı) ayarlanmış olabilir.
Bir VHDL proje taşınabilir. Bir eleman temel için oluşturulan, bir bilgisayar cihazı proje çeşitli teknolojiler ile örneğin VLSI için, başka bir unsuru baz olarak taşıdık olabilir.
Dezavantajları
Analog desteği (aka VHDL-AMS) ve Verilog-AMS olarak entegre değildir, bir sürü iş kullanıcıların elinde kalır, bu nedenle.
Tasarım örnekleri
VHDL de, bir tasarımı, en az oluşur varlık arayüzü ve bir tarif mimarisi gerçek uygulama içerir. Buna ek olarak, en tasarımları kitaplık modülleri alın. Bazı tasarımlar aynı zamanda birden fazla mimarileri ve içerir yapılandırmaları .
Basit bir VE kapısı VHDL gibi görünecektir
- (Bu bir VHDL yorumdur)
- IEEE kütüphane ithalat std_logic
kütüphane IEEE ;
kullanımı IEEE . std_mantık_1164 . tüm ;
- Bu varlıktır
varlık ANDGATE olan
port (
I1 : in std_logic ,
I2 : in std_logic ;
O : dışarı std_logic ) ;
sonunda varlık ANDGATE ;
- Bu mimari
mimari RTL bir ANDGATE edilir
başlamak
O <= I1 ve I2 ;
sonunda mimarisi RTL ;
(Not bu
RTL
için standları Kayıt transferi seviyesi tasarımı.) Yukarıdaki örnekte HDL yeni başlayanlar için ayrıntılı görünse de, birçok yerinde ya isteğe bağlı ya da sadece bir kez yazılması gerekir. Bu gibi genellikle basit işlevleri yerine kadar basit bir şey için ayrı bir modül olan daha büyük bir davranış modülünün bir parçasıdır. Ayrıca, gibi unsurların kullanımı std_logic tür ilk başta bir overkill gibi görünüyor olabilir. Bir kolayca yerleşik kullanabilirsiniz biraz tipi ve başlangıçta kütüphane ithalatından kaçının. Ancak, bu kullanarak 9-değerli mantık ( U , X , 0 , 1 , Z , W , H , L , - ) yerine basit bit (0,1) şu anda yapan tasarımcı için çok güçlü bir simülasyon ve hata ayıklama aracı sunuyor diğer HDL mevcut değildir.
Takip örneklerde, VHDL kodu bir çok kompakt şeklinde yazılabilir göreceksiniz. Ancak, deneyimli tasarımcılar genellikle bu kompakt formları önlemek ve okunabilirliği ve bakımı uğruna daha ayrıntılı kodlama stili kullanabilirsiniz. Ayrıntılı kodlama tarzı bir diğer avantajı böyle bir CPLD gibi bir Programlanabilir Mantık Cihaz programlama kullanılan kaynakların küçük bir miktardır.
Sentezlenebilir yapıları ve VHDL şablonları
Elektronik tasarımları ve bu tür tasarımlar sentezi simülasyon: VHDL sık sık iki farklı amaçlar için kullanılır. Sentez bir VHDL böyle bir FPGA veya ASIC gibi bir uygulama teknoloji derlenmiş ve eşlenen bir süreçtir. Birçok FPGA satıcıları ASIC araçları genellikle çok pahalı fişlerini, kullanmak için VHDL sentezlemek için ücretsiz (veya ucuz) araçları vardır.
VHDL içinde değil bütün bileşenleri sentezi için uygundur. Örneğin, çoğu yapıları bu gibi zamanlama ile açıkça anlaşma 10 ns bekleyin; simülasyonu için geçerli olmasına rağmen sentezlenebilir değildir. Farklı sentez araçları farklı yetenekleri var ise, ortak bir var var sentezlenebilir alt birçok sentez araçları için ortak donanım içine hangi dili yapıları ve deyimler haritası tanımlar VHDL. IEEE 1076,6 resmi sentezi alt kümesi olarak kabul edilir dilin bir alt kümesini tanımlar. Genellikle sonuçlar standart olmayan yapıları için yanlış veya idare eder olabilir gibi sentezi için çok deyimsel kod yazmak için bir "en iyi uygulama" olarak kabul edilir.
MUX şablonu
Çoklayıcı , ya da genellikle denir olarak 'MUX', donanım tasarımı çok yaygın basit bir yapıdır. Aşağıdaki örnek girişi ile basit bir 2-1 MUX gösterir A ve B , seçici S ve çıkış X . VHDL aynı MUX ifade etmek için birçok yolu olduğunu unutmayın.
X <= A zaman S = ' 1 ' başka bir B ;
Mandal şablonu
Bir şeffaf mandalı bir enable sinyali ortaya çıkar güncellenir bellek temelde bir parçasıdır. Yine, bu VHDL ifade edilebilir birçok yolu vardır.
- Mandalı şablonu 1:
Q <= D zaman Enable = ' 1 ' başka Q ;
- Mandalı şablonu 2:
işlem ( D, Enable )
başlar
eğer Enable = ' 1 ' sonra
Q <= D ,
sonunda ise ,
son işlem ;
D-tipi flip-flop
D-tipi flip-flop örnekleri bir saat (ya da düşen) yükselen kenarında gelen sinyal. Bu örnek bir asenkron, aktif-yüksek sıfırlama ve yükselen saat kenarında örnekleri vardır.
DFF : süreci ( RST, CLK )
başlar
eğer RST = ' 1 ' sonra
Q <= ' 0 ' ;
elsif RISING_EDGE ( CLK ) sonra
Q <= D ,
sonunda ise ,
son işlem DFF ;
VHDL de kenarla tetiklenen davranış yazmak için başka bir yaygın yolu 'olay' sinyal özelliği ile. Tek bir kesme işareti sinyal adı ve niteliğin adını arasında yazılı olması gerekir.
DFF : süreci ( RST, CLK )
başlar
eğer RST = ' 1 ' sonra
Q <= ' 0 ' ;
elsif CLK 'olayı ve CLK = ' 1 ' sonra
Q <= D ,
sonunda ise ,
son işlem DFF ;
Örnek: bir karşı
Aşağıdaki örnek, senkronize sıfırlama, paralel yük ve yapılandırılabilir genişliği ile bir up-counter. Bu 'imzasız' tipi, 'imzasız' ve 'STD_LOGIC_VECTOR' ve VHDL türleri arasında dönüşüm kullanımını gösterir jenerik . Jenerik çok gibi diğer geleneksel programlama dillerinde bağımsız değişken veya şablonları yakın C + +.
kütüphane IEEE ;
kullanımı IEEE . std_mantık_1164 . tüm ;
kullanmak IEEE . numeric_std . tüm ; - imzasız türü için
entity COUNTER is
generic (
WIDTH : in natural := 32);
port (
RST : in std_logic;
CLK : in std_logic;
LOAD : in std_logic;
DATA : in std_logic_vector(WIDTH-1 downto 0);
Q : out std_logic_vector(WIDTH-1 downto 0));
end entity COUNTER;
mimari RTL bir SAYAÇ olan
sinyal CNT : işaretsiz ( EN - 1 downto 0 ) ;
başlar
süreci ( RST, tipi imzasız dönüştürülür başka
CNT <= CNT + 1 , sonunda ise , sonunda ise , son işlem ;
Q <= STD_LOGIC_VECTOR ( CNT ) , - tipi STD_LOGIC_VECTOR geri dönüştürülür
uç mimarisi RTL ;
Içinde / sonra / else if deyimleri daha karmaşık sayaçları ekleyebilirsiniz RISING_EDGE (CLK) elsif bu sayısı Bakım olmalıdır vb, Terminal sayım sinyalleri gibi çıkış sinyalleri üreten, bazı sayım değeri at üzerinde durdurma veya haddeleme, sağlar gibi diğer işlevleri, eklemek için İstenen öncelikleri üretmek ve gerekli mantık seviyeleri sayısını en aza indirmek için, birlikte kullanılan bu tür kontrollerin sipariş ve iç içe ile çekilen.
Simülasyon-sadece yapıları
VHDL büyük bir alt donanım tercüme edilemez. Bu alt olmayan sentezlenebilir veya VHDL simülasyon-sadece alt olarak bilinir ve sadece prototip, simülasyon ve hata ayıklama için kullanılabilir. Örneğin, aşağıdaki kod, 50 MHz frekans ile bir saat oluşturur. Bu, örneğin, bir tasarım simülasyonu sırasında bir saat girişi sürmek için kullanılabilir. Bu, ancak, bir simülasyon-sadece inşa ve donanım uygulanan olamaz. Gerçek donanım, saat dışarıdan oluşturulur, bu kullanıcı mantık veya özel donanım tarafından dahili olarak küçültülmüş olabilir.
süreç
başlar
CLK <= ' 1 ' ; beklemek için 10 NS ;
CLK <= ' 0 ' ; beklemek için 10 NS ,
son süreci ;
Simülasyon-yapıları sadece çok kısa bir süre içinde karmaşık bir dalga oluşturmak için de kullanılabilir. Bu tür dalga formu, örneğin bir karmaşık bir tasarım için test vektörü olarak ya da gelecekte uygulanacak bir birleştirici mantık bir prototip olarak, kullanılabilir.
işleme
başlamadan
beklemek kadar BAŞLANGIÇ = ' 1 ' ; - START yüksek olana kadar bekleyin
için i içinde 1 ile 10 döngü - sonra birkaç saat süre bekleyin ...
bekleyin kadar RISING_EDGE ( CLK ) ,
sonunda döngü ;
için i içinde 1 ile 10 döngü - yazma 1'den 10'a kadar sayıların DATA, 1 her döngüsü
VERİ <= to_unsigned ( i, 8 ) ;
beklemek kadar RISING_EDGE ( CLK ) ,
sonunda döngü ;
- Çıktı değişene kadar bekleyin
bekleyin üzerinde SONUÇ ;
- Şimdi saat süreyle ACK yükseltmek
ACK <= ' 1 ' ;
bekleme kadar RISING_EDGE ( CLK ) ;
ACK <= ' 0 ' ;
- Ve benzeri ...
son işlem ;