Bir FPGA tasarımı çoğunlukla (veya tamamen) zaman uyumsuz olabilir mi?


39

Üniversitede (5 yıl önce) çok kısa bir FPGA / Verilog kursumuz vardı ve her zaman her yerde saatler kullanıyorduk.

Şimdi tekrar hobi olarak FPGA'larla başlıyorum ve yardımcı olamıyorum ama bu saatleri merak ediyorum. Kesinlikle gerekliler mi, yoksa FPGA tabanlı bir tasarım tamamen asenkronize olabilir mi? Kişi karmaşık bir mantık demeti oluşturabilir ve içinden olabildiğince hızlı bir şekilde dalga geçebilir mi?

Sinyalin devrenin tüm kısımlarına ne zaman yayıldığını ve çıkışın ne kadar stabilize olduğunu bilmek gibi bununla ilgili çok fazla güç olduğunu fark ediyorum. Meselenin yanında. Tamamen asenkronize bir tasarım yapmak istemem değil, sadece yetenekler konusundaki anlayışımı geliştirmek.

Acemi gözüme göre, kesinlikle bir saat gerektiren tek yapının bir olduğu regve benim anladığım kadarıyla, tipik bir FPGA'nın (örneğin, bir Cyclone II) belirli saat sinyallerine önceden bağlanmış flip-flop'larına sahip olacağı anlaşılıyor. Bu doğru mu? Bunun gibi başka örtülü saatler var mı ve bunlar tasarım tarafından manuel olarak sürülebilir mi?


3
Cambridge Üniversitesi'ndeki Simon Moore'un asenkron tasarım konusunda bir test çipi üretilmesi de dahil olmak üzere birçok araştırma yaptığını biliyorum. Tamamen yeni bir tasarım araçları seti gerektiriyor ve garip yan etkileri var: örneğin, sıcaklıkla ters orantılı yürütme hızı.
pjc50

Yanıtlar:


27

Kısa bir cevap olacaktır: evet; daha uzun bir cevap olurdu: zaman ayırmaya değmez.

Bir FPGA'nın kendisi tamamen asenkronize bir tasarıma sahip değil, problemsiz çalışabilir. Elde ettiğiniz sonuç problemdir, çünkü herhangi bir FPGA ile zamanlama çok öngörülebilir değildir. Daha büyük sorun, zamanlama ve sonuç tasarımınızın neredeyse kesinlikle farklı yer ve rota oturumları arasında değişiklik göstermesidir. Ayrı ayrı asenkron yollara kısıtlamalar koyabilir ve çok uzun sürmeyeceklerinden emin olabilirsiniz, ancak minimum bir gecikme belirtebileceğinizden emin değilim.

Sonunda, tasarımınızın öngörülemeyeceği ve küçük bir tasarım değişikliği olsa bile potansiyel olarak tamamen değişken olacağı anlamına gelir. İşe yarayacağından emin olmak için her şeyi değiştirdiğinizde, zamanlama raporunun tamamını incelemeniz gerekir. Öte yandan, tasarım senkronize ise, sadece yer ve güzergahın sonunda bir paso ya da başarısızlık ararsınız (kısıtlamalarınızın doğru şekilde yapıldığını varsayarsak, ki bu uzun sürmez).

Uygulamada insanlar tamamen senkronize tasarımları hedefler ancak bir sinyali basitçe tamponlamanız veya tersine çevirmeniz gerekirse, doğru şekilde sınırladığınız sürece bir flip flop'tan geçmeniz gerekmez.

Umarım bu biraz temizler.


3
Asenkron FPGA tasarımlı bazı cihazlar kullanmak zorunda kaldım. Çalışmak zordu. Lütfen en azından zamanlama kısıtlamalarını kullanın
Tim Williscroft

1
Bir FPGA ile asenkron tasarımları uygulamak mümkün olsa da, çoğu FPGA özel olarak senkronize tasarımları desteklemek için üretilmiştir. Asenkron bir tasarımla harcanacak çok sayıda kaynağa (PLL, saat dağıtım devreleri ve büyük miktarda flip-flop) sahiptir.
Dmitry Grigoryev

