Robust Designs için Vhdl'de Asynchronous reset Mantıkını Uygulamayın
Dijital Tasarımda Asynchronous Sıfır Anlamak
VHDL'de bir senkronizasyon mantığı uygulamak, güçlü ve güvenilir dijital tasarımlar oluşturmak için temel bir konudur. FPGA tabanlı sistemler veya ASIC uygulamaları geliştirmek, devrelerinizi doğru şekilde uygulamak için nasıl önemli olduğunu anlamak, dijital tasarımda, resetler bir şekilde bir devreyi güçlendikten sonra önceden tanımlanmış bir duruma getirmek için kullanılır.Bu sistem istikrarı, hata kurtarma ve çeşitli işletim koşulları ile ilgili öngörülebilir davranış için önemlidir.
Bir asynchronous reset, saat sinyalinden bağımsız olarak çalışan bir kontrol sinyalidir, gericilerden ve diğer eşdeğer elemanların hemen doğru şekilde sıfırlamasına izin verir. Bir asynchronous reset, sıfır sinyalinin ortaya çıktığı anda etkinleştirilir.Bu acil yanıt özelliği, senkronizasyonlu meslektaşlarından ve özellikle de özel tasarım senaryolarında değerli hale getirir.
Ne yapar Asynchronous Farklı
Asynchronous reset devre ücretsiz koşu saati bağımsızdır. Bu, Sıfır devrenin Saat girişi hakkında bilgi sahibi olmadığı anlamına gelir.Bu bağımsız saat domaini, tasarımcıların uygulamalarında anlamaları ve hesabı anlamaları gereken birkaç eşsiz özellik sunar.
Asynchronous ve senkronizasyonlu sıfırlar arasındaki anahtar ayrım, sistem saati ile zaman zaman zaman ilişkisinde yatıyor. Sıfır sinyalinin iddia edildiği aktif saat kenarlarında senkronizasyonu etkinleştirir.In contrast, asynchronous resets take effect immediately, if of hour state or time.This basic difference.
Asynchronous reset
Anahtar faydalarından biri, bir sonraki saat döngüsü boyunca bir sistemin sıfırlanması gereken durumlarda, sıfır sinyalinin herhangi bir zamanda açıklanabilir olduğu gibi, bir sistemin hemen sıfırlanması gereken durumlarda özellikle kullanışlı olabilir.Bu, güç sıralamaları ve kritik hata koşulları sırasında özellikle değerli bir şekilde sıfırlanabilir.
Saat tükendiğinde, e.g. güç-on ilkizasyon sırasında veya saat kaynakları kararsız olduğunda gerçekleşebilir. Asynchronous resets, by definition, don't need a hour to be available and it may be necessary to use this kind of reset in certain cases – for example, Xilinx MMCM and PLL prims have ansynchronous resets, by definition, don't need ahour to be present.
VHDL'de Asynchronous reset'i uygulama
VHDL'de asenkron sıfır mantığının uygulanması, kodlama tarzı ve proses duyarlılığı listeleri için dikkatli bir dikkat gerektirir. Standart yaklaşım hem saat sinyaline hem de sıfır sinyaline duyarlı bir süreç yaratır, sıfırlamanın iddia edildiğinde hemen etkileyebileceğini garanti eder.
Temel Asynchronous reset Structure
VHDL'de asenkron sıfırın uygulanması için temel yapı iyi kurulmuş bir model takip eder. Aşağıdaki kod parçaları, bir senkronizasyon ile senkronize edilebilir bir sıfır ile standart bir uygulama gösterir.For asynchronous reset, the process sensitive list must include both the hour and reset messages.
İşte asynchronous reset uygulamasının temel bir örneği:
library IEEE;
use IEEE.std_logic_1164.all;
entity dff_async_reset is
port(
clk : in std_logic;
reset : in std_logic;
d : in std_logic;
q : out std_logic
);
end dff_async_reset;
architecture behavioral of dff_async_reset is
begin
process(clk, reset)
begin
if reset = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;
end behavioral;
Bu uygulamada, süreç her ikisine de duyarlıdır:0)clk[DÜT:1) ve [[Dönetici:2)[Dönetici: 3 ). Sıfırlama sinyalinin ortaya çıktığı zaman (bu durumda) çıktı (DöküzDüzDüzDüzDüzücük)[Dönetici) [Dönetici:0)
Çok-Bit Asynchronous reset ile kayıt
Çok fazla kayıt veya devlet makineleri içeren daha karmaşık tasarımlar için, aynı prensip geçerlidir ancak yönetmek için ek sinyallerle. İşte bir örnek 8bit kayıt asynchronous reset:
library IEEE;
use IEEE.std_logic_1164.all;
entity register_async is
port(
clk : in std_logic;
reset : in std_logic;
d_in : in std_logic_vector(7 downto 0);
q_out : out std_logic_vector(7 downto 0)
);
end register_async;
architecture behavioral of register_async is
begin
process(clk, reset)
begin
if reset = '1' then
q_out <= (others => '0');
elsif rising_edge(clk) then
q_out <= d_in;
end if;
end process;
end behavioral;
[0](Diğerleri => '0')) inşa, tüm kayıt genişliğine tam olarak sıfırlanan, vektörün tüm aralıkları sıfıra çıkarmak için uygun bir yol sunar.
Asynchronous reset ile Uygulama
Okunmalar dijital tasarımlarda ortak bina bloklarıdır ve uygun sıfırlama uygulamalarından önemli ölçüde faydalanmaktadır. İşte asynchronous reset ile karşı bir karşı kapsamlı bir örnek:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity counter_async is
port(
clk : in std_logic;
reset : in std_logic;
enable : in std_logic;
count : out std_logic_vector(7 downto 0)
);
end counter_async;
architecture behavioral of counter_async is
signal count_reg : unsigned(7 downto 0);
begin
process(clk, reset)
begin
if reset = '1' then
count_reg <= (others => '0');
elsif rising_edge(clk) then
if enable = '1' then
count_reg <= count_reg + 1;
end if;
end if;
end process;
count <= std_logic_vector(count_reg);
end behavioral;
Bu karşı, koşullu bir sıfır uygulamadaki hiyerarşik yapının ortaya çıkmasını gösterir. sıfırlama kontrolü ilk olarak meydana gelir ve en yüksek öncelik alır, saat kenar algılaması ile takip eder ve sonunda normal işlem için durum sağlar.
Devlet Makine Asynchronous reset
Finite devlet makineleri (FSMs) dijital sistemlerde kritik bileşenlerdir ve uygun sıfırlama uygulamaları her zaman bilinen, güvenli bir durumda başlamalarını sağlar. İşte bir FSM örneği asynchronous reset:
library IEEE;
use IEEE.std_logic_1164.all;
entity fsm_async is
port(
clk : in std_logic;
reset : in std_logic;
input : in std_logic;
output: out std_logic
);
end fsm_async;
architecture behavioral of fsm_async is
type state_type is (IDLE, ACTIVE, DONE);
signal current_state, next_state : state_type;
begin
-- State register with asynchronous reset
process(clk, reset)
begin
if reset = '1' then
current_state <= IDLE;
elsif rising_edge(clk) then
current_state <= next_state;
end if;
end process;
-- Next state logic
process(current_state, input)
begin
case current_state is
when IDLE =>
if input = '1' then
next_state <= ACTIVE;
else
next_state <= IDLE;
end if;
when ACTIVE =>
next_state <= DONE;
when DONE =>
next_state <= IDLE;
end case;
end process;
-- Output logic
output <= '1' when current_state = ACTIVE else '0';
end behavioral;
Bu FSM uygulaması, devlet kaydının (bir sonraki devlet mantığından) ayrı ayrı ayrı ayrıdır, devlet makinesi tasarımı için en iyi uygulamaları takip eder.
Asynchronous reset ile eleştirel Meydanlar
Asynchronous resets acil yanıt ve saat bağımlı bir operasyon sunarken, tasarımcıların güvenilir bir operasyon sağlamak için dikkatli bir şekilde ele almaları gereken birkaç zorluk tanıştılar.
Metastability ve reset Deassertion
Ancak, tasarımdaki tüm senkronizasyonlar için aynı saat kenarda olması en önemli zorluk, sıfırdan çıkabileceği anlamına gelir - sıfır kesintinin bir önemli sorunu vardır - sıfır deassertion, tasarımdaki tüm senkronizasyonlu ilkel varlıklar için aynı saat kenarda gerçekleşmesi garanti edilmez.Bu, tasarımın farklı kısımlarının farklı zamanlarda sıfırdan çıkabileceği anlamına gelir, ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı ayrı bir kontrol yoktur.
Ancak, sıfırlama reddedilirken ve kurtarmayı (μtSU) veya kaldırmayı (μtH) zaman kontrol etmek ( Timing Analyzer kurtarma ve geri yükleme analizleri her iki kez kontrol edildiğinde, kenarın doğru durumu belirlemek için gerekli olduğu söylenir ve gecikme süresinin aşağı kaydına başlamamasına neden olabilir, sistem başarısızlığına yol açabilir.
Dağıtım ve Timing
Sorun, büyük, çok fazla saat alan tasarımları dikkate alındığında, senkronizasyon sorunlarının yanı sıra, yüz yüzen bir resetin milyonlarca kişiye karşı dağılımı zor, CTS (Clock Tree Synthesis) ve benzer bir alanı ve routing kaynaklarına benzer şekilde hitap etmek için.Bu, modern, karmaşık FPGA ve ASIC tasarımları ile kritik bir endişeyi sıfırlamaktadır.
Asynchronous reset sürüm işlemi, başlangıçta test sırasında ortaya çıkamayan ancak üretim ortamlarında ortaya çıkan senkronizasyon başarısızlıklarını ortadan kaldırmak için senkronize edilmelidir. Bu başarısızlıklar özellikle sorunlu olabilir çünkü üretim ortamlarında ortaya çıkabilir.
Glitch Hassasiyet
Asynchronous reset sinyalleri, sıfır hattında aksaklar ve gürültü için doğal olarak hassastır. senkronizasyonun aksine, sadece saat kenarlarında örneklenir ve bu nedenle, sıfır sinyaline herhangi bir geçişe cevap verir.Bu hassaslık, doğru sıfırlama sinyalinin ve routingin kritik tasarım gözlerine dönüştüğü anlamına gelir.
Synchronization Techniques
Asynchronous reset deassertion ile ilişkili zorluklara ulaşmak için, tasarımcılar genellikle senkronizasyon teknikleri ile aynılıksız bir iddianın faydalarını senkronizasyon ile birleştiren sıfır senkronizasyon teknikleri kullanırlar.
Asynchronous Assert, Senkron Deas
Sıfır senkronizasyonu ve tezini, metastabilite sorunları önlemek için doğru bir şekilde ifade edebiliriz. Bu yaklaşım, genellikle "async iddia, senkronizasyon" olarak adlandırılan, her iki dünyanın en iyisini sağlar: gerektiğinde hemen sıfırlanma, kontrol edilebilirlik sorunları önlemek için.
İşte bir reset senkronize VHDL uygulaması:
library IEEE;
use IEEE.std_logic_1164.all;
entity reset_synchronizer is
port(
clk : in std_logic;
async_reset: in std_logic;
sync_reset : out std_logic
);
end reset_synchronizer;
architecture behavioral of reset_synchronizer is
signal reset_sync_reg : std_logic_vector(1 downto 0);
attribute ASYNC_REG : string;
attribute ASYNC_REG of reset_sync_reg : signal is "TRUE";
begin
process(clk, async_reset)
begin
if async_reset = '1' then
reset_sync_reg <= (others => '1');
elsif rising_edge(clk) then
reset_sync_reg <= reset_sync_reg(0) & '0';
end if;
end process;
sync_reset <= reset_sync_reg(1);
end behavioral;
Bu senkroniz, sıfırın serbest bırakılması durumunda, sıfırların kaydı ile iki aşamalı bir geçiş kaydı kullanır.Bir senkronizasyonlu sıfırlandığında, her iki aşama da hemen ‘1'e gider.
Bu, her bir saat domaini içindeki senkronizasyon elemanlarının aynı anda sıfırdan çıkmasını garanti edecektir (örneğin aynı saat kenarda). ASYNC REG özelliği sentez ve yer-ve-route araçları, bu kayıtların bir senkronizasyon zinciri oluşturup metastabilite riskleri en aza indirmek için birlikte yerleştirilmelidir.
Multi-Stage Synchronization
Bu nedenle, kayıttan sonra birkaç takip kaydı ekleyin ve tasarımdaki bu kayıtların çıktısını kullanın. senkronizasyon aşamalarının sayısı belirli gereksinimlere ve MTBF (Mean Time Between failures) tasarımlarınız için hedeflere bağlıdır.
Kritik uygulamalar için, üç aşamalı bir senkroniz uygun olabilir:
library IEEE;
use IEEE.std_logic_1164.all;
entity reset_sync_3stage is
port(
clk : in std_logic;
async_reset: in std_logic;
sync_reset : out std_logic
);
end reset_sync_3stage;
architecture behavioral of reset_sync_3stage is
signal sync_chain : std_logic_vector(2 downto 0);
attribute ASYNC_REG : string;
attribute ASYNC_REG of sync_chain : signal is "TRUE";
begin
process(clk, async_reset)
begin
if async_reset = '1' then
sync_chain <= (others => '1');
elsif rising_edge(clk) then
sync_chain <= sync_chain(1 downto 0) & '0';
end if;
end process;
sync_reset <= sync_chain(2);
end behavioral;
senkronizasyon zincirindeki her ek aşama, tasarım mantığına göre metastabilite olasılığını azaltır, sıfır deassertion'da ek gecikme maliyetine.
Per-Clock-Domain reset Synchronization
Genel olarak, bu senkronizasyon devrelerinden biri her bir asynchronous saat domain için gerekli olacaktır. Çok saat tasarımlarında, her saat domain bu alanda uygun sıfırlama sağlamak için kendi reset senkronize sahip olmalıdır.
İşte iki saat alan sistemi için örnek bir mimari:
library IEEE;
use IEEE.std_logic_1164.all;
entity multi_clock_reset is
port(
clk_a : in std_logic;
clk_b : in std_logic;
async_reset : in std_logic;
reset_a : out std_logic;
reset_b : out std_logic
);
end multi_clock_reset;
architecture behavioral of multi_clock_reset is
component reset_synchronizer is
port(
clk : in std_logic;
async_reset: in std_logic;
sync_reset : out std_logic
);
end component;
begin
-- Reset synchronizer for clock domain A
sync_a: reset_synchronizer
port map(
clk => clk_a,
async_reset => async_reset,
sync_reset => reset_a
);
-- Reset synchronizer for clock domain B
sync_b: reset_synchronizer
port map(
clk => clk_b,
async_reset => async_reset,
sync_reset => reset_b
);
end behavioral;
Bu mimari, her saat domainin düzgün bir şekilde sıfırlanmış bir sinyale sahip olmasını sağlar, zamanlama ihlallerini ve birden fazla saat domaini kullanarak ortaya çıkabilecek metastabilite sorunlarını önlemek.
Asynchronous reset Uygulama için en iyi uygulamalar
Asynchronous reset mantığının başarılı uygulanması, tasarım başarısızlıklarından öğrenilen endüstri deneyimi ve dersler aracılığıyla rafine edilen en iyi uygulamaları kurmak için bağlılık gerektirir.
Consistent reset Polarity
Tasarım boyunca tutarlı sıfırlama kutupluluğu koruyun. Aktif veya aktif olarak sıfır seçin ve tüm modüllerle birlikte tutun. Aktif yüksek ve aktif-düşüm arasındaki seçim genellikle bir sözleşme veya hedef teknoloji gereksinimleri meselesidir, tutarlılık ve hataları azaltmak için önemlidir.
FPGA tasarımları için, hedef cihazın geri dönüş kutuplarını düşünün. Bazı FPGA aileleri aktif olarak yüksek sıfırlama kaynaklarına sahiptir, diğerleri tasarımınızı aktif olarak kullanıyorsa, kaynak kullanımınızı ve zamanlamayı artırabilir.
Tamam Signal reset
Bu nedenle en iyi uygulama şu: Eğer bir senkronizasyon süreci sıfırlanmışsa, süreçte yazılan tüm sinyalleri sıfırlamaktan emin olun.Bu ilke, asynchronous reset uygulamaları için eşit şekilde geçerlidir. Tamamlanan sıfır kapsama alanı öngörülemeyen davranışlara ve zor-debug ilkleştirme sorunlarına yol açabilir.
İşte doğru tam sıfır kapsama gösteren bir örnek:
-- GOOD: All signals reset
process(clk, reset)
begin
if reset = '1' then
signal_a <= '0';
signal_b <= '0';
signal_c <= (others => '0');
elsif rising_edge(clk) then
signal_a <= input_a;
signal_b <= input_b;
signal_c <= input_c;
end if;
end process;
-- BAD: Incomplete reset
process(clk, reset)
begin
if reset = '1' then
signal_a <= '0';
-- signal_b and signal_c not reset!
elsif rising_edge(clk) then
signal_a <= input_a;
signal_b <= input_b;
signal_c <= input_c;
end if;
end process;
Sıfırlama Mandatory
Her zaman FPGA'da her saat domaini senkronize etmek için sıfır senkronize kullanın, i.e., reset senkroniz PietervanStar'ı kullanın. Bu güvenilir tasarımlar için isteğe bağlı değildir - temel bir gerekliliktir.
senkronize sıfırlama yaklaşımı birkaç fayda sağlar:
- Metastability risklerini sıfırlama deassertion sırasında
- Bir saat domain çıkışındaki tüm flip-flops aynı anda sıfırlandığında garanti eder
- Tahmin edilebilir devlet makinesi ilkizasyon sağlar
- Zaman zaman analizini basitleştirir ve kapanış
- Geçici başarısızlık olasılığını azaltır
Proper Hassasiyet Listesi Yönetimi
Asynchronous reset processes, the sensitive list must include both the hour and reset signal to.Requis the reset from the sensitive list will result in sentez-simulation yanlışmatch, the Simülasyonun sentezlenen donanımdan farklı davrandığı yer.
-- CORRECT: Both clk and reset in sensitivity list
process(clk, reset)
begin
if reset = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;
-- INCORRECT: Missing reset in sensitivity list
process(clk) -- WRONG!
begin
if reset = '1' then
q <= '0';
elsif rising_edge(clk) then
q <= d;
end if;
end process;
Signal Routing ve Dağıtımı
Sinyal yönlendirmesine dikkat edin, özellikle büyük tasarımlarda. Hedef FPGA'da mevcut olduğunda özel olarak düşük-skew kontrol sinyalleri dağıtım için tasarlanmıştır.
Çok büyük tasarımlar için, birincil sıfır senkronize edilen dağıtım ağının, tasarımın farklı bölgeleri veya modülleri için ikincil senkronize beslediği bir hiyerarşik sıfırlama ağı uygulamayı düşünün.Bu yaklaşım fan-out ve zamanlama kapatmaya yardımcı olabilir.
Mix Tipleri
Birçok tasarımcının yaptığı büyük sorun, senkronizasyonlu ve asynchronous resets'leri FF'de bir sonraki sıfır limanı sürmek için karıştırdıkları ve zor-diagnose sorunları ortaya çıkarabilir.
Hem güç-on reset (asynchronous) hem de işlevsel reset (enkron) yeteneklerine ihtiyacınız varsa, onları ayrı ayrı ve açıkça amaçları ve etkileşimleri belgeleyin.
Testbench Verification
Testbenches'inizde kapsamlı bir sıfırlama testi ekleyin. Bunu doğrulayın:
- Bütün devlet elemanlarını doğru bir şekilde başlatın
- İşlem sırasında herhangi bir zamanda açıklanabilir
- Tasarım, sıfırdan doğru şekilde geri dönüyor
- Yenidenleme metastability veya zamanlama ihlallerine neden değildir
- Birden fazla sıfırlama / sürüm döngüleri doğru çalışır
İşte ayrıntılı sıfırlama testi içeren bir test şablonu:
library IEEE;
use IEEE.std_logic_1164.all;
entity tb_reset_test is
end tb_reset_test;
architecture testbench of tb_reset_test is
signal clk : std_logic := '0';
signal reset : std_logic := '1';
signal data : std_logic := '0';
signal q : std_logic;
constant CLK_PERIOD : time := 10 ns;
begin
-- Clock generation
clk <= not clk after CLK_PERIOD/2;
-- DUT instantiation
dut: entity work.dff_async_reset
port map(
clk => clk,
reset => reset,
d => data,
q => q
);
-- Test process
process
begin
-- Test 1: Initial reset
reset <= '1';
wait for 50 ns;
assert q = '0' report "Reset failed" severity error;
-- Test 2: Release reset and verify operation
reset <= '0';
wait for 20 ns;
data <= '1';
wait until rising_edge(clk);
wait for 1 ns;
assert q = '1' report "Normal operation failed" severity error;
-- Test 3: Asynchronous reset during operation
wait for 30 ns;
reset <= '1';
wait for 1 ns;
assert q = '0' report "Async reset failed" severity error;
-- Test 4: Reset release at various clock phases
reset <= '0';
wait for 3 ns; -- Release at arbitrary time
wait until rising_edge(clk);
wait for 50 ns;
-- Test 5: Multiple reset cycles
for i in 1 to 5 loop
reset <= '1';
wait for 15 ns;
reset <= '0';
wait for 25 ns;
end loop;
report "All tests passed" severity note;
wait;
end process;
end testbench;
Asynchronous vs Synchronous reset: Seçim yapmak
Bir senkronizasyon veya asynchronous reset arasındaki seçim, mantıkın sıfırlanma ve proje gereksinimlerinin doğasına bağlıdır. Bu yaklaşımlar arasındaki ticaret-offları bilgilendirilmiş tasarım kararları vermek için gereklidir.
Asynchronous reset
Asynchronous resets birkaç zorlayıcı avantaj sunuyor:
- [FONT:0]Clock-in independent operation: Devre, saat çalışmıyorken bile sıfırlanabilir veya dengesizdir.
- [FONT:0)Immediate yanıt:[Dönem:[Dönem: 1 ) Tamamlama, bir saat kenarını beklemeden anında etki alır
- [FONT=0)Power-on ilkizasyon:[Dönetici:[Dönetici:0)[Dönlendirme:[Dönlendirme:[Dönlendirme:[Dönlendirme:0))
- [FONTD:0]Simpler veripath:[Dönetici:[Dönetici:0)[Döneticiler veripath:[Döneticileri değiştir] ve kayıtlar arasındaki veri varış zamanlarını olumsuz etkilemez.
- [FONT:0)Hardware verimliliği:[Dönetici:[Dönetici:0)[FONTD][FONT=0) Katı-flopsiyonları, mantık kaynaklarına sahip olmak yerine döndürmek için yeniden ayarlanan sıfır noktaları kullanın
Synchronous reset avantajları
Senkron sıfırlamalar da önemli faydalar sağlar:
- [FONT=0) Tahmin edilebilir zamanlama:[[Dönemli sıfırlar öngörülebilir (saat kenarda) Senkron sıfırlamalar sağlam bir a.o. karşı glitches sağlam bir a.o.
- [FONT:0] Hiçbir metastabilite sorunu yok:[Dönetici:[Dönetici: 0) Sistem zamanlamasında sıfır sinyali senkronize ederek, tasarımcılar, sistemin zamanlamasında sıfırlama işleminin bilinen ve istikrarlı bir noktada meydana gelmesini sağlayabilirler.
- [FONT:0) FPGA sentez için işaret edin:) sentez araçları, cihazı paketleme işlemine dönüştürebilecek bir senkronizasyon sinyalini veripath için (örneğin, DUTs’u geri yüklemeye çalışan LUTs) birleştirmektedir.
- DPS48 veya BRAMs gibi bazı ilkellere güvenmek için araçlara güvenseniz, bu sadece bir senkronizasyon sıfırını kodlamışsanız mümkündür - bu ilkel sıfırlar bir şekilde destekleyemez.
Endüstri Uygulamaları ve Öneriler
Genel olarak, senkronizasyonlu sıfırlar belirli bir devrenin bir senkronizasyonlu sıfır gerektirdiği sürece önerilir. Seçim, kullanılan teknolojiye bağlı olabilir, e.g. some FPGA blokları sadece bir senkronizasyon ve FPGA tasarım toplulukları arasında önemli ölçüde değişebilir.
ASIC tasarımları için, asynchronous resets, özellikle güç sıfırlama senaryoları için yaygındır. FPGA tasarımları için, satıcılar daha fazla senkronizasyonlu sıfırlama veya senkronizasyon ile bir senkronizasyonun karma yaklaşımına daha fazla destek vermektedir.
Eğer değilse, bir senkronizasyonlu sıfır kullanın.Sadece bunu açıkça gerektiren mantık elemanları ile (özellikle karmaşık FPGA ilkelleri ve IP çekirdeği, e.g. transceivers ve otobüs kontrolörleri) kullanın ve hatta bu yüzden, mümkün olduğunca senkronizasyonlu sıfırlama sinyali kullanmaya çalışın.
Gelişmiş Yeni Yeni Yenileme Teknikleri ve Desenler
Temel sıfırlama uygulamasının ötesinde, birkaç gelişmiş teknik karmaşık tasarımlarda sıfır mantığın sağlamlığını ve işlevlerini artırabilir.
Power-On reset Generation
Birçok FPGA tasarımları, cihaz yapılandırması sırasında otomatik olarak iddia edilen bir güç-on sıfırlama gerektirir ve saatler stabil olduktan sonra serbest bırakılır. Güvenilir bir güç-on reset oluşturmak için bir model:
library IEEE;
use IEEE.std_logic_1164.all;
entity power_on_reset is
generic(
RESET_CYCLES : integer := 16 -- Number of clock cycles to hold reset
);
port(
clk : in std_logic;
por_reset : out std_logic
);
end power_on_reset;
architecture behavioral of power_on_reset is
signal reset_counter : integer range 0 to RESET_CYCLES := RESET_CYCLES;
signal reset_reg : std_logic := '1';
begin
process(clk)
begin
if rising_edge(clk) then
if reset_counter > 0 then
reset_counter <= reset_counter - 1;
reset_reg <= '1';
else
reset_reg <= '0';
end if;
end if;
end process;
por_reset <= reset_reg;
end behavioral;
Bu güç sıfırlama jeneratörü, FPGA'nın başlangıç yeteneklerini maksimum değere başlamayı kullanır, sıfırlamanın yapılandırmadan hemen sonra doğru olduğunu iddia eder. reset, PLLs ve diğer devreler için zaman sağlar.
Durumsal Yeniden Yapı
Bazı tasarımlarda, tüm kayıtların sıfır olması gerekmez. Kullanımından önce geçerli verilerle yüklenmesi garanti edilen veri yolu kayıtları genellikle sıfır mantık, tasarruf kaynakları ve zamanlamayı geliştirmektir. Ancak kontrol mantığı ve devlet makineleri her zaman sıfırlanmalıdır.
architecture behavioral of mixed_reset is
signal control_state : state_type;
signal data_pipeline : std_logic_vector(31 downto 0);
begin
-- Control logic: MUST have reset
control_proc: process(clk, reset)
begin
if reset = '1' then
control_state <= IDLE;
elsif rising_edge(clk) then
-- state machine logic
end if;
end process;
-- Data pipeline: No reset needed if always loaded before use
data_proc: process(clk)
begin
if rising_edge(clk) then
if data_valid = '1' then
data_pipeline <= input_data;
end if;
end if;
end process;
end behavioral;
Bu seçici yaklaşım büyük tasarımlarda kaynak kullanımını önemli ölçüde azaltabilir, ancak başlangıç kaydının başlangıçta sorunlara neden olamayacağına dikkat etmek için analiz gerektirir veya reset sürümden sonra.
Öncelik ve Hierarchy
Birden fazla sıfırlama kaynağı ile tasarımlarda (güç-on reset, dış reset düğmesi, bekçi zamanı sıfır, vs) açık bir öncelik hiyerarşisi oluşturun:
library IEEE;
use IEEE.std_logic_1164.all;
entity reset_manager is
port(
clk : in std_logic;
por_reset : in std_logic; -- Power-on reset (highest priority)
external_reset: in std_logic; -- External reset button
watchdog_reset: in std_logic; -- Watchdog timer reset
system_reset : out std_logic -- Combined system reset
);
end reset_manager;
architecture behavioral of reset_manager is
signal combined_reset : std_logic;
signal sync_reset : std_logic;
begin
-- Combine all reset sources (OR logic)
combined_reset <= por_reset or external_reset or watchdog_reset;
-- Synchronize the combined reset
sync_proc: process(clk, combined_reset)
variable sync_chain : std_logic_vector(1 downto 0) := (others => '1');
begin
if combined_reset = '1' then
sync_chain := (others => '1');
elsif rising_edge(clk) then
sync_chain := sync_chain(0) & '0';
end if;
sync_reset <= sync_chain(1);
end process;
system_reset <= sync_reset;
end behavioral;
Bu reset yöneticisi birden fazla sıfırlama kaynağını birleştirir ve tasarımın geri kalanı için tek, senkronize edilmiş bir sıfırlama çıktısını sağlar ve tutarlı davranışı sağlar.
Asynchronous reset için Timing Constraints and Analysis for Asynchronous reset
Proper zamanlama kısıtlamaları, asynchronous reset devrelerinin zamanlama gereksinimleriyle karşılaştırılması ve güvenilir bir şekilde çalışması için önemlidir.
Kurtarma ve Yok Edilmesi Timing
Asynchronous reset sinyalleri, saat boyunca kurtarma ve geri yükleme şartları karşılamalıdır. TimeQuest, reset kurtarma ve yükleme zamanlaması ile senkronize edilen reset yollarınızı analiz edecektir.Bu zamanlama kontrolleri, sıfırlamanın kesintiye uğramadığı ve zaman gereksinimlerinin tutulmasını sağlar.
Kurtarma zamanı zamanını kurmak için analogdır - sıfırlamanın aktif saat kenarlarından önce tezsiz olması gerekir. Yoklama süresi zaman tutma zamanı - sıfırlamanın aktif saat kenarlarından sonra tezsiz kalması gerekir.
SDC Yeniden Döndürme için Kıvırlamalar
Doğru zamanlama analizi için, sıfır yollarınızı uygun şekilde kısıtlayın. İşte bir senkronizasyon için SDC kısıtlamaları:
# Set false path for asynchronous reset assertion
# (Reset assertion is asynchronous and doesn't need timing analysis)
set_false_path -from [get_ports async_reset] -to [all_registers] -setup
# Constrain reset recovery/removal timing
# (Reset deassertion must meet timing)
set_max_delay -from [get_ports async_reset] -to [all_registers] 5.0
# For reset synchronizer chains, preserve registers
set_preserve_register [get_cells reset_sync_reg*]
# Mark synchronizer registers with ASYNC_REG property
set_property ASYNC_REG TRUE [get_cells reset_sync_reg*]
Bu kısıtlamalar, zamanlama analizörünin sıfırlamanın bir senkronizasyon iddiasını görmezden geldiğini söylüyor (sonsuz olmak anlamına gelir) ancak reset deassertion'ın zamanlama gerekliliklerini senkronize etme aşamasında kontrol ediyor.
Dağıtım Timing
Büyük tasarımlarda, sıfırlama sinyal dağılımı bu stratejileri göz önünde bulundurmak için bir zamanlama şişeneck olabilir:
- FPGA tarafından sağlanan özel global sıfırlama ağları kullanın
- Implement region reset senkroniz to reduce fan-out
- Boru reset sinyalleri çok büyük tasarımlar için
- Sıfır senkroniz zincirleri için zamanlamaya dayalı yerleştirme
Ortak Pitfalls ve Them'dan Nasıl Kaçırmak
Asynchronous reset uygulamadaki yaygın hataları anlamak, tasarımcılar pahalı debugging seanslarından ve potansiyel alan başarısızlıklarından kaçınmaya yardımcı olur.
Pitfall 1: Youhronization'u unutun
En yaygın ve tehlikeli hata, geri yükleme ve saat kenarları arasındaki kesin zamanlama ilişkisine bağlı olarak, geçici bir şekilde sıfırlanmanın doğru senkronize edilmesi olmadan bir reset kullanıyor.Bu, debug için son derece zor olan hataların kapatılmasına yol açabilir çünkü sıfırlama ve saat kenarları arasındaki kesin zamanlama ilişkisine bağlı olarak.
[FONT:0) Solution:[[Dönetici:0) Her zaman tasarım metodolojinizde standart bir uygulama yapın.
Pitfall 2: Tamamsız Hassasiyet Listeleri
Süreç duyarlılığı listesindeki sıfırlama sinyali, sentezleyici bir yanlış eşleştirme yaratır. Simülasyon, senkronizasyon senkronizasyonu senkronize olarak sıfıra tedavi edecektir (yalnızca saat kenarlarında kontrol edilir), sentez doğru bir şekilde asenkron sıfır uygular.
[FONT:0)Solution:[[Dönetici:0) Her zaman saat ve hassas bir sıfır prosesler için hassas listedeki sıfırlar için sıfır ve sıfırlar. VHDL-2008'in [[DÜye Olmayanlar:0)Eğer aletleriniz bunu desteklerse veya hassas listeleriniz hakkında titiz olun.
Pitfall 3: Mix Stilleri
senkronizasyon senkronizasyonu ve asynchronous reset mantığını birleştirerek veya tasarımın farklı bölgelerinde farklı kutupları kullanarak, karışıklık yaratır ve hataların olasılığını artırır.
[FONT:0) Solution:[Dönetici:[Dönetici: [Dönetici: [Dönetici:0) Tüm projeniz için tutarlı bir sıfır stratejisi oluştur ve belgeleyin. kodlama şablonlarını kullanın ve tutarlılığı uygulamak için yorum yapın.
Pitfall 4: Yetersiz Pulse Genişlik
Sıfır pulu çok kısaysa, bazı yüz-floplar uygun şekilde sıfırlanamaz, özellikle önemli sıfırlama gecikmesi ile büyük tasarımlarda.
[FONT:0)Solution:[[Dönetici:[Dönetici:0) Sıfırlama:[Dönlendirme:[Dönlendirme:[Dönlendirme:)) Sıfırlama için sıfırlanmış tüm geri yüklemeleri garanti etmek için yeterince geniştir.For power-on reset, hold reset for multiple hours döngüleri after hourslar stabilize.
Pitfall 5: Testbenches'te Yeniden Tanımlama
Birçok test, sadece reset dizileri sırasında ortaya çıkan potansiyel sorunları yetersiz test eder.
[FONT:0) Solution:[Dönetici:[Dönetici:) Kapsamlı sıfırlama testi içerir: Operasyon sırasında ilk reset, işlem sırasında sıfırlama, birden fazla sıfırlama döngüsü ve çeşitli saat aşamalarında sıfır.
FPGA-Specific Thinkations
Farklı FPGA satıcılar ve aileler, tasarımcıların anlaması gereken sıfırlama uygulamaları hakkında özel ve önerilere sahiptir.
Xilinx FPGAs
Xilinx FPGAs, yapılandırmadan sonra bilinen bir duruma tüm dönüşleri ayarlayan ilkleme yetenekleri inşa etti.Bu, birçok tasarım için, açık mantık ilkleme için gerekli olmayabilir. ancak, runtime reset yeteneği hala sık gereklidir.
Xilinx genellikle çoğu uygulama için senkronizasyonlu sıfırlar önerir, çünkü FPGA kumaşı ile daha iyi entegre ederler ve diğer amaçlar için kullanılabilir olan özel asynchronous set /reset kaynaklarını tüketmezler.
Intel (Altera) FPGAs
Alternatif cihazlardaki kayıtların aslı bir sıfır portu vardır, bu yüzden onları kullandığı kodu yazmalısınız.The Caveat is that you need to senkroniz the reset operator.e, use the reset senkronize.
Kodunuzu senkronize edilmiş bir sıfır için yazsanız, Quartus, tasarımınızda eşleştirici yolunuzu uygulamak için mantık yaratır.
FPGA Başlangıçlama vs. Runtime reset
FPGA satıcılar, FPGA tasarımları için aminkron sıfırlamaları kullanmayı önermiyor. Bunun yerine, birçok modern FPGA tasarımları cihazın ilk kez güç-on eyalet için inşa edilmiş ve senkronizasyonu çalıştırılabilir gereksinimler için senkronizasyonu kullanıyor.
Bu yaklaşım, sağlam sıfırlama kapasitesini sürdürürken kaynak kullanımını önemli ölçüde azaltabilir. Ancak, kayıtların gerçekten işe zamanında sıfır kapasiteye ihtiyacı olan dikkati gerektirir, ancak bu yalnızca başlangıçlara ihtiyaç duyanlara karşı.
Tasarım Örnekleri ve Vaka Çalışmaları
Tüm tasarım örneklerinin incelenmesi, gerçekçi bağlamda asynchronous reset uygulamasının anlaşılmasına yardımcı olur.
Örnek 1: UART Asynchronous resetr ile Kabul Edildi
UART alıcı, bir iletişim periferinde pratik atekron sıfır kullanımı göstermektedir:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity uart_rx is
generic(
CLKS_PER_BIT : integer := 87 -- For 115200 baud at 10MHz clock
);
port(
clk : in std_logic;
reset : in std_logic;
rx_serial : in std_logic;
rx_data : out std_logic_vector(7 downto 0);
rx_valid : out std_logic
);
end uart_rx;
architecture behavioral of uart_rx is
type state_type is (IDLE, START_BIT, DATA_BITS, STOP_BIT);
signal state : state_type;
signal bit_counter : integer range 0 to 7;
signal clk_counter : integer range 0 to CLKS_PER_BIT-1;
signal rx_data_reg : std_logic_vector(7 downto 0);
begin
process(clk, reset)
begin
if reset = '1' then
state <= IDLE;
bit_counter <= 0;
clk_counter <= 0;
rx_data_reg <= (others => '0');
rx_valid <= '0';
elsif rising_edge(clk) then
rx_valid <= '0'; -- Default, pulse for one cycle
case state is
when IDLE =>
if rx_serial = '0' then -- Start bit detected
state <= START_BIT;
clk_counter <= 0;
end if;
when START_BIT =>
if clk_counter = CLKS_PER_BIT/2 then
if rx_serial = '0' then -- Verify start bit
state <= DATA_BITS;
clk_counter <= 0;
bit_counter <= 0;
else
state <= IDLE; -- False start
end if;
else
clk_counter <= clk_counter + 1;
end if;
when DATA_BITS =>
if clk_counter = CLKS_PER_BIT-1 then
clk_counter <= 0;
rx_data_reg(bit_counter) <= rx_serial;
if bit_counter = 7 then
state <= STOP_BIT;
else
bit_counter <= bit_counter + 1;
end if;
else
clk_counter <= clk_counter + 1;
end if;
when STOP_BIT =>
if clk_counter = CLKS_PER_BIT-1 then
if rx_serial = '1' then -- Valid stop bit
rx_valid <= '1';
rx_data <= rx_data_reg;
end if;
state <= IDLE;
else
clk_counter <= clk_counter + 1;
end if;
end case;
end if;
end process;
end behavioral;
Bu UART alıcı, devlet makinesinin henüz istikrarlı olmasa bile güvenilir bir şekilde başlangıç yapabilmesini sağlamak için bir senkronizasyonu kullanır. Tüm devlet değişkenleri açıkça belirlenmiş değerlere sıfırlanır, öngörülebilir davranışları sıfırdan sonra garanti edilebilir davranışları garanti eder.
Örnek 2: Birden fazla-Clock FIFO, reset Synchronization ile
İki saat FIFO, saat domainleri arasında sıfır senkronizasyonu gösteriyor:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity async_fifo is
generic(
DATA_WIDTH : integer := 8;
ADDR_WIDTH : integer := 4
);
port(
-- Write clock domain
wr_clk : in std_logic;
wr_reset : in std_logic;
wr_en : in std_logic;
wr_data : in std_logic_vector(DATA_WIDTH-1 downto 0);
wr_full : out std_logic;
-- Read clock domain
rd_clk : in std_logic;
rd_reset : in std_logic;
rd_en : in std_logic;
rd_data : out std_logic_vector(DATA_WIDTH-1 downto 0);
rd_empty : out std_logic;
-- Asynchronous reset input
async_reset : in std_logic
);
end async_fifo;
architecture behavioral of async_fifo is
-- Synchronized resets for each domain
signal wr_reset_sync : std_logic;
signal rd_reset_sync : std_logic;
-- FIFO memory and pointers
type memory_type is array (0 to 2**ADDR_WIDTH-1) of
std_logic_vector(DATA_WIDTH-1 downto 0);
signal memory : memory_type;
signal wr_ptr : unsigned(ADDR_WIDTH downto 0);
signal rd_ptr : unsigned(ADDR_WIDTH downto 0);
begin
-- Reset synchronizer for write clock domain
wr_sync: entity work.reset_synchronizer
port map(
clk => wr_clk,
async_reset => async_reset,
sync_reset => wr_reset_sync
);
-- Reset synchronizer for read clock domain
rd_sync: entity work.reset_synchronizer
port map(
clk => rd_clk,
async_reset => async_reset,
sync_reset => rd_reset_sync
);
-- Write process
wr_proc: process(wr_clk, wr_reset_sync)
begin
if wr_reset_sync = '1' then
wr_ptr <= (others => '0');
elsif rising_edge(wr_clk) then
if wr_en = '1' and wr_full = '0' then
memory(to_integer(wr_ptr(ADDR_WIDTH-1 downto 0))) <= wr_data;
wr_ptr <= wr_ptr + 1;
end if;
end if;
end process;
-- Read process
rd_proc: process(rd_clk, rd_reset_sync)
begin
if rd_reset_sync = '1' then
rd_ptr <= (others => '0');
elsif rising_edge(rd_clk) then
if rd_en = '1' and rd_empty = '0' then
rd_data <= memory(to_integer(rd_ptr(ADDR_WIDTH-1 downto 0)));
rd_ptr <= rd_ptr + 1;
end if;
end if;
end process;
-- Status flags (simplified - full implementation needs Gray code)
wr_full <= '1' when (wr_ptr + 1) = rd_ptr else '0';
rd_empty <= '1' when wr_ptr = rd_ptr else '0';
end behavioral;
Bu FIFO her saat domain için uygun bir senkronizasyonu gösteriyor, hem yazı hem de okuma tarafların metastabilite sorunları olmadan temiz bir şekilde sıfırlanmasını sağlayın.
Debugging ve Verification Strategies
Asynchronous reset mantığının etkili bir şekilde silinmesi ve doğrulaması, belirli stratejileri ve araçları gerektirir.
Simülasyon Teknikleri
Tasarımları bir senkronizasyonlu sıfırla basitleştirince, özel dikkat edin:
- [FONT:0)Reset zamanlaması:[Dönetici:[Dönetici:0) Test sıfır iddiayı ve çeşitli noktalarda saat döngüsünde farklı noktalarda yer alan bir test
- [FONT:0) Çok sayıda alan:[Dön 1: 1] Her saat domainin düzgün bir şekilde sıfırlandığını doğrulayın
- [FONT:0)Reset süresi:[[Dönemli:[Dönemli:0)) Sürekli:[Dönemli:[Dönemli:[Dönemli)
- [FONT:0)Post-reset davranışı:[Dönetici:[Dönetici] Tasarımı sıfırlama işlemine uygun olarak çalışır.
Statik Timing Analiz
Zaman zaman analiz araçlarını doğrulamak için kullanın:
- Tüm asynchronous reset yolları için kurtarma ve zaman zamanlaması
- Sıfır deassertion Proper senkronizasyonu
- Büyük tasarımlarda dağıtım gecikmeleri
- Saat-to-reset zamanlama ilişkileri
Donanım Testi
Donanımta test edildiğinde:
- Test gücü-on birden fazla güç döngüsündeki sıfırlama davranışı
- Sıfırlama işlemi farklı işletim frekanslarında çalışır
- Çeşitli sıcaklık ve gerilim koşulları altında sıfırlama testi
- Sık sıfırlama döngüleri ile genişletilmiş stres testleri
- Metastability sorunlarını gösteren herhangi bir geçici başarısızlık için gözlemleyin
Endüstri Standartları ve Kılavuzları
Çeşitli endüstri kaynakları, sıfır uygulama üzerinde ek rehberlik sağlar.TheFLT:0)Sigasi VHDL sıfırlama yönergeleri) FPGA-sp özellikle rehberlik için, satıcınızın tasarım metodoloji kılavuzlarına danışın, bu da cihazın özel tavsiye ve kısıtlamalar sağlar.
Clifford Cummings'in sıfırlama senkronizasyonu üzerindeki kağıtları, hem ASIC hem de FPGA tasarımları için çok sayıda makaleye sahiptir.TheurFLT:0)Embedded.com) web sitesi hem ASIC hem de FPGA tasarımları için gelişmiş sıfır teknikleri hakkında çok sayıda makaleye sahiptir.
Belirli FPGA aileleri ile çalışan kişiler için, satıcı belgeleri temel cihaz özel bilgileri sağlar.ETHFLT:0).Intel'in FPGA belgesi) ve ).AMD Xilinx Belgeleri) ilgili mimarilerine uygun olarak sıfırlanan uygulama yönergeleri içerir.
Özet ve Key Takeaways
VHDL'de bir senkronizasyon mantığı uygulamak, hem FPGA hem de ASIC projelerinde çalışan dijital tasarımcılar için kritik bir beceridir.Birsenkron sıfırlar anında yanıt ve saat bağımlı işlem sağlarken, metastability ve zamanlama sorunları önlemek için dikkatli bir uygulama gerektirir.
Güçlü asenkron sıfır uygulama için temel ilkeler şunlardır:
- Her zaman senkronize etmek çok aşamalı bir senkronize kullanarak
- Her iki saatini ekleyin ve süreç duyarlılığı listesinde sıfırlayın
- Tamamlanan ilklaşmayı sağlamak için bir süreçte yazılan tüm sinyalleri bir işlemde resetleyin
- Sürekli alan başına uygulama, çok saat tasarımlarında senkronizasyonu sıfırlayın
- Tasarım boyunca tutarlı sıfırlama kutupiteyi kullanın
- Kurtarma ve kaldırma analizi için uygun zaman kısıtlamaları uygulayın
- Thoroughly simülasyon ve donanımda sıfırlama işlevlerini test edin
- Belirli uygulamanız için bir senkronizasyon ve senkronizasyon arasındaki ticaret-offları düşünün
Bu en iyi uygulamaları takip ederek ve temel ilkeleri anlamakla, mühendisler öngörülebilir ve mükemmel bir şekilde sıfır koşullardan kurtarılabilir sağlam, güvenilir dijital sistemler oluşturabilirler. Basit bir devlet makinesi veya karmaşık bir çok saat sistemi tasarlayın, uygun sıfır uygulama temelleri güvenilir donanım işlemi için şekillendirebilir.
Antekron ve senkronizasyon arasındaki seçimin belirli gereksinimlerinize, hedef teknolojinize ve tasarım kısıtlamalarınıza bağlı olduğunu unutmayın. Birçok modern FPGA tasarımları, senkronizasyon ile atekron iddianın hibrit yaklaşımı, anında sıfır kapasite ve güvenilir, metastability-free operation için optimal bir denge sağlar.