Vhdl State Machine Design Desenleri Güvenilir Kontrol Mantık Uygulamalı

VHDL State Machines'a Giriş

VHDL (VHSIC Hardware Description Language) dijital sistemleri tasarlamak için en yaygın kullanılan dillerden biridir, özellikle kontrol mantığını uygulamanız sırasında, devlet makineleri - sonlu devlet makineleri (FSMs) - iletişim protokollerindeki birçok kontrol ünitesinin arka kemiğidir, gömülü işlemciler, bellek kontrolörleri ve karmaşık dijital sinyal işleme hatları. Kötü tasarlanmış bir devlet makinesi, özellikle de korkunç hedefler uygulama gereksinimlerine yol açabilir veya en iyi zamanlayıcı davranışlarınızı sağlar.Bu makale, iletişim protokollerinizi araştırır ve başarılı bir şekilde kontrol eder.

İki Ana Mimariyi Anlayın: Moore vs. Mealy

Moore ve Mealy mimarlık arasındaki seçim temel olarak çıktıların nasıl üretildiğini etkiler.Bir Moore makinesinde, çıktılar yalnızca mevcut durumda, Mealy makineli çıktılarda hem mevcut durumuna hem de girişlere bağlı olarak değişir.

Moore Devlet Makineleri

Moore makineleri, yalnızca devlet geçişlerinde, saat kenarına senkronize edilen devrede değişiklik yapmak için daha basitdir. Bu, Moore makinelerinin genellikle Mealy ile kıyasla aynı işlevselliği elde etmesi gerektiğini gösteriyor çünkü çıktılar, bir sonraki saat boyunca girişlere tepki veremezler.

Mealy State Machines

Mealy makineler hemen giriş değişikliklerine yanıt verebilir, aynı saat döngüsü içinde bile. Bu, daha kompakt devlet diyagramlarına yol açabilir - bazen geç kalmış önemli olan eyaletlerin sayısı, veri yol kontrolleri veya boru hatlarıyla ilgili olarak, birçok tasarımcının gecikmeleri için dikkatli bir şekilde kontrol edilmesi gerekir ve potansiyel yarış koşulları.

İyi bir baş kuralı: güvenlik-kritik kontrol mantığı için bir Moore mimarisi ile başlayın; Mealy sadece hız veya alan avantajı gerekli olduğunda ve zamanlama planını doğrulamışsınız.

Senkron vs. Asynchronous Design: Neden Senkron Wins

Çoğu güvenilir VHDL devlet makineleri senkronize edilir - tüm devlet geçişleri tek bir küresel saat kenarda gerçekleşir.Youhronous design simplify, statik zamanlama ve aletlerle ilgili deneyimli ASIC tasarımcısı olmadıkça, senkronizasyonda, senkronizasyonda doğru bir şekilde uygulamak zorlanırlar; devlet güncellemelerini dikkatli bir şekilde gerektirirler: Durum kısıtlaması, tehlike ortadan kaldırma ve sık sık sık sık el yazması.

process(clk, rst_n)
begin
 if rst_n = '0' then
 state <= IDLE;
 elsif rising_edge(clk) then
 state <= next_state;
 end if;
end process;

Çok fazla saat tasarımlarında, onları devlet makinesine beslemeden önce her zaman bir senkronizasyonu senkronize etmek (aşağıdaki metastabilite bölümüne bakınız).

Devlet Encoding Stil: İkili, One-Hot, Gray

İkili kodları devletlere atamanın yolu, hız, güç ve güvenilirlik. VHDL'nin kendisi sadece enumerasyona dikkat eder; sentez aracı, sentez özelliklerini kullanarak veya manuel olarak devlet vektörünü tanımlamaya karar verir.

İkili Encoding

İkili enkoding en az yüz yüze (log2 sayıda eyalet) kullanır (örneğin, 64+) Bir sonraki devlet mantığının daha yavaş olması ve devletler arasındaki geçişler, zorlanması nedeniyle çok az güç içerebilir.

One-Hot Encoding

Birhot, devlet başına bir tane geri dönüş kullanır, bu yüzden sadece bir tane geri dönüşlütüğünüz herhangi bir zamanda yüksektir.Bu, bir sonraki devlet dekok mantığını çok hızlı yapar (önemli geçişlerin basit bir ORTA) ve glitch potansiyelini azaltır. One-hot, çoğu FPGA satıcısı tarafından önerilen varsayılan enkoding, 16 eyalet için önerilendir.

Gray Encoding

Gray encoding, sadece bitişik devletler arasında biraz değişiklik yapılmasını sağlar. Bu, devlet geçişlerinin çok sayıdaki otobüsle zaman veya saat alanlarını geçişleri minimuma indirilmesi gerektiği durumlarda faydalıdır (örneğin, ek senkronize gerektiren). Gray encoding, doğal bir duruma harita için daha karmaşıktır, bu yüzden kontrol mantığı için daha az yaygındır.

Uygulamada, daha küçük FSMs (tipik olarak 20 eyalet altında) ve ikilisi için bir tek hot ile başlayın. sentez aracınızın varsayılan olarak geri kalanını ele alalım - ancak simülasyon ve zamanlama raporlarıyla doğrulayın.

