Bloga dön
Yıllık 700 Kazanan FPGA Mühendisleri için Yüksek Ödemeli İpuçları
FPGA PCB–FPGA mühendisleri
Yüksek maaş kazanmak isteyen FPGA mühendisleri için dikkate alınması gereken birkaç temel strateji vardır. Her şeyden önce, FPGA tasarım ve geliştirme becerilerinizi geliştirmek çok önemlidir. Verilog ve VHDL gibi dillerde uzman olmanın yanı sıra FPGA geliştirme araçları ve platformlarında uzmanlaşmak sizi bu alanda değerli bir varlık haline getirecektir.
Üniversite yıllarımda FPGA ile ilk tanışmamın üzerinden on yıldan fazla zaman geçti. Dijital kronometreler, sınav zilleri, şifreli kilitler gibi deneyleri EDA platformunda ilk kez tamamlamanın heyecanını hala hatırlıyorum. O zamanlar henüz HDL donanım tanımlama dillerine maruz kalmamıştım, bu nedenle tasarımlar MAX+plus II şematik ortamındaki 74 serisi mantık cihazları kullanılarak oluşturuldu. Daha sonra lisansüstü çalışmalarım ve sonraki çalışmalarım sırasında Quartus II, Foundation, ISE ve Libero'yu kullandım, ayrıca Verilog HDL dilini de öğrendim. Bu öğrenme süreci sayesinde Verilog'un zekasını yavaş yavaş takdir etmeye başladım. Küçük bir kod parçasının karmaşık şematik tasarımları tamamlayabildiğini ve dilin taşınabilirliği ve çalışabilirliğinin şematik tasarımlardan çok daha güçlü olduğunu fark ettim.
FPGA Mantık Tasarımında Standartların Önemi
Sektörde çalışmış arkadaşlar, şirketlerin özellikle büyük tasarımlarda (yazılım ya da donanım) standartlara önem verdiğini biliyor. Standartlara uymadan başarıya ulaşmak neredeyse imkansızdır. Mantık tasarımı da bir istisna değildir: Eğer standartlara uymazsanız, bir ay sonra hata ayıklarken hatalarla karşılaşabilirsiniz. Yazdığınız koda dönüp baktığınızda, bırakın hata kontrolünü, birçok sinyal fonksiyonunu unutmuş olabilirsiniz. Birisi bir projenin yarısında ayrılırsa, halefi muhtemelen tasarıma sıfırdan başlamak zorunda kalacaktır. Orijinal sürüme yeni özellikler eklemeniz gerekiyorsa, büyük olasılıkla baştan başlamak zorunda kalacaksınız ve bu da tasarımın yeniden kullanılabilirliğini sağlamayı zorlaştıracaktır.
Mantık açısından aşağıdaki standartların önemli olduğunu düşünüyorum:
- Tasarım Dokümantasyonu: Tasarım fikirleri, ayrıntılı uygulamalar vb. belgelere yazılmalıdır ve ancak sıkı bir inceleme ve onay sonrasında işin bir sonraki aşamasına geçilebilir. Bu yaklaşım projeyi kontrol edilebilir ve ulaşılabilir bir durumda tutabilir.
- Kod Standardizasyonu: Sinyal adlandırmasını standartlaştırın, sinyal adları için küçük harf ve parametreler için büyük harf kullanın, düşük seviyeli etkin sinyalleri şununla işaretleyin:
_nsonunda (örneğin,rst_n) ve simülasyon doğrulamasında daha kolay hata tespiti için bağlantı noktası sinyallerini hat başına bir sinyal olacak şekilde düzenleyin. - Saat Etki Alanı Yönetimi: Her modül için yalnızca bir saat kullanın ve sentezleyicinin daha optimal bir sonucu sentezlemesine olanak sağlamak amacıyla birden fazla saat alanı içeren tasarımlarda saat alanı izolasyonu için özel bir modül kullanın.
- Mandallar için Kombinatoryal Mantıktan Kaçının: FPGA tasarımlarında mandal oluşturmak için saf kombinatoryal mantığın kullanılması yasaktır. Yapılandırma kayıtları gibi D flip-floplu mandallara izin verilir.
- Sinyal Senkronizasyonu: Genel olarak FPGA'ye giren sinyallerin sistemin çalışma frekansını arttırmak için öncelikle senkronize edilmesi gerekir.
- Tüm Çıkışları Kaydet: Çalışma frekansını artırmak ve tasarımda zamanlama yakınsamasını sağlamak için tüm modül çıkışları kaydedilmelidir.
- Geçitli Saatlerden Kaçının: Düşük güçlü bir tasarım olmadığı sürece geçitli saatler kullanmayın, çünkü bu tasarımın kararsızlığını artıracaktır.
- Saat Etkinleştirme Sinyalleri: Sayaçlara bölünen sinyallerin diğer modüllerde saat olarak kullanılması yasaktır. Bunun yerine saat etkinleştirme sinyallerini kullanın.
Yüksek Performans için Zamanlama Tasarımı
Patronumun Huawei ve Junlong'da çalışan bir geçmişi var, dolayısıyla doğal olarak bize Huawei ve Altera'daki bazı mantık tasarımı uygulamalarından bahsetti. Proje standartlarımız temel olarak Huawei uygulamalarına dayanmaktadır. Geçtiğimiz birkaç aydaki çalışmalarımda üzerimde en derin izlenimi Huawei'deki şu söz oldu: zamanlama tasarlanmıştır, simüle edilmez veya uydurulmaz. Şirketimizde her proje sıkı bir incelemeden geçmektedir. Ancak inceleme geçildikten sonra işin bir sonraki adımı gerçekleştirilebilir. Mantık tasarımını örnek alırsak hemen kod yazmaya başlamak yerine öncelikle genel tasarım planını ve detaylı mantık tasarım planını yazmamız gerekiyor. Bu planlar incelenip uygulanabilir görüldükten sonra kodlamaya başlanabilir. Genel olarak konuşursak, bu görevlere harcanan zaman, kodlamaya harcanan zamandan çok daha fazladır.
Genel plan esas olarak modül bölünmesini, arayüz sinyallerini ve birinci seviye ve ikinci seviye modüllerin zamanlamasını ve tasarımın gelecekte nasıl test edileceğini içerir. Bu plan seviyesinde zamanlamanın birinci seviye modüle (ve son olarak ikinci seviye modüle) yakınlaşmasını sağlamak önemlidir. Bu ne anlama gelir? Detaylı tasarım yaptığımızda mutlaka bazı sinyallerin zamanlamasında da ayarlamalar yapacağız. Ancak bu zamanlama ayarlamaları tasarımın tamamını değil, en fazla birinci düzey modülü etkileyebilir. Okuldayken zamanlama tasarımını anlamadığım için sık sık diğer modül sinyallerinin zamanlamasını ayarlamak zorunda kaldığımı hatırlıyorum çünkü bir sinyalin zamanlaması karşılanmıyordu ki bu çok sinir bozucuydu.
Ayrıntılı mantık tasarım planında, her seviyedeki modüllerin arayüz zamanlamasını zaten tasarladık ve her bir modül seviyesinin nasıl uygulandığı temel olarak belirlendi. Bunu başardığımız için kodlama doğal olarak daha hızlı hale geliyor. En önemlisi, bu yaklaşım tasarımı kontrol edilebilir bir durumda tutabilir ve hatalar nedeniyle tüm tasarıma tek bir yerden başlama ihtiyacını önleyebilir.
Bir devrenin çalışma frekansını etkileyen faktörler nelerdir?
Devrenin çalışma frekansı esas olarak yazmaçlar arasındaki sinyal yayılma gecikmesi ve saat çarpıklığı ile ilgilidir. FPGA'deki saat uzun çizgiler boyunca çalışıyorsa saat sapması çok küçüktür ve göz ardı edilebilir. Burada basitlik açısından yalnızca sinyal yayılma gecikmesini etkileyen faktörler dikkate alınır. Sinyal yayılma gecikmesi, yazmacın açılma ve kapanma gecikmesini, yönlendirme gecikmesini ve kombinatoryal mantık yoluyla gecikmeyi içerir. Devrenin çalışma frekansını arttırmak için bu üç gecikme üzerinde çalışmalı ve bunları mümkün olduğu kadar küçük yapmalıyız.
- Yönlendirmeyi Değiştirerek Gecikmeyi Azaltın: Saatler ve kontrol sinyalleri gibi bazı önemli sinyallerin geçişlerini sağlamak için yönlendirmelerini belirtin. FPGA mümkün olduğunca az. Bu, yönlendirme gecikmesini etkili bir şekilde azaltabilir.
- Kombinatoryal Mantık Sayısını Azaltın: Mantık kapıları yerine mümkün olduğunca arama tablolarını (LUT) kullanın. Ek olarak, bazı insanlar kapı sayısını azaltmak için basamaklı kayıtlar kullanır, ancak en iyi yol, kapı sayısını azaltmak için boru hattı kullanmaktır.
Genel olarak, kapı sayısını azaltmak ve yönlendirmeyi değiştirmek, devrenin çalışma frekansını artırmanın etkili yollarıdır. Gerçek tasarımda, genellikle ikisinin bir kombinasyonu kullanılır. Ancak bu mutlak bir kural değildir. Bazı durumlarda, yönlendirmeyi değiştirmek gecikmeyi azaltmayabilir ve en etkili yol kapı sayısını azaltmaktır.
Mantık Tasarımının Zorlukları: Sistem Mimarisi ve Simülasyon Doğrulaması
Şirkete ilk katıldığımda patronum bana mantık tasarımının zorluğunun RTL düzeyinde kod tasarımında değil, sistem mimarisi tasarımında ve simülasyon doğrulamasında yattığını söyledi. Şu anda Çin'de sentezlenebilir tasarımlara daha fazla vurgu yapılıyor ancak sistem mimarisi tasarımı ve simülasyon doğrulaması hakkında çok fazla bilgi yok gibi görünüyor; bu da Çin'deki nispeten düşük tasarım seviyesini yansıtıyor olabilir.
Okuldayken, her zaman RTL düzeyindeki kod iyi uygulandığı sürece simülasyon doğrulamasının sadece bir formalite olduğunu düşünürdüm, bu yüzden HDL davranış tanımının sözdizimini küçümseyerek göz ardı ettim ve test tezgahları hakkında bilgi edinme konusunda isteksizdim; dalga formlarının çizilmesi kolaydı; Sistem mimarisi tasarımı hakkında hiçbir şey bilmiyordum. Şirkette bazı şeylerle karşılaşana kadar durumun tamamen farklı olduğunu fark edemedim.
Aslında yabancı ülkelerde simülasyon doğrulaması için harcanan zaman ve insan gücü muhtemelen RTL düzeyindeki kod için harcanan zamanın iki katıdır. Artık simülasyon doğrulaması, milyon geçitli çiplerin tasarlanması için kritik yoldur.
Simülasyon Doğrulaması: Modelleme ve Otomasyon
Simülasyon doğrulamasının zorluğu temel olarak tasarımın doğruluğunu tam ve doğru bir şekilde doğrulamak için (esas olarak kod kapsamını artırmak için) nasıl modelleneceğinde yatmaktadır. Bu süreçte doğrulama hızı da önemlidir.
Doğrulama, basit bir ifadeyle, uyarıcı kaynaklarının yeterli kapsamının nasıl oluşturulacağı ve ardından hataların nasıl tespit edileceğidir. Şahsen ben simülasyon doğrulamasında en temel şeyin doğrulama otomasyonunu başarmak olduğunu düşünüyorum. Bu yüzden testbençler yazmamız gerekiyor. Mevcut tasarımlarımdan birinde, her simülasyon çalışması yaklaşık bir saat sürüyor (ki bu aslında küçük bir tasarım). Dalga formlarının çizimi doğrulama otomasyonunu sağlayamayacağından, dalga formlarını çizerek simülasyon yaparsak, ilk olarak dalga formu ölüme çekilecektir (özellikle karmaşık algoritmalara ve girdi istatistiksel dağılımına sahip tasarımlar için), ikincisi, dalga formuna bakmak ölümcül olacaktır ve üçüncüsü, dalga formuna bakmak ölümcül olacaktır ve üçüncüsü, hata tespit oranı neredeyse sıfırdır. Peki otomasyona nasıl ulaşılır? Seviyem hala çok kısıtlı olduğundan BFM'den (bus function model) ancak kısaca bahsedebilirim.
Bir MAC çekirdeği oluşturma örneğini ele alırsak (arka panel PCI veriyoludur), bir MAC_BFM, PCI_BFM ve PCI_BM'ye (PCI davranış modeli) ihtiyacımız var. MAC_BFM'nin ana işlevi, rastgele uzunluklara ve çerçeve başlıklarına sahip Ethernet çerçeveleri (uyaran kaynakları) oluşturmaktır ve içerik de rastgeledir. Gönderirken aynı zamanda PCI_BM'ye de kopyalar; PCI_BFM'nin işlevi, PCI veri yolunun davranışını simüle etmektir; örneğin, test edilen cihaz doğru bir çerçeve aldığında, PCI veri yoluna bir istek gönderecek ve PCI_BFM buna yanıt verecek ve verileri içeri getirecektir; PCI_BM'nin ana işlevi, MAC_BFM'nin gönderdiğini PCI_BFM'nin aldığıyla karşılaştırmaktır. MAC_BFM gönderme bilgisine ve PCI_BFM alma bilgisine sahip olduğundan, tasarım makul olduğu sürece, test edilen cihazın normal çalışıp çalışmadığını her zaman otomatik ve tam olarak test edebilir, böylece otomatik algılamayı gerçekleştirebilir.
Huawei'nin Çin'deki simülasyon doğrulamasında nispeten iyi bir performans sergilediği tahmin ediliyor. Nispeten iyi bir doğrulama platformu kurmuşlar ve iletişimle ilgili BFM'lerin çoğu iyi yapılıyor. Arkadaşımdan, artık yalnızca cihazı test platformunda teste tabi tutmaları ve test edilen cihazın düzgün çalışıp çalışmadığını otomatik olarak tespit edecek şekilde parametreleri yapılandırmaları gerektiğini duydum.
Dil Konuları
HDL dilleri ile ilgili olarak, Çin'deki birçok kişi VHDL ve Verilog arasında hangisinin daha iyi olduğunu tartışıyor. Aslında ben şahsen bunun çok da anlamlı olmadığını düşünüyorum. Dışarıdaki çoğu büyük şirket temel olarak Verilog'u RTL düzeyinde kod için kullanıyor, bu yüzden yine de herkese mümkün olduğunca Verilog'u öğrenmesini öneriyorum. Simülasyon açısından VHDL, davranışsal modellemede Verilog'a göre daha zayıf olduğundan VHDL ile yapılan simülasyon modeli sayısı oldukça azdır. Elbette Verilog da mükemmel değil. Aslında Verilog'un karmaşık davranışsal modelleme konusundaki yeteneği de sınırlıdır. Örneğin henüz dizileri desteklemiyor. Bazı karmaşık algoritma tasarımlarında, davranış modellerini açıklamak amacıyla soyutlama yapmak için üst düzey dillere ihtiyaç vardır. Yabancı ülkelerde birçok simülasyon modeli SystemC ve E dili kullanılarak yapılmakta olup, Verilog kullanmak çağdışı kabul edilmektedir. Huawei'nin Çin'deki doğrulama platformu SystemC ile yazılmış gibi görünüyor.
Gelecek perspektifleri
Sistem mimarisi tasarımı açısından üzerinde çalıştığım tasarım yeterince büyük olmadığından henüz fazla tecrübem yok. Bilgisayar sistemi mimarisi hakkında biraz bilgi sahibi olmam gerektiğini hissediyorum. Bölmenin temel temeli işlevselliktir ve bunu uygun veri yolu yapısı, depolama yapısı ve işlemci mimarisinin seçilmesi takip eder. Sistem mimarisinin bölünmesi, her işlevsel modülün net ve uygulanması kolay olmasını sağlamalıdır. Bir süre sonra bu kısımda biraz tecrübe kazandıktan sonra bazı içgörülerimi paylaşacağımı düşünüyorum, o yüzden şimdilik sizi yanıltmayayım.
Kişisel Bilgiler
Son olarak kısaca özetleyeyim. Her şey daha fazla uygulamaya, daha fazla düşünmeye ve daha fazla sorgulamaya bağlıdır. Pratik yapmak mükemmelleştirir. Başkalarının çözümlerini yüzlerce kez okumaktansa kendiniz pratik yapmak daha iyidir. Uygulama yapma motivasyonu kısmen ilgiden, kısmen de baskıdan gelir. Şahsen ikincisinin daha önemli olduğunu düşünüyorum. Gereksinimlere sahip olmak kolayca baskı yaratacaktır; yani, çalışmak için çalışmak yerine gerçek proje geliştirmede pratik yapmak en iyisidir.
Uygulama sürecinde daha çok düşünmeli ve sorunların nedenlerini düşünmelisiniz. Sorunları çözdükten sonra birkaç kez daha nedenini sorun. Bu aynı zamanda deneyim biriktirme sürecidir. Proje günlükleri yazma alışkanlığınız varsa bu daha da iyidir. İçinde yaşanan sorunları, nedenlerini, çözümlerini ve çözülen yöntemleri yazın. Son olarak daha fazla soru sorun. Bir sorunu düşündükten sonra çözemezseniz sorun. Sonuçta bireysel yetenekler sınırlıdır. Sınıf arkadaşlarınıza, meslektaşlarınıza, arama motorlarına ve netizenlere sorun. Bir makale veya arkadaşlarınızın rehberliği sorunları hızlı bir şekilde çözmenize yardımcı olabilir.
Sonuç
Fonksiyonel simülasyondan sonra, FPGA'de tasarım yaptığımız için, RTL düzeyindeki kodun, tasarım sırasında sentez sonucu ve fonksiyonel simülasyon sonucu ile tutarlı olması temel olarak garanti edilir. Sentez düzeninden sonraki statik zamanlama raporu, zamanlama kısıtlamalarının ihlaline karşı uyarılmadığı sürece, kartta hata ayıklamaya devam edebiliriz. Aslında Huawei ve ZTE, FPGA tasarlarken zamanlama simülasyonu da yapmıyorlar çünkü zamanlama simülasyonu çok zaman alıyor ve etkisi statik zamanlama analiz raporuna bakmaktan daha iyi olmayabilir.
Elbette ASIC tasarımı ise simülasyon doğrulamanın iş yükü daha fazladır. Çoklu saat etki alanı tasarımı söz konusu olduğunda, genellikle post-simülasyon yapılır. Ancak post-simülasyon yapılmadan önce genellikle resmi doğrulama araçları kullanılır ve tasarım gereksinimlerinin ihlal edilip edilmediğini kontrol etmek için statik zamanlama analizi raporu kullanılır. Bunu yaptıktan sonra simülasyon sonrası iş yükü çok daha az olabilir.
Bu gereklilik tedarik veya üretim sürecini etkiliyorsa, son dosyaları incelemeye göndermeden önce elektronik bileşen tedariği ve yüzey kalitesi karşılaştırmasıyla değerlendirin .
Önerilen Mesajlar
PCB Akım Hesaplayıcı: IPC-2221 Formülü ile İz Genişliği ve Via Boyutlandırma
Şekil 1. PCB Akım Hesaplayıcı referans görüntüsü (PCB için)...
Mikrofon Devre Kartı Tasarımı: Devre Kartının Kendisi Ses Kalitenizi Nasıl Şekillendiriyor?
Şekil 1. Mikrofon PCB referans görüntüsü...
Karttan Karta Bağlantı Konnektörü: Türleri, Özellikleri ve Nasıl Seçileceği
Şekil 1. PCB için Karttan Karta Bağlantı Referans Görüntüsü...
PCB İz Genişliği Hesaplayıcı: Akım, Gerilim Düşümü ve Empedans İçin İzlerin Boyutlandırılması
Şekil 1. Bir PCB iz genişliği hesaplayıcısı başlangıç noktasıdır...