2
Bu cevap özellikle iyi bir öneri sunmuyor. Saatsiz bir FPGA oluşturabilir ve aslında yer ve rotayı basitleştirir, zamanlama gereklilikleriyle ilgili bir ton sorunu ortadan kaldırır ve ince taneli boru hatları nedeniyle ölçülebilir şekilde daha yüksek verim elde edilebilir. Asıl sorun, saatli bir devreyi saatsiz bir FPGA ile eşleştirmeye çalıştığınızda ortaya çıkar çünkü çok farklı zamanlama özelliklerine sahiptirler. Bu yapılabilir, sadece dönüşüm yapmak için biraz daha ön uç işlem gerektirir. vlsi.cornell.edu/~rajit/ps/rc_overview.pdf
Ned Bingham

19

"Karmaşık bir grup mantık inşa edilebiliyor ve olayları olabildiğince hızlı şekilde dalgalanabiliyor mu?" Evet. Tüm CPU'lar tamamen asenkronize olarak üretildi - en az bir tanesi dünyanın en hızlı CPU'su idi. http://en.wikipedia.org/wiki/Asynchronous_circuit#Asynchronous_CPU

Teorik olarak, senkronize tasarım tekniklerine göre birkaç avantajı olmasına rağmen, insanların (burada söyledikleri gibi) asenkron tasarımların mevcut araçlar tarafından iyi desteklenmemesi nedeniyle, asenkron tasarım tekniklerini reddetmeleri beni rahatsız ediyor.

Bana göre bu, tüm köprülerin tahtadan yapılmasını tavsiye etmek gibidir, çünkü daha fazla insanın çelik işleme araçlarından çok ağaç işleme aletleri vardır.

Neyse ki, asenkron tasarımın avantajlarından bazıları, çoğunlukla asenkron tasarım teknikleri kullanılırken, global asenkron lokal senkron (GALS) tasarımı kullanılarak kazanılabilir .


Geçişin faydaları çok daha az önemli olsa da, PCB'leri kare bir ızgarada yönlendirmekle ilgili modern eğilim hakkında tamamen aynı şekilde hissediyorum .
Roman Starkov

@romkyns - Doğrusal olmayan ızgaraları kullanan PCB yazılımı yazmanın zor olduğu gerçeğinden daha fazlası .
Connor Wolf,

1
@supercat: Dört fazlı bir mantığa sadık kaldığınızdan şüpheleniyorum . Unutulmuş görünen çok fazlı saat sinyallerinden biridir .
davidcary

1
@davidcary: Bir tel üzerindeki her iki "faz" hariç, bir faz yükselen kenar tarafından diğeri düşen kenar tarafından kontrol edilir. Temel olarak, mandal saatlerini dört kategoriye ayırırdım: temiz yükselme, temiz düşme, geç yükselme, geç düşme. Temiz bir yükselme veya düşme kenarı (L / CB) tarafından gösterilen mandallar yükselen veya düşen bir kenardan veri alabilir. L / CB geç yükselen bir kenar, L / CB temiz yükselen kenardan herhangi bir düşen kenara veri alabilir. L / CB geç düşen kenar tarafından L / CB temiz düşme veya herhangi bir yükselme verileri alabilir.
supercat

1
@davidcary: Herhangi bir mandal için en hızlı yayılma süresinin en uzun tutma zamanını aşması ve bir saat kenarından saat yolluk mantığı ve bu kenar tarafından tetiklenen "geç" mandallar arasından en uzun sinyal yolunun takip eden kenar, saat kenarları arasındaki minimum süreyi aşmaz, böyle bir tasarımın herhangi bir yayılma gecikmesi kombinasyonu altında tamamen güvenilir ve dahili olarak üretilen metastabilite içermemesi gerektiğini düşünüyorum.
supercat

5