Enumerated Tipleri Kullanımı ve Güvenliği

Bir enumerated türü ile devletlerin tanımlanması, kod okuma ve korumayı geliştiren en iyi uygulamadır. numeric sabitleri kullanmak yerine (örneğin, [[ENFLT:2) yazmak:

type state_type is (IDLE, WAIT, READ, WRITE, DONE);
signal state, next_state : state_type;

Enumerated types, sentez aracının otomatik olarak kodlamasına izin verir ve derleyici, tüm eyaletleri kapsayan bir vaka açıklamasıyla kullanılan herhangi bir yasa değerlerini bayraklayacaktır. Bu aynı zamanda, sezgisel görüntüleyici izleyicilerin devlet adını ikili kodu yerine göstermesini sağlar.Her zaman simülasyon hataları veya sentezleri yakalamak için bir ifadeyi içerecektir.

Strategies: Güvenilir İlkleşme

Her FSM'nin iyi tanımlanmış bir sıfırlama mekanizması olması gerekir. sıfır olmadan, devlet kayıt güçleri bilinmeyen bir durumda, potansiyel olarak kilitlenme veya şaşırtıcı çıktılara neden olur. İki ortak sıfır stilleri senkronize ve asynchronous.

Asynchronous reset

Asynchronous reset (saatin bağımsız olarak sıfırlamayı unutmayın) makineyi hemen bilinen güvenli bir duruma doğrultmak için önemlidir. Bu, güç veya hata kurtarmanın bir saat kenarı beklemeden gerçekleşmelidir. Tipik VHDL modeli, hassas listede sıfır kullanır:

process(clk, rst_n)
begin
 if rst_n = '0' then
 state <= IDLE;
 elsif rising_edge(clk) then
 state <= next_state;
 end if;
end process;

Ancak, asynchronous reset deassertion'ın metastabiliteden kaçınmak için senkronize edilmesi gerektiğinin farkında olun (bir “reset recovery” zamanlama sorunu). Birçok tasarımcı reset sinyali için bir senkronize ekleyin.

Senkron Sıfır

Synchronous reset sadece bir saat kenarda etki alır. Bu, kurtarma zamanlama problemini ortadan kaldırır ve statik zamanlama analizlerini basitleştirir: saat duraklama veya yavaşlarsa, makine derhal sıfırlanamaz.Görüntüleme sistemi durdurabilir tasarımlar için senkronizasyonu kullanın - ancak her zaman saat sıfırlandığında çalışır.

Maksimum güvenilirlik için, her ikisini birleştirin: güvenli bir devlet için hemen bir ahenksiz sıfır kullanın, sonra tamamen senkronize bir operasyona geçiş yapın. Ayrıca FSM'nin yasadışı veya ulaşılamaz bir durumda sıkışıp kalması durumunda bir sıfır oluşturabilecek bir “gözlü bir işlem” da göz önünde bulundurun.

Giriş senkronizasyon ve Metastability

Bir devlet makinesi, bir düğmeden veya başka bir saat domainden bir giriş aldığında, giriş sinyali FSM'nin saatini metastabiliteden kaçınmak için senkronize edilmelidir - bir spiralin çıkışının iki veya üç boyutlu bir çözüm arasında ilerlediği bir durumdur:

signal async_in : std_logic;
signal sync_meta : std_logic;
signal sync_out : std_logic;
process(clk)
begin
 if rising_edge(clk) then
 sync_meta <= async_in;
 sync_out <= sync_meta;
 end if;
end process;

Çiğ asynchronous sinyali doğrudan FSM'nin sonraki devlet mantığında kullanmıyor; her zaman senkronize edilen sürüm kullanın.For multi-bit otobüsler saat domains, bir FIFO veya elhake protokolü kullanmayı düşünün.

Mekanik Girdileri İyileştirmek

FSM'ler, baskı veya anahtarlar tarafından yönlendirilerek yönlendirilir, tek bir basın, bağlantının düşmesi nedeniyle birden fazla kenar oluşturabilir. Devlet makinesi, erratic işlemine neden olabilir.Debouncing, dijital alanda, sinyalin yerine getirilmesi için belirli bir kesintiye uğraması için yapılabilir (örneğin, 10-20 ms). Basit bir yaklaşım, bir filtredeki girişi çok daha düşük bir hızda örneklemedir (örneğin, 1 kHz) ve N ardışık örnekler için sinyal gerekir.

Coding Stil: İki-Process vs. Three-Process FSMs

FSMs için iki yaygın olarak kabul edilen VHDL kodlama stilleri vardır: iki işlem tarzı ve üç işleme stili. Her ikisi de sentezlenebilir ve güvenilirdir; seçim çoğunlukla okuma ve kişisel tercih meselesidir.

İkiProcess FSM

İki işlem tarzı, devlet kaydı ve sıfırlama için bir eşdeğer bir süreçtir ve bir sonraki devlet ve çıkış mantığı için bir tane sequential process is sensitive to state and inputs only – no hour. Bu stil açıkça to verify: it easy to verify:

-- Sequential process (state update)
seq: process(clk, rst_n)
begin
 if rst_n = '0' then
 state <= IDLE;
 elsif rising_edge(clk) then
 state <= next_state;
 end if;
end process;

-- Combinatorial process (next state & outputs)
comb: process(state, input1, input2)
begin
 next_state <= state; -- default to staying
 output1 <= '0';
 case state is
 when IDLE =>
 if input1 = '1' then
 next_state <= WORK;
 end if;
 when WORK =>
 output1 <= '1';
 if input2 = '1' then
 next_state <= DONE;
 end if;
 when DONE =>
 next_state <= IDLE;
 when others =>
 next_state <= IDLE;
 end case;
end process;

Durumdan önce hangi çıktılara varsayılan değer verilir; bu, latches'i önler ve her devletin (aynıysa bile) tespit edilen varsayılan atamalar, düktörel süreçlerde yaygın bir spam kaynağıdır.

Üç gerektirir FSM

Üç işlem tarzı devlet kaydı, bir sonraki devlet mantığı ve üç ayrı işlemde çıktı mantığını ayırmaktadır. Bu, karmaşık makineler için birçok çıktı ile kod organizasyonu geliştirebiliyor. Bazı mühendisler bunu tercih eder çünkü her bir süreç tek bir sorumluluka sahiptir:

-- State register
seq_state: process(clk, rst_n)
...
-- Next state combinatorial
seq_next: process(state, inputs)
...
-- Output combinatorial (or registered)
comb_output: process(state, inputs)
...

Her iki stil de doğru kodlandığında eşit derecede güvenilirdir. Tek işlem stilinden kaçının (her şey bir saat içinde yapılır) çünkü komiserlik ve kayıtlı atamaları karıştırır, simülasyon ve sentezlemeyi daha zor hale getirir.

Varsayılan Devlet ve "Güvenli Devlet" Kurtarma

Doğru sıfırlama ve kodlama ile bile, bir sonraki devletten kimliklendirmeye kadar yasadışı bir duruma girmek için devlet makinesinin mümkün olduğu gibi, tasarımda bir hata nedeniyle veya "güvenli bir devlet" kurtarma mekanizmasının uygulanması için.

case state is
 when IDLE => ...
 when WORK => ...
 when others => next_state <= IDLE;
end case;

sentezlenebilir VHDL için, aletler ESFLT:11'e göre, beklenmedik bir modelin görüldüğü gibi, hata tespiti kodları veya üçlü devreleri kullanarak, bir alternatif "yaradışı devlet deküm" kullanmaktır: bir karşı veya bir parite kontrolü, beklenmedik bir model görülmez.

Testbenches ve Doğrulama Stratejileri

Thorough simülasyon güvenilir FSM tasarımı için gereklidir. Cihazın sıfır, boş ve tüm girdi kombinasyonları dahil olmak üzere her devlet geçişi egzersizlerini test edin. Makinenin asla ulaşılamaz bir duruma girmeyeceğini doğrulamayı kullanın ve bu çıktılar beklenen zaman çizelgesine uymayı kontrol edebilirsiniz: Örneğin, makineyi sıfırlayın.

wait until rising_edge(clk);
assert state = IDLE report "Reset failed" severity failure;

Kontrollü test tüm devlet-input çiftlerinin test edilmesini sağlayabilir. Birçok araç, hangi devletlerin ve geçişlerin egzersiz yaptığını gösteren FSM kapsamı ölçümlerine destek vermektedir. 03.Doulos' VHDL testbench teknikleri) Kapsamlı doğrulama ortamları oluşturmak için iyi bir başlangıç noktası sağlar.

Ortak Pitfalls ve Them'dan Nasıl Kaçırmak

Gerçek Dünya Uygulamaları ve Gelişmiş Desenler

Güvenilir devlet makinesi tasarımı sadece akademik değildir - USB kontrolörlerinden her şeyde kullanılır (her bir paket için kesin bir durum takip gerektirir) Uzaylı iletişim protokollerine. Örneğin, JTAG TAP kontrolörü IEEE 1149.1 standart olarak tanımlanan klasik bir Moore FSM. birçok tasarımcı, bir iki işleme stilini hız için uygular.

Çok yüksek aktarım gerektiren tasarımlar için, "FSM'yi boru hatlarıyla" göz önünde bulundurun: çıkış sinyalleri kayıt edin, böylece devlet geçişinden sonra bir saat döngüsü değiştirirler.Bu, geç kalmışlar, ancak otobüs hatlarında kombinatöryel aksaklıklar ortadan kaldırır. ”

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Güvenilir VHDL devlet makineleri tasarlarken, her dijital tasarımcının hem sağlam hem de sağlam bir şekilde korunması gereken bir yetenektir.To understand the trade-offs between Moore and Mealy architectures, choose an appropriate state encoding, using enumerated types, and implement the reliable reset and senkronizasyon strategy, you can create control logic that is both maintainable and strong. her zaman derinlemesine, güvenli devlet kurtarma içerir ve en zorlu uygulamaları sıfırlama veya sinyal senkronizasyonu için istekli olacaktır.