Yeni başlayanlar için Vhdl Syntax ve Yapının Temellerini Anlayın
Table of Contents
VHDL nedir ve neden bunu öğrenmeli?
VHDL, 0,0)VHSIC Donanım Açıklama Dili) için duruyor, VHSIC'nin kendisi çok Yüksek Hızlandırılmış bir Devre için çalıştığı donanım davranışını açıklar. Bu, FPGA'larda (Field-Programlanabilir Kapı Dizileri) ve ASIC programları ile dijital mantık uygulama için önemli bir araçtır.
Yeni başlayanlar için, öğrenme eğrisi dik hissedebilir çünkü VHDL sözelzimleri modern yazılım dillerine kıyasla fiilose edilir. Ancak, donanım tasarımcısı gibi düşünmek için katı yapı kuvvetleri - her sinyal, port ve süreç gerçek fiziksel bağlantıları ve mantık kapıları temsil eder.Bu makale, sadece başlayan biri için tasarlanmış pratik örnekler ve açıklamalarla birlikte.
VHDL'nin Temel Syntax: Bir Yapılı Dil
VHDL söz konusu kelimeler, uygulamadan (her bir özellikten) çok ilham alır ve [[Dönetici:2)Pascal) İngilizce gibi kelimeler kullanır ve uygulamadan (her bir özellik) net bir şekilde ayrılış gerektirir (her bir VHT:0) Her VHT dosyası en az bir varlık-arkture çift içerir. dil, [[Döneticileri için daha düşük sinyalleri ve genel parametrelerin arttırılmasına tavsiye edilir.[Döneticileri/sağlık)
Anahtar kelimeler ve Identifiers
VHDL, kullanıcı tanımlayıcıları olarak kullanılamayan bir dizi ayırt edici anahtar kelime tanımlar (örneğin, [[Dönetici, mimari, sinyal, port, başlangıç, son, süreç, fonksiyon, değişken, sabit, eğer, o zaman, başka, durum, örneğin,) bir mektupla başlamalı ve mektuplar içerebilir.
Yorumlar
VHDL'de yapılan yorumlar, her çizginin başlangıcındaki iki ardı ardı ardıl hipn tarafından ifade edilir.Seseeeeeeeeeeeeeeeeeeee göre, her satırın başında bir araya gelmeniz için eleştirel.
Açıklamalar ve Semikollar
VHDL'deki her açıklama yarı sömürge ile sona eriyor ([Dönetici bildirimi, mimari organları, sinyal atamaları, süreç bildirimi ve eş zamanlı sinyal atamaları.Oating a yarıkolman, VHDL de en yaygın başlangıç hatalarından biridir.) iki katına çıkar.[D:0)
VHDL'nin temel bileşenleri: Entity, Architecture, Signals ve Processes
VHDL'de her şeyi tasarlayabilmeniz için dört temel bina bloğu anlamanız gerekir: [FONTT:0], [[FONT:2|müslimler[Döneticiler[Dönler) ve sistemlerle ilgili olarak, doğrulayıcı veya kombinasyon mantığı tanımlamak için sinyalleri kullanan ayrıntılı bir iç açıklama (gömürüm) ile.
Entity: The Black Box Interface
AFLT:0)[[Dönetici[Dönetici] ve onların veri tipi ile birlikte, sadece dış dünyaya nasıl bir bileşene bağlanacağını söyler.
entity and_gate is
port (
a : in std_logic;
b : in std_logic;
y : out std_logic
);
end entity and_gate;
Bu örnekte, varlık [[DÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN
Entities ayrıca, tasarım parametresili hale getirmek için [[0)generics[[DÜT:1) dahil edilebilir. Örneğin, bir otobüs genişliğini kontrol eden bir genel olarak tanımlayabilirsiniz. Bu daha gelişmiş bir konudur, ancak erken değil.
Mimarlık: İç Uygulama
AŞAM:0)[Döneticileri ve diğer bazı tanımlar (örneğin, alt seviye bileşenlerinin gerçek davranışını tanımlar) veya [[Dönemli akışlar[Dönemli sinyal atamaları) ile ilişkili olarak, her mimari belirli bir varlıkla ilişkilendirilebilir ve birden fazla mimari aynı varlık için bulunabilir (örneğin, bir simülasyon için).
Mimarlık anahtar kelime ile başlar: Mimarlık adı, anahtar kelime, [[Dönderlik adı ve [[Dönemli: {0}
architecture behavioral of and_gate is
begin
y <= a and b;
end architecture behavioral;
İşte, tek eş zamanlı sinyal ataması:Dörtücük açıklamanın özü. Çünkü VHDL doğal olarak eş zamanlı olarak, bu çizgi sonsuza kadar çalışır, güncellemekte olan GÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
Signals: Her şeyi birbirine bağlayan Wires
[FONT:0]Signals[Döneticiler [Dönderler, otobüsler veya bir devredeki dahili düğümler) bir devrede belirtilenler.(veya paketler, varlıklar veya bloklar) gerçek yayınlayan bir VHDL konseptidir.
signal internal_net : std_logic;
…
internal_net <= a and b; -- concurrent assignment
y <= internal_net;
Signals herhangi bir veri türü olabilir - [[DörtÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ
Süreçler: Sequential Behaviour
AŞFLT:0) İşitleri[Döneticileri)[Döneticileri) ve değişken atamaları (Döneticileri) ile ilgili olarak, her işlem aynı zamanda bir işlem konseptini kullanabilirsiniz.
Asynchronous reset ile basit bir D tipi bir flip-flop, olarak yazılabilir:
process (clk, rst) is
begin
if rst = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;
Hassas listeFL::54) bu süreci askıya almak için simülatörün bu süreci uyandırmasını söylüyor (Döneticileri) veya [[Döneticileri) sürecindeki değişikliklerden kaçınmaları gerekir.
Örnek VHDL Structure: Tamamlanan bir tasarım
Daha ayrıntılı bir örnekle her şeyi bir araya getirelim: bir 2to-1 birdenxer (MUX) bir seçim çizgisine göre. Bu tasarım, varlıkları, mimarileri, sinyalleri ve süreçleri tek bir dosyada nasıl kullanacaklarını gösterir. MUX, tek bir seçim çizgisine dayanan iki 8-bit giriş arasında seçer.
-- 8-bit 2-to-1 Multiplexer
library ieee;
use ieee.std_logic_1164.all;
entity mux2to1 is
port (
a, b : in std_logic_vector(7 downto 0);
sel : in std_logic;
y : out std_logic_vector(7 downto 0)
);
end entity mux2to1;
architecture behavioral of mux2to1 is
begin
process (a, b, sel) is
begin
if sel = '0' then
y <= a;
else
y <= b;
end if;
end process;
end architecture behavioral;
Bu kod birkaç yeni konsept tanıtıyor:
- [FONT:0] ⁇ ve kullanım koşulları [Dönetici: 0/01/2012]: [[Dönetici ve kullanım koşulları, kullanım koşulları ile ilgili olarak, aşağıdaki tabloya eklenmektedir.
- [FONT=0)Vector portları : girdiler [FONT=64|0|0|0|0|0|Döneticiler:66|Dönderler:66|Dönderler.
- [FONT=0) Birden çok girişle gerekli olan ([Dönetici: 1): Hassas liste, [[Dönetici:67|) ve [[Dönetici:69) içerir, çünkü çıktı her üçe bağlıdır.
- [FONT:0) Eğer süreç içinde ifade ederse [Dönetici:70) bir süreç içinde veya alt programda görünebilir bir açık açıklamadır.
Bu örnek sentezlenebilir (gerçek donanıma dönüştürülür) çünkü mantık tamamen kombinasyonludur. Süreç her sentez aracının tanıdığı bir MUX'i açıklar.
Key VHDL Syntax Kuralları Her başlangıç Bilmeli
Temel bileşenlerinin ötesinde, VHDL yeni muhafızları yakalamak için birkaç sintactic kuralı vardır. Bu erkenden gelenler, bu gecikmeden saatlerce tasarruf edeceklerdir.
1. Güçlü Typing
VHDL:0) güçlü bir şekilde türünde , doğrudan benzer görünüyorlarsa bir tür sinyal atamayacaksınız (örneğin, s., 03.03.2012) Bu katılık, yanlış eşleştirmeleri önler ve daha sağlam yapar.
2.D:76) ve DÖRÜŞÜNÜ: 77) arasındaki fark (Concurrent vs Sequential)
Bir süreç dışında, aİLFLT:0)Mevcut koşullu sinyal ataması ).
y <= a when sel = '0' else b;
Bu önceki süreç tabanlı MUX'e eşdeğerdir, ancak sonuçsuz değildir - tek bir eş zamanlı açıklama başlatılır.Seks genellikle antropajmanları ile karıştırılır. (konaktör) kural olarak:81).
3. Signal Assignment vs Değişken Assignment
Bir süreçte, [[0) değişkenleri açıklayabilir ([Döneticileri değiştir) ve sadece bir süreçte sinyalleri kullanarak, aynı süreçten sonra bir sinyal sipariş edilir: 85) ve güncelleme ile hemen (aynı simülasyon döngüsü ile) aşağıdaki gibi, aşağıdaki delta döngüsüne kadar eski değeri görecek.
process (clk) is
variable temp : std_logic;
begin
if rising_edge(clk) then
temp := a and b; -- variable updates immediately
y <= temp; -- signal updates after process suspension
end if;
end process;
4. Saat Edge Tespit Idiom
Bir kayıt (pişman-flop) yapmak için, bir saat yükselen veya düşen bir kenar tespit etmelisiniz. Standart yol, [[FONT:88| veya [[Dönetici:90) paketinden farklı davranabilir.
5. Beklenir ve Hassasiyet Listeleri
Bir süreç ya aritmivite listesi ([Dönetici:0) veya [[Döneticiler:92|tavasyon listelerinden bir sinyalin ikisine de ulaşılabilmesi gerekir.In sentez için, hassasiyet listelerin normu içerir.The Simulator list must include every signal read in the process (unless it's a houred process, in which case only hour and asynchronous reset/hour are needed).
6. Port Map and component Instantiation
Hierarchical tasarımları inşa ettiğinizde, daha önceki MUX'i anlık olarak alt düzey bileşenleri kullanarak anlık olarak yapılandırın:93).
u_mux : entity work.mux2to1
port map (
a => data_a,
b => data_b,
sel => select_line,
y => mux_out
);
[FONT:95] “port harita birliği operatörü” olarak adlandırılır. Sol taraf, varlığın liman adı anlık olarak yapılır ve doğru taraf da yerel sinyaldir.Ayrıca konum haritalamayı kullanabilirsiniz, ancak haritalama daha güvenli ve daha okunabilir.
Yeni başlayanlar için Intermediate Techniques to Discover
Temellerle rahat bir şekilde, daha güçlü ve yeniden kullanılabilir tasarım yapan ek VHDL yapıları keşfetmeye başlayabilirsiniz.
Parametreli Tasarımlar için Genrics'leri kullanarak
[FONT:0)Generics[[Döneticiler) bir varlık içine sabitler geçmenize izin verir, tasarım ölçeklenebilirliğini yeniden yaz kodu olmadan yapar. Örneğin, bir N-bit MUX:
entity generic_mux is
generic (
WIDTH : positive := 8
);
port (
a, b : in std_logic_vector(WIDTH-1 downto 0);
sel : in std_logic;
y : out std_logic_vector(WIDTH-1 downto 0)
);
end entity;
Ne zaman anında, genel harita aracılığıyla aşırı sağlayabiliyorsunuz:97).
generic map (WIDTH => 16)
Concurrent and Sequential Statements
VHDL'nin iki önemli ifade kategorisi vardır:
- [FONT:0) Mevcut açıklamalar[[[Dönemli: 1 ): Aynı zamanda, paralel olarak basit sinyal atamaları ([Dönem: 99) içerir, koşullu sinyal atamaları ([Dönem:100)
- [FONT=0]Sequential Statement[[Dönemli ifadeler[Dönetici: 1 ): Bir başka işlemden sonra bir tane idam edilir, işlev veya prosedür. (Ücretsiz) [[101), [[Üye:1600|BİLMİŞT:102||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Yeni başlayanlar genellikle yanlış bir şekilde, eş zamanlı ifadelerin siparişinin önemli olduğunu düşünüyorlar - değil. Simülatörü sinyal bağımlılarına dayanan yürütme siparişini belirler, metinsel düzende değil.
Finite Devlet Makineleri (FSMs)
FSMs, VHDL süreçlerinin klasik bir uygulamasıdır. Basit bir Moore makinesi iki işlemi kullanır: bir sonraki devlet mantığı (kombiulusal) ve devlet kaydı için bir tane (eşitsel) ve bu ayrım okuma kabiliyeti artırır:
architecture rtl of fsm is
type state_type is (idle, run, done);
signal state, next_state : state_type;
begin
-- Sequential register
process (clk, rst) is
begin
if rst = '1' then
state <= idle;
elsif rising_edge(clk) then
state <= next_state;
end if;
end process;
-- Next-state logic
process (state, input) is
begin
next_state <= state; -- default to prevent latches
case state is
when idle =>
if input = '1' then
next_state <= run;
end if;
when run =>
if input = '0' then
next_state <= done;
end if;
when done =>
next_state <= idle;
end case;
end process;
end architecture;
Bu model gerçek tasarımlarda son derece yaygındır.Dönetici:0)default atama).[106] - bu, her sinyalin tüm şubelerinde değer almasını sağlamakla yükümlüdür.
Ortak başlangıç Pitfalls ve Them'dan Nasıl Kaçırmak
Sözcülüğü öğrendikten sonra bile, bu konularda genellikle yeni başlayanlar seyahat ederler. Bunların farkında olmak öğrenme eğrinizi düzeltecektir.
- [FONT:0] IEEE kütüphanesini () içerecek şekilde: NORANFLT:107), Bilişmiş bir tür hata atamazsınız.
- [FONT:0)UsingurFLT:109|38|38|38|38|38||Dönetici:0))" (geçmiş bir porta giriş) genellikle [[FONTFLT:111)'ye yol açar, ancak modern VHDL, hangi niyetleri daha net hale getirir.
- [FONT:0) İşaretleri veya değişkenleri başlatmamak ([Dönetici: Simülasyonda, varsayılan ilk değerler [[Şerefli) formak:113) (uninisalize) for:114) Açık varsayılan atamaları kullanın (örneğin,00 $.)
- [FONT:0)Mixing eş zamanlı ve eşdeğer sinyal atamaları aynı sinyale ) verir: Bu, birden çok sürücüyü oluşturur. VHDL, çözülmediği sürece birden çok sinyal sürücüye izin vermez (örneğin, 16,3), ancak o zaman bile, çatışmalar bir sürücüyü sinyal başına kullanır.
- [FONT:0]Süreksiz olmayan kod[[Dönemli) ile ilgili bilgi sahibi olmak; çoğu inşa etmek (örneğin, dosya okuması, [[Dönetici başarısızlıkla birlikte) sadece simülasyon içindir.
Önerilen Araçlar ve Kaynaklar için Practicing VHDL
Anlayışınızı sağlamlaştırmak için, el-on uygulamasına ihtiyacınız var. Aşağıdaki araçlar ve kaynaklar yeni başlayanlar:
- [FONT:0]Simulators [Dönetici: 5)[Dönetici:0))[Üye/Üyetime/Üyetimeyesi standart, ücretsiz Intel baskı mevcut), [[DÜye/Üyetime-HAYÜye/Üyetim)
- [FONT:0]FPGA satıcı araçları): Xilinx Vivado, Intel Quartus Prime, veya Lattice Diamond.
- [FONT:0)Online editörler [Dönetici:0]: [[[Dönetici:2)[Döneticiler[Döneticiler) ve VHDL kodunu herhangi bir yüklemeden paylaşmanıza izin verir.
- [FONT:0]Kitaplar[Dönetici: "VHDL by Örnek" P. Chuang, "Circuit Design with VHDL" by Volnei Pedroni, ve "Fundamentals of Digital Logic with VHDL Design" by Stephen Brown ve Zvonko Vranesic.
- [FONT=0)Reference Document)[Ücretsiz)[değiştir | kaynağı değiştir]: IEEE 1076-2008 standart online, yeni başlayanlar için yoğun olsa da “Design Automation Standards Committee” sayfası dil referans kılavuzuna ücretsiz erişim sağlar.
Küçük kombinasyon devreleri ve kapılar gibi başlayın, ekers ve çokluxers, sonra gerçek bir FPGA kuruluna taşınır: Flip-floplar, karşılar, kayıtlar. Her adımı atlayın ve dalgaformları gözlemleyin.Bir kez rahatlayın, basit bir UART vericisi veya bir ikili karşı gerçek bir FPGA tahta üzerinde deneyin (bu şekilde Teraslı DE10-Lite veya Digibs 3).
Sonuç: VHDL Yolculuğunuzdaki Sonraki Adımları Alın
VHDL sözelasyonu ve yapısını anlamak - varlıklar, mimariler, işaretler, süreçler ve katı tipleme kuralları - proficient donanım tasarımcısı olma yolunda ilk kilometre taşıdır. Bu makale, beton örneklerle temel bina blokları ele aldı ve ortak tuzakları vurguladınız, böylece onlardan kaçınabilirsiniz.
VHDL'nin sabır ve yöntemsel pratik ödülleri veren bir disiplin olduğunu unutmayın.Yaz kodu, onu sentezlemek, sentezlemek ve dijital mantığınızı anlamak için dalgaform izleyicilere bakın (Boolean algebra, Karnaugh haritaları, geri dönüşümleri) modern dijital tasarımın tam gücünü ortaya çıkarmak için.
Meraklı kalın, deneye devam edin ve büyüyen topluluğuna ve online kaynaklara danışmaktan çekinmeyin. tutarlı çabayla, VHDL sözelasyonun temellerini ustalaştırır ve yapı boru hattı gibi gelişmiş konulara, yüksek hızlı arayüzlere ve sistem-çizgi tasarımlara odaklanacaktır.