Henüz belirtilmeyen bir faktör, metastabilitedir. Bir mandallama devresine, ortaya çıkan durumun yayılma gecikmelerine veya diğer öngörülemeyen faktörlere bağlı olacağı şekilde bir giriş / geçiş dizisi ile vurulursa, ortaya çıkan durumun temiz bir "yüksek" veya "düşük" olacağının garantisi yoktur. Örneğin, şu anda bir "düşük" çıktısı olan ve girişinin bir saat kenarı geldiğinde aynı anda düşükten yükseğe yükselen kenar tetiklemeli bir flip flop düşünün. Giriş kenarı giriş değişikliğinden önce yeterince uzun olursa, çıkış bir sonraki saat basamağına kadar aşağıya doğru oturur. Giriş kenarı giriş değişikliğinden sonra yeterince uzun olursa, çıkış hızlıca bir kez daha yüksekten düşüğe geçecek ve bir sonraki saatin kenarına kadar kalacaktır. Bu koşullardan hiçbiri geçerli değilse,. Düşük kalabilir veya bir kez hızlıca değişebilir ve yüksek kalabilir, ancak bir süre daha düşük kalabilir ve daha sonra değişebilir veya daha sonra bir süre sonra geri dönebilir veya birkaç kez ileri geri gidebilir.

Bir tasarım tamamen senkronize ise ve tüm girişler çift senkronize ise, bir zamanlama darbesinin bir senkronizörün ilk mandalına ikinci kez karıştırmak için mükemmel zamanda geçiş yapmasına neden olacak şekilde çarpması pek olası değildir. mandal. Genel olarak, böyle şeyleri “sadece olmayacak” olarak kabul etmek güvenlidir. Bununla birlikte, zaman uyumsuz bir tasarımda, bu tür şeyler hakkında düşünmek genellikle daha zordur. Kilitleme devresindeki bir zamanlama kısıtlaması varsa (sadece flip floplar değil, mandal gibi davranacak herhangi bir mantık kombinasyonu) ihlal edilirse, çıktının mandalı zorlayan geçerli bir giriş koşulu olana kadar ne yapacağı belli olmaz bilinen bir duruma. Gecikmeli çıkışların, akış aşağı girişlerin zamanlama kısıtlamalarının ihlal edilmesine neden olacağı ve beklenmeyen durumlara yol açabileceği tamamen mümkündür.

Eşzamansız bir devreyi modellemenin en güvenli yolu, hemen hemen her çıkış devresinin "0" ve "1" arasında değiştiğinde bir süre için "X" çıkışı üretmesini sağlamaktır. Ne yazık ki, bu yaklaşım genellikle gerçekte neredeyse kesinlikle kararlı davranışlarla sonuçlanacak olan durumlarda bile "X" gösteren hemen hemen tüm düğümlerle sonuçlanır. Eğer bir sistem bir giriş değiştikten hemen sonra tüm çıkışların "X" haline geldiği taklit edildiğinde çalışabilir ve girişler sabit olana kadar "X" kalabilirse, bu, devrenin çalışacağının iyi bir işaretidir, ancak asenkron devrelerin bu sınırlar altında çalışmasını sağlar. genellikle zordur.


4

Tabii ki, tasarım gereksinimleriniz birçok iç gecikmenin önemsediğiniz sürelerden daha uzun sürdüğü kadar yavaşsa, o zaman sorun olmaz ve buna göz atmak için zamanlama raporuna bakabilirsiniz, ancak Dahili durum bilgisi olmadan faydalı bir şekilde yapabilecekleriniz için bir sınır vardır. Sadece 100 giriş çoklayıcı gibi bir şey yapmak istiyorsanız, o zaman sorun değil, her girişin farklı bir yayılma gecikmesi olacağını unutmayın. Aslında, çok sayıda tahmin edilemeyen gecikmeli salınımlı geri besleme döngüleri ile bazı ilginç ve kaotik etkiler elde edebilirsiniz - belki de tamamen asenkron bir FPGA bazlı sentezleyici, bir sonraki 'analog' olabilir.


4

Evet yapabilirsin. Flipflops'u tamamen görmezden gelebilir ve hepsini LUT'lardan çıkarabilirsiniz. Ve / veya çoğu Xilinx FPGA'nın durum öğelerini (kenar tetiklemeli) flipfloplar yerine (seviye tetiklemeli) mandallar olarak kullanabilirsiniz.


3
Bunun bir tehlikesi, mantık derleyicisini kısıtlamadığı sürece, bazı kapılar için negatif yayılma süresi olan bir mantık üretmesidir . Örneğin, eğer biri belirtir X=(someComplexFormula)ve Y=X & Dderleyici X için bu formülü kullanırsa ve buna X & Deşdeğerini belirlerse A & D, derleyici Y'nin X yerine A ve D cinsinden yerine geçebilir, böylece Y'nin hesaplanmasına izin verir. X'inkinden daha hızlı ilerlemek için. Bu sübstitüsyonlar birleşimsel mantıkla geçerlidir ancak asenkron ardışık mantığa zarar vermektedir.
supercat

@supercat - Xilinx'in araçlarıyla hiç çalışmamıştım, ancak Altera FPGA'larla çalıştığımda, her zaman bu tür optimizasyonların yapıldığı noktada RTL yerine bağlı geçit modülleri gibi kritik yolları belirleme seçeneğiniz oldu. özürlü.
Jules

@Jules: Programlanabilir mantık tasarımlarımın tümü, biraz saçma bir dil olan Abel'ı kullandı, ancak bazı CPLD'lerin uygulayabileceği, ancak bir VHDL veya Verilog sentez aracı için zor olabilecek bazı şeyleri belirlemeyi mümkün kıldı. Örneğin, projelerimden birinde, Xilinx parçalarının zaman uyumsuz bir kaydırma kaydının uygulanması için saat, zaman uyumsuz ayar ve zaman uyumsuz sıfırlama özelliklerinden yararlandım. Bir FPGA'da böyle şeyler yapmam gerekirse, Verilog veya VHDL'yi hiç kullanmadım, bunun için neyin gerekli olduğunu nasıl öğrenmeliyim? BTW, bellek
işe yararsa

... zamanlama, zaman uyumsuz yazma işleminin yalnızca T girişinin düşük olduğu zamanlarda gerçekleşebileceğini düşünerek, eğer bir noop-clock bir yazma darbesinin başlangıcına yakın bir yerde gerçekleşirse, zaman uyumsuz yazma işleminin yeteri kadar ötesine uzanacağını varsayar. Kararlı bir değer sağlamak için ve eğer no-clock sonun yakınına geldiyse, sadece sabit bir değerde kalıyor olacaktır. VHDL veya Verilog'da bu gibi davaların nasıl verimli bir şekilde ele alınacağından emin değilim.
supercat,

@supercat - benzer bir problemi çözerek, Cyclone IV Cihaz El Kitabına bakarken, aynı probleme en iyi yaklaşımın "LAB çapında senkron yükü" seçeneğini ("LAB", 16 mantık elemanlarından oluşan bir grup) kullanmak olduğunu gördüm. , eğer böylesi bir yazıcının büyüklüğü 16 bitin bir katına kadar çıkmazsa, o zaman bazı bitler boşa gidecektir, ancak bu yine de en kullanışlı seçenek gibi görünmektedir). Şimdi iki seçenek vardır: Ben ... Ben sıkı zamanlama varsa, (genellikle en iyi seçenek olacaktır) gerekli kayıt uygulanmasına yönelik bir yol almaya sentez araç gerektiren veya olacak fonksiyonel Verilog yazabilir
Jules

3

@Andrey'in belirttiği gibi, zaman ayırmaya değmez. Özellikle araçlar bunu yapmaz, bu yüzden tamamen kendi başınıza olacaksınız. Ayrıca, yerleşik kayıtlara sahip olduklarından, kullanmayarak hiçbir şeyi kurtarmazsınız.


3

Gerçekten üç çeşit tasarım var.

  1. Kombinatoryal. Saat ve geri besleme yolu yok ve sistemin "belleği" yok. Bir veya daha fazla giriş değiştiğinde değişiklikler mantık olsa dalgalanıyor. Bir süre sonra çıkış, girişler tekrar değişinceye kadar kaldığı yeni bir duruma geçer.
  2. Senkron sıralı. Bir sistem birleşik mantık kütüklerinden ve bloklarından oluşur, kütükler az sayıda (genellikle 1) saat ile saatlenir. Birden fazla saat varsa, bir saat alanından diğerine geçen sinyaller için özel önlemler gerekebilir.
  3. Asenkron sıralı. Geçmiş olayların tasarım hafızasını veren ve kolayca analiz edilen saat satırları tarafından saatlenmeyen geri besleme yolları, mandallar, kayıtlar veya diğer elemanlar vardır.

Genel olarak, kombinatoryal mantığı sentezlerken / optimize ederken, araçlar tüm önemli olanın nihai sonucun ne olduğunu ve bu sonuca karar vermek için gereken maksimum zaman olduğunu varsayar.

Tamamen birleştirici olan ve doğru sonuca ulaşacak bir tasarım yapabilirsiniz. Çıktılar herhangi bir sırayla değişebilir ve nihai değerlerine ulaşmadan önce birkaç kez değişebilir. Bu tür tasarımlar çok mantıklı kaynaklardır. Çoğu mantık elemanı zamanlarının çoğunu boşta geçirir, oysa sıralı bir sistemde bu elemanları çoklu veri öğelerini işlemek için tekrar kullanabilirsiniz.

Sıralı bir senkronize sistemde tek önemli olan, kombinatoryal bloğun çıkışlarının bir sonraki flip flop içine saatlendiğinde doğru durumlarına oturmuş olmasıdır. Hangi düzende değiştikleri ya da yoldaki aksaklıklar olup olmadıkları önemli değildir. Yine araçlar kolayca saatin yeterince yavaş olması ve doğru cevabı vermesi koşuluyla bunu mantığa çevirebilirler (ve kullanmak istediğiniz saatin yeterince yavaş olup olmadığını söyleyebilirler).

Eşzamansız bir sıralı sistemde, bu varsayımlar pencereden dışarı çıkar. Hatalar önemli olabilir, çıkış değişikliklerinin sırası önemli olabilir. Hem araçlar hem de FPGA'ların kendisi senkron tasarımlar için tasarlanmıştır. Standart FPGA'larda veya belirli tasarımlı sistemlerde, asenkron sistemlerin uygulama olasılıkları hakkında çok fazla tartışma yapıldı (google asynchrous FPGA tasarımı) ancak yine de genel kabul görmüş tasarım uygulamalarının dışında kalıyor


2

Evet. Süreç tipi yapınız yoksa, çıkarım kaydına girmek gibi şeyler yapmamalıdır. Gerçekten de istersen bunları zaman uyumsuz bir şekilde üretebilseniz de, saatler gerektiren tümleşik bellek gibi şeyler olacaktır.


1
Bunu tek bir cevap yapmak mı istediniz?
Kevin Vermeer

1

FWIW Asenkron mantık çözümlerinde bariz bir hedefin güç tüketimindeki küresel azalma olacağını eklemem gerektiğini düşündüm.

Bu küresel saat / PLL / tamponlar çok fazla Joule yakıyor.

FPGA çözümleri, bataryayla güçlendirilmiş arenalara mesela (örneğin, Lattice Icestick), bu yüzden çok daha fazla dikkat çekecek.


Bu iyi bir noktadır, ancak sıralı bir devre ile aynı işlemi yapan kötü tasarlanmış bir birleştirme devresinin bazı durumlarda kısmi sonuçlar hesaplanırken ve nihai çıktı bunları hesaba katacak şekilde güncellenirken, çok sayıda geçici geçiş yapabilir. ve CMOS devrelerinde (çoğu FPGA olduğu gibi) güç tüketimi, geçişlerin sayısı ile kabaca orantılıdır. Saatler gereksiz geçişlere neden olabilir, ancak şu anda gerekmeyen devrelerin bölümlerindeki saatleri devre dışı bırakarak da çok fazla güç azalması yapabilirsiniz.
Jules
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.