FPGA programlama, nereden başlamalı


29

Yazılım geliştiricisiyim (C, C ++, objektif-c, java ...) ve FPGA programlamayı öğrenmekle ilgileniyorum. Şimdi soru size basit görünebilir ama şu anda biraz sıkışıp kaldığım için bana yardım etmek için zaman ayırın. Şirketim benden teknolojiyi tanımamı ve bir kafes ürünü üzerinde çalışmamı istedi. Benim sorum nerede başlamalı? Bazı araştırmalardan sonra VHDL ve Verilog arasında seçim yapabileceğimi öğrendim, hiçbirini kullanmadım. Nereden başlamalıyım diye önerebilecek herhangi bir uzman var mı? Bir dil öğrenin, donanım bileşenleri hakkında bilgi edinin ve ardından kafes ürün hakkında bilgi edinin. Ya da doğrudan Lattice ürünü ile başlayın (programlama yöntemlerinin FPGA satıcıları arasında çok farklı olduğunu okuduğum gibi)?


3
C / C ++ programlama bilginiz varsa , VHDL yerine Verilog'u seçmelisiniz . Verilog adlı kullanıcının sözdizimi C ile benzer
m.Alin

1
@ m.Alin Ben daha yeni başlıyorum ve öğrendim ki, C gibi görünüyorsa önemli değil, çünkü en zor bölümün sözdizimi değil, kavramlardaki fark olduğunu gördüm. Anlambilimi bile C'ye yakın değil
Edgar Klerks

C / C ++ / Java / etc içinden bulduğum en büyük değişiklik. Yazdığınız modüller (tercüme birimlerine eşdeğer sanırım) tamamen olaya yöneliktir. Temel bir prensiple basitleştirilmiş olan C'de, derlenmiş bir program kodunuzun 1. satırını, ardından satır 2'yi, sonra 3'ü, sonra 4'ü, vb .'yi gerçekleştirecektir. : bu giriş pimi, module1_input'a bağlanır, module1_output, module1_input her yükseldiğinde duruma geçer. Yerine if(condition)öyle when(condition). Çoğu FPGA IDE'si, sanki kağıt üzerine çiziyormuşsunuz gibi bir grafik tasarım girdisine bile sahiptir.
CharlieHanson

Yanıtlar:


40

Dijital tasarımın yazılım geliştirme ile pek bir ortak yönü yoktur (belki de Verilog sözdiziminin C diline biraz benzemesi ancak sadece görünmesi dışında). Dolayısıyla, bu tür bir soruyu yeterince cevaplamak çok zordur. Ancak, yazılım geliştirmeden donanım tasarımına giden bir yolda yürüyen bir adam olarak, ona bir şans vereceğim. Kendime bakarsak, işte şimdi nasıl bildiğimi bilsem, kendime nasıl tavsiyede bulunacağımı:

Sıfırdan başlamak

Yazılım geliştirme ile ilgili her şeyi unutun. Özellikle programlama dilleri. Bu ilkeler dijital tasarımda geçerli değildir. Bir cihaza montajcı veya hatta C programlamak için bir işlemci tasarlayan biri için kolay olurdu, ancak bir montajcı programcı bir CPU tasarlayamaz.

Öğrenme yolunuzda, mevcut yazılım bilginizle kolay olan bir sorunu çözme eğiliminde değilsiniz. Klasik örneklerden biri "döngü için" dir. Bir for döngüsü yazabilseniz bile, verilog, yani farklı amaçlara hizmet eder. Temel olarak kod üretimi için kullanılır. Yazılım geliştiricilerinin gördüğü gibi bir for döngüsü de olabilir, fakat simülasyon dışında hiçbir şey için iyi olmayacaktır (yani FPGA'yı bu şekilde programlayamazsınız).

Bu yüzden üstesinden gelmek istediğiniz her görev için nasıl yapılacağını bildiğinizi sanmayın, bunun yerine bir araştırma yapın - kitapları, örnekleri kontrol edin, daha deneyimli insanlara sorun.

Donanım ve HDL dilini öğrenin

En popüler HDL dilleri Verilog ve VHDL'dir. AHDL (Altera HDL) gibi üreticiye özel olanlar da vardır. Bu diller donanım bileşenlerini tanımlamak için kullanıldığından, hepsi aynı şeyi benzer bir şekilde ifade etmekte, ancak farklı bir sözdiziminde kullanılmaktadır.

Bazı insanlar Verilog'u öğrenmeyi tavsiye ediyorlar çünkü C'ye benziyorlar. Evet, söz dizimi bir C ve Ada karışımıdır, ancak bir yazılım geliştiricinin yaslanmasını kolaylaştırmaz. Aslında, bunun daha da kötüleşebileceğini düşünüyorum çünkü Verilog'da C yazmak için bir cazibe olacaktır. Çok kötü zaman geçirmenin güzel bir tarifi.

Bunu akılda tutarak, VHDL'den bakmayı tavsiye ederim. Her ne kadar Verilog, yukarıdakiler göz önüne alındığı sürece tamamdır.

Akılda tutulması gereken önemli bir şey, o dilde ne ifade ettiğinizi anlamanız gerektiğidir. Ne tür bir donanım tanımlanıyor ve nasıl çalışıyor?

Bu nedenle, genel olarak elektronik üzerine bir kitap ve bunun gibi iyi bir kitap edinmenizi tavsiye ederim - HDL Chip Design (mavi kitap gibi).

Bir simülatör al

Donanımda herhangi bir şey yapmaya başlamadan ve Satıcıya özgü özellikleri kullanmadan önce, kendinize bir simülatör edinin. Bir Verilog ile başlıyordum ve GTK Wave ile birlikte Icarus Verilog kullandım. Bunlar ücretsiz açık kaynaklı projeler. Kitaplarda gördüğünüz örnekleri çalıştırın, zevk almak için kendi devrelerinizi tasarlayarak pratik yapın.

Bir geliştirme kurulu edinin

İlerlemek istediğinizde bir geliştirme kurulu edinin. İşvereninizin Kafes ile gitmek istediğini biliyorsanız, Kafes tahtası edinin.

Programlama yöntemleri çok benzer, ancak farklı olan detaylar var. Örneğin, farklı araçlar, farklı seçenekler, farklı arayüzler. Genellikle, bir satıcıyla deneyiminiz varsa, geçiş yapmak zor değildir. Ama muhtemelen bu ekstra öğrenme eğrisinden kaçınmak istersiniz.

Tahtanın, kullanmayı planladığınız veya genişletilebilir bileşenlerle geldiğinden de emin olurdum. Örneğin, bir yönlendirici gibi bir ağ cihazı tasarlamak istiyorsanız, kartın Ethernet PHY'sine sahip olduğundan emin olun veya HSMC konektörü vb.

Kurullar genellikle iyi bir referans, kullanım kılavuzu ve tasarım örnekleri ile birlikte gelir. Onları çalış.

Kitapları oku

Kitap okumalısın. Benim durumumda dijital tasarımı bilen hiç arkadaşım yoktu ve bu site de basit bir şey yüzünden pek yardımcı olmadı - sorumu nasıl ifade edeceğimi bile bilmiyordum. Bulabildiğim tek şey "Uhm, millet, dcfifo bir şey var ve saat alanı geçme sorunları hakkında bir şeyler duydum, bu nedir ve tasarımımın neden işe yaramadığını" duydum.

Şahsen bunlarla başladım:

FPGA satıcılarının en iyi uygulamaları içeren çok sayıda yemek kitabı vardır. Bunları referans tasarımlarıyla birlikte inceleyin. İşte örneğin, Altera dan biridir.

Daha spesifik sorularla geri dön

Kitaplarınızı okurken, bir tasarımı simüle ederken, geliştirme panonuzdaki bazı LED'leri yakıp söndürürken, büyük olasılıkla, çok fazla sorunuz olacak. Burada sormadan önce kitabın bir sonraki sayfasında ya da çevrimiçi olarak (yani Kafese özgü forumda) gelenlere bir cevap görmediğinizden emin olun.


Bu ayrıntılı cevap için çok teşekkürler, gerçekten nasıl ilerleyebileceğimi görmeme yardımcı oldu. Maalesef bana yardım edebilecek bir arkadaşım da yok. Ama sen beni sadece beladan kurtardın ve bir kez daha çok teşekkür ederim !!!!
Anila

5
Mükemmel cevap
Esad Ebrahim

Okula geri döndüğümüzde VHDL öğrenmeden önce C ++ 'ı öğrendik. Bunu anlamakta çok zorluk çekiyordum, ancak her şeyin tıklandığı nokta, her şeyin gerçek zamanlı ve paralel olarak gerçekleştiğini anladığım zamandı (paralel, asenkron olmayan düğümler gibi). Yazılım geliştirme sıralı bir akışı izler, ancak HDL'de her şey bir seferde gerçekleşir (çoğu zaman). "X = 1; y = 2; y = x; x = y" gibi bir şeye sahipseniz, SW'de, y'nin sonunda 1'e eşit olacak, HDL'de bir yarış koşuluna sahip olacaksınız. aynı anda birbirlerine geçin. Sadece bunu hatırla ve hayat senin için daha kolay olabilir.
PGT 16

@PGT Eğer 'y' ya tek bir çekirdekte veya birden fazla çekirdekte çalışan çoklu işlemlere erişilebiliyorsa ve bu da daha zayıf bir sürece yetkisini dayatabilecekse, y değerinin 1'den farklı bir değer olmasını beklersiniz.
Adithya

1

Alternatif olarak, Xilinx'in Vivado HLS ve Altera'nın OpenCL çözümü gibi bazı yüksek seviyeli sentez tekniklerini kullanabilirsiniz. Belki de bu, yazılım geçmişinizi dikkate alarak donanım açıklama dillerini öğrenmek için eğrinizi azaltacaktır.


-1

İlk önce dijital tasarımın temellerini öğrenir. Mealy / Moore makinesi, kombinatoryal mantık, doğruluk tablosu, karnaugh haritası vb. Şemalarda basit bir tasarım oluşturmaya başlayın (7 segmentli sayaç) ve sonra bir HDL öğrenin. Avrupa'da VHDL, ABD Verilog'unda kullanılmaktadır. Sonunda zamanlama önemlidir, sinyallerin bileşen anında ve sıcaklığa bağlı gecikmelere sahip olduğunu ve her sinyalin başka bir gecikme olduğunu unutmayın.

Okumak için: http://www.amazon.com/Advanced-FPGA-Design-Architecture-Uygulama/dp/0470054379

Perfect Language sözdizimi bilgisi daha sonra içindir, ilk önce dijital tasarımı ve sorunlarını anlayın.


Avrupa'da VHDL, ABD Verilog'unda kullanılmaktadır. Hiç de doğru değil ...
Matt Young

Gerçekten Verilog'u öğrendim ve İngiltere'den geliyorum. Aynı zamanda üniversitede yaptığım modüllerden birinde (aynı zamanda İngiltere'de) öğretilen dil.
Tom Carpenter
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.