FPGA üzerine işlemci tasarımı nasıl elde edilir


20

Kısa bir süre önce kendi kendine öğreten mantık tasarımı yolculuğuna çıktım. Bunun nihai ürünü, tam olarak bir simülatörde tasarlandığı gibi çalışan fonksiyonel bir 16 bit CPU'dur . Şimdi bir FPGA ile silikon içine koyma olasılığını araştırmaya başladım. Giriş / çıkış arenasında (gerçek dünya simülasyon ortamından farklıdır) birçok ayar yapmam gerekeceğini biliyorum ve tasarımımı tamamen netlists veya HDL kodu vermeyen bir programda yaptığımı keşfettim. yani gerçekten sahip olduğum tek şey şematik.

Ancak, bir şekilde tasarımımın bir netlist veya HDL koduna sahip olduğum bir noktaya geldiğimi varsayarsak, onu silikon haline getirmek için bir sonraki adımım nedir? Şimdiye kadar okuduğum kadarıyla FPGA'lar benim çözümüm gibi görünüyor, ancak Xilinx ve Altera web sitelerine bakmak başımı döndürüyor. Yanlış ağacı havlıyor muyum? Temel olarak, bir CPU'nun fonksiyonel şemasına sahip bir adam için bir sonraki adımın ne olduğuna dair basit bir İngilizce açıklama arıyorum. Hangi yöne gideceğimizi öğrendikten sonra, kitapları kırabilir ve oraya nasıl gideceğim hakkında bilmem gereken her şeyi bulabilirim. Ayrıca bir not, Mac OS X'deyim ama kesinlikle yapmam gerekirse ekleyebileceğim bir Windows XP kutum var.


Tasarımınızı hangi programda yaptınız ? Orada 3. taraf dönüştürücü olabilir.
Connor Wolf

Yanıtlar:


17

CPU tasarımınız için tebrikler. Evet, FPGA kesinlikle bir sonraki adımınız. Ama kafanı döndüren şeyin ne olduğu çok net değil. Sanırım sunulan çok sayıda farklı cihaz var. Ayrıca hangi simülatörü kullandığınızı da söylemezsiniz.
Bir tasarımı sentezlediğinizde, sentezleyici kullanılan kapılar ve RAM gibi kaynaklar hakkında bir rapor vermelidir . Bu, tasarımınız için hangi parçaların uygun olduğu hakkında bir fikir vermelidir. Yeterli baş boşluğunuz olduğundan emin olun . CPU'nuzda programları yürütmeniz gereken ekstra RAM içeren bir parça seçin .

edit (re your comment)
Belirli bir üretici için bir geliştirme sistemine ihtiyacınız var. Altera ve Xilinx büyük oyuncular ve her ikisinin de inananları var. Hangisini seçtiğiniz önemli değil, her ikisinin de ihtiyaçlarınızı karşılayacak kadar farklı parçaları var.
Xilinx için tercih ederseniz , ücretsiz olan ISE WebPACK Tasarım Yazılımı'na sahiptir (3.4GB'de büyük indirme). Yazılımın daha gelişmiş sürümleriyle karşılaştırıldığında sınırlamalar şu anda sizi rahatsız etmemelidir.
Sonra bir geliştirme panosuna ihtiyacınız var. Hangi FPGA'yı seçmeniz gerektiğine dair bir fikriniz olması gerekir. Xilinx için gidersen bir Spartalı seçerdim, belki bir Spartan-6, Virtex zaten çok üst düzey IMO'dur. Hala çok fazla seçenek var, çoğunlukla tahtadaki ekstralarda farklı. Birkaç anahtar ve LED'den biraz daha fazlasına sahip bir kart isteyeceksiniz. Bir klavye konektörü ve bir ekran modülü ararım.
Xilinx kurullarının bir numarası vardır ve Xilinx FPGA için de var Digilent , Avnet , Xess ve diğerleri.

Bu yüzden bir dizi panoyu karşılaştırın (fiyat da bir rol oynayacak, sanırım) ve kullanmayı planladığınız FPGA için geliştirme yazılımını indirin. Seçilen FPGA'ya sığacağını doğrulamak için tasarımınızı sentezleyin ve ardından bu FPGA'nın etrafında bir tahta satın almaya hazırsınız.

FPGA'lardan biraz bahsetmeyi unuttum. Bir FPGA temelde aralarında programlanabilir bağlantılara sahip geniş bir kapı koleksiyonudur, böylece onlarla hemen hemen her mantık fonksiyonunu / sistemini oluşturabilirsiniz. Birkaç nesil boyunca FPGA'lar daha gelişmiş hale geldi ve artık RAM gibi verimli işlevler oluşturmak için optimize edilmiş bloklara sahipler. Geliştirme yazılımınızın synthesizer'ı kapılar arasında bağlantı şeması oluşturur. Bu kalıcı olarak FPGA'da depolanmaz, ancak harici bir yapılandırma Flash belleğinden açıldığında yüklenmelidir. Tasarımınız burada saklanacak. Diğer Flash bellekler gibi birçok kez silinebilir ve yeniden yazılabilir.


Şemalar için harika olan Logisim'i kullandım, ancak resimlerden (png, jpeg, vb.) Başka bir şey çıktılama yönteminden yoksundur. Sahip olduğum FPGA kafa karışıklıkları üzerinde, kısmen geniş bir cihaz dizisi meselesi, ama aynı zamanda temelleri ve temelleri açıklayan kaynaklar bulamıyorum. CPU'umu oraya koyarsam, dış dünyayla nasıl arayüz oluşturur? Hangi ekipmana ihtiyacım var? FPGA'yı tekrar tekrar programlayabilir miyim? vs vs vs Gerçekten bu tamamen konuya aşinalık eksikliği. Sanırım bir başlangıç ​​kılavuzuna ihtiyacım var, ama hiçbir yerde bir tane bulamıyorum.
Rory O'Hare

2
Sorularınız sırayla: 1) FPGA'lar I / O pinleri aracılığıyla dış dünya ile arayüz oluşturur. Fark, özel yongaların aksine pinleri seçebilmenizdir. 2) Bir başlangıç ​​kiti, geliştirme kiti veya benzeri ile başlayabilirsiniz. Bu FPGA, I / O için bazı konektörler ve gemide güç kaynakları olacaktır. Çoğu da programcı içerir; eğer biri almayı unutmazsa. 3) Evet, FPGA'yı yeniden programlayabilirsiniz. Program, temelde dev bir kaydırma yazmacı olan çip üzerinde saklanır. Başlangıçta, özel bir durum makinesi veya harici kaynak çipi içine yükler.
Mike DeSimone

9

Xilinx'in araçlarına aşina değilim, ama Altera'nın yanındayım, bu yüzden size onlarınkini anlatacağım. Xilinx ve diğerleri çok farklı olmamalıdır.

Verilog

Yapmanız gereken ilk şey Verilog'u öğrenmek . Bu, Verilog'un (ve biraz benzer VHDL) ilk önce bir simülasyon dili olarak tasarlandığı için başınızı incitir ve birçok yapı (örneğin #5"5 zaman adımı beklemek" anlamına gelir, bir zaman adımı genellikle nanosaniye olur). Bu nedenle, Verilog kodunuzu sentezlenebilir , yani bir FPGA için bir bit akışına derlenebilir hale getirmek için aklınızda bulundurmanız gereken birçok kısıtlama vardır .

Bununla birlikte, en büyük şok Verilog'da (ve VHDL) yazdığınız şeyin sistemden beklediğiniz davranış olması ve derleyicinin açıklamanızdan uygun mantığı ihlal etmesidir . Dikkatli değilseniz, bundan çok sayıda kötü hata alabilirsiniz.

Örneğin, bir D flip-flopu şöyle görünür:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Bu, bir DFF'nin nasıl çalıştığını açıklar ve derleyici bunu analiz etmek ve bir DFF istediğinizi bulmak zorundadır. Bu @(...), kod bloğunun yeniden değerlendirilmesini tetikleyen sinyallerin bir listesi olan bir duyarlılık listesi olarak adlandırılır ; bu nedenle, bu blokta Qyalnızca RESETveya üzerinde yükselen bir kenar varsa değişir CLK(bu, aktif-yüksek sıfırlama içindir). Hassasiyet listesindeki bir şeyi unutursanız ( kombinasyonel bir mantık bloğu için herhangi bir değiştirici posedgeveya sağ taraftaki tüm değişkenleri içermelidir negedge) derleyici mandalları bir hata çağırmak yerine gerektiği gibi sentezler. Çılgınca, ama bu böyle, çünkü Verilog aslında uygulama ayrıntılarını gizleyen (ve dolayısıyla gerektirmeyen) bir simülasyon diliydi. VHDL aynı ama çok daha ayrıntılı.

Son olarak, Verilog'un SystemVerilog adlı yeni bir sürümü birkaç yıl önce piyasaya sürüldü ve bu da sentezlenebilir kod yazmayı çok daha kolay hale getirdi . Mümkünse, Xilinx ISE ve Altera Quartus II'nin her ikisi de desteklediği için bu dili öğrenin. Asıl sorun, iyi referans materyalin tamamen eksikliğidir.

Bir DFF'nin SystemVerilog sürümü birkaç küçük şeyi temizler:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Hassasiyet listesindeki sinyallerin virgülle ayrıldığını unutmayın. Çünkü orada çalışamadığı oriçin kafa karıştırıcıydı and. Ayrıca 1'b0(tek bir 0bit) ' in değiştirilmesine dikkat edin ( atanmasına bağlı olarak '0birçok 0bite genişleyen bir sembol gereklidir; parametreli modüller ile çok daha esnek). Son olarak, içeriğin flip-floplara sentezlenmesini gerektiren always(herhangi bir şey için kullanılabilir; kombinasyonel mantık, mandallar ve flip floplar) değiştirilmesine dikkat edin always_ff. always_combDuyarlılık listesini ortadan kaldıran bir de var , çünkü sadece girdilerden bloğa olan duyarlılıkları çalıştırıyor.

Altera'nın tasarım yazılımına Quartus II denir ve Web Edition'ı ararsınız . (Abonelik sürümleri oldukça pahalıdır ve yalnızca en hızlı veya en yeni FPGA modelleri için gereklidir.)

Üzücü yanı, konuyla ilgili iyi bir kitap bulamadığım. Ne öğrendiğimi, size neyin sentezlenebileceğini ve neyin olmadığını ve örnek kodunu söylemek için iyi bir iş yapmayan Verilog kitapları gibi birçok kaynaktan bir araya getirerek aldım. Quartus II, D parmak arası terliklerden durum makinelerine kadar birçok yaygın yapı için şablon kodu ekleyen bir "şablon ekle" komutuna sahiptir.

Demo Donanımı

İşlemcinizi Verilog'a uyguladıktan sonra oluşturmanız gerekir. Şimdilik, Quartus'un çipi seçmesine izin verin (aileyi seçmelisiniz; Siklon IV'ü tavsiye ederim) ve pinouts. Biulds olduğunda, ne kadar çipe ihtiyacınız olduğunu bileceksiniz. Kaç mantık elemanı, flip flop, RAM biti vb. Kullandığınızı söyleyecektir. Bunların hiçbirinde% 50'nin üzerinde olmadığınızdan emin olun; Eğer iseniz, derleyicinin seçtiği çipe bakın ve en az sayıda pime sahip bir sonraki büyük (mantık öğelerinde) çipi manuel olarak seçin ve% 50'nin altında kullanım elde edene kadar tekrarlayın.

Sonra nihayet inşa ettiğiniz kadar büyük bir çip olan bir demo kurulu için alışverişe gidin. İhtiyacınız olan çevre birimleri ve / veya G / Ç konektörlerine sahip olup olmadığını kontrol edin. Eksik donanım sağlamak için bir genişletme konektörüne takılan bir ek kart oluşturmak nadir değildir.

Artık donanımınızı seçtiğinize göre, gerçek pinleri bulun ve doğru sinyalleri doğru pinlere koymak için Pin Planlayıcı'yı kullanın. Demo kartında, hangi pinlerin demo kartındaki hangi cihazlara veya konektör pinlerine bağlandığını söyleyen bir kullanım kılavuzu olacaktır.

Pinouts setini aldıktan sonra, istediğiniz iğneleri kullanması için tekrar oluşturun. Sistem saatleri gibi bazı sinyallerin özel giriş pinlerine ihtiyacı olacağını unutmayın (böylece doğrudan dahili PLL'lere yönlendirilirler).

Tasarımınızı doğrudan FPGA'ya indirmek için programlayıcıyı kullanın (bir süre önce bahsettiğim vardiya kaydı). Artık tanıdık düzenleme-derleme-çalıştırma hata ayıklama döngüsünde bulunuyorsunuz. Çalışana kadar çırpın.

Çalıştıktan sonra , programın yüklenip açılması sırasında kodun yerleşik yapılandırma aygıtına indirilmesi için programlayıcıyı kullanabilirsiniz .

Bu oldukça uzundu ve umarım bazılarına yardımcı olmuştur. Öğrenecek çok şey var ; yeni bir programlama dilini öğrenmek kadar yeni bir programlama paradigması öğrenmek gibi bir şey değildir, örneğin prosedürden işlevsel dillere geçmek. Verilog eşzamanlı bir dildir; kodun çoğu her zaman yürütülmektedir.

İyi şanslar!


Harika, bu çok yardımcı. Sadece bir şeyi kontrol etmek için, şematik yakalama hakkında duydum. Bu verilog öğrenmeye uygulanabilir bir alternatif mi? Gerekirse öğreneceğim, ancak% 100 gerekli değilse, zaten anlamaya ihtiyacım olan çok büyük şeylerin listesine eklememeyi tercih ederim. Çok teşekkürler.
Rory O'Hare

Dürüst olmak gerekirse, gerçekten değil. Büyük bir sorun şematik yakalama programının merhametinde olmanızdır: şemanızı alır ve yanlış Verilog üretirse ne yapabilirsiniz? Oysa Verilog yazmak size tüm hataları düzeltmek için gerekli yetkiyi verecektir. Bununla birlikte, büyük neden şematik yakalamanın asla Verilog kadar iyi yapmayacağı şeyler: Parametrelenmiş modüller ve veri yolu bölme ve birleştirme hemen akla gelenler.
Mike DeSimone

1
Biraz daha "donanım tanımlayıcı" bir dili Verilog veya VHDL'ye dönüştürebilecek araçlar var mı? C ve D doğrudur, Z:= A & (B # C); Z.ar = C & D;duyarlılık listeleri ve benzeri şeyler hakkında endişelenmenize gerek kalmadan benzer bir şey söylemek güzel olurdu ).
Supercat

Altera Quartus, tasarımınıza şematik veya AHDL (Altera'nın VHDL sürümü) veya muhtemelen diğer HDL'ler de dahil olmak üzere herhangi bir kombinasyonu olarak girmenizi sağlar. (eski moda olarak, öncelikle küçük bir AHDL ile CPLD ve FPGA projelerim için şematik giriş kullandım.)
Peter Bennett

Daha açık olmak gerekirse, AHDL bir VHDL sürümü değildir . Hem VHDL hem de Verilog, kodunuzun istenen devrenin davranışını tanımladığı ve derleyicinin uygulamayı bu davranış açıklamasından çıkarması gerektiği çıkarım dilleridir. Bu, hem simülasyon dilleri olarak başlamış hem de sentez için tekrar kullanılmış olmanın bir mirasıdır. AHDL, ilkelleri (örn. Parmak arası terlik, doğruluk tabloları) ve bunların nasıl bağlandığını bildirdiğiniz, derleyicinin tahmin etmek zorunda olmadığı açıklayıcı bir dildir. AHDL 80'lere dayanıyor ve ABEL'e çok daha yakın.
Mike DeSimone

5

Evet, FPGA'lar kesinlikle sizin çözümünüz!

Neredeyse kesinlikle olacak donanım tanımlama dillerinden birini kullanmak gerekir veya farklı bir araca şemaları tekrar girin. Şematik yaklaşıma karşı öneriyorum

  1. FPGA takım satıcıları onları gerçekten iyi desteklemiyor
  2. Taşınabilir değil

HDL yazdıktan sonra, çeşitli "IP sihirbazlarını" kullanarak doğrudan satıcı kitaplığından bir şeyler eklemediğiniz sürece veya bileşenleri doğrudan kitaplıklarından yapıştırarak, diğer yongalara adil bir şekilde taşıyabileceğiniz bir koda sahip olacaksınız. kolayca (örneğin gömülü C IME'yi taşımaktan çok daha fazlası)

Ayrıca, çok daha iyi bir test ve doğrulama ortamına sahipsiniz, çünkü işlevselliklerinizi "anlayan" ve sonuçları kontrol edebileceğiniz testler yazabilirsiniz, her şeyin yolunda olup olmadığını görmek için dalga formlarına bakmak yerine.

Büyük 2 HDL VHDL ve Verilog'dur. Bu cevabı nasıl farklılaştıklarını okumak isteyebilirsiniz ...

VHDL veya Verilog?

Ayrıca, Python'u zaten biliyorsanız, MyHDL'nin de bir göz atmaya değer olduğunu söyleyebilirim - size büyük bir doğrulama yeteneği sağlar, ancak yine de "normal" bir HDL'nin verdiği düşük seviyeli kontrolün çoğu.

Bir HDL seçtiğinizde ve daha sonra bir simülasyonda çalışmayı (tekrar, özür dilerim) aldıktan sonra, satıcı araçlarından geçirebileceğiniz ve görevin bir sonraki büyük parçasını öğrenebileceğiniz bir durumda olacaksınız - simüle ettikten sonra doğru, her zaman sentezlemek için almak düşündüğünüzden daha fazla çaba var :)

Şemalara bağlıysanız ve lisans alabiliyorsanız LabviewFPGA size uygun olabilir.


3

Hamblen ve ark.'nın Hızlı Dijital Prototipleme kopyasını edinin:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

Daha çok Verilog'u tercih ettiğim VHDL kullanıyor.

Kitabın önceki bir sürümünü kullanarak birkaç yıl önce kendi Altera FLEX 10K donanımımda uyguladığım çok basit bir 8 bit CPU, uP3 içeriyor. Ben için de kullanılabilir hale olacak bu 25 $ Cyclone II tahta benim "ön panel" PCB yapılmış olsun. Ayrıca bir MIPS ve Altera NIOS II işlemci içerir. Kitaptaki uP3 alıştırmalarını ücretsiz Altera Quartus II araçlarıyla çalışabilir, CPU kodunuzu VHDL'de yeniden yazabilir ve bir Cyclone II kartında çalıştırabilirsiniz. Alternatif olarak, Quartus II'nin şematik girişi vardır ve şematiğinizi doğrudan girebilmeniz, simüle edebilmeniz ve Siklon II'de çalıştırabilmeniz gerekir.


1

Zorluk, araç becerilerine sahip dik bir öğrenme eğrisiyse, en kolay yolu izleyin. Actel (şimdi Microsemi) sahiptir Liberoyu , sıfır okuma gerektiren ve kullanmaya başlamak kolay FPGA araçlarının paketi: Eğer yüklü girdikten hemen sonra. Aslında orada şemalar oluşturabilirsiniz ve birkaç tıklama ile fiziksel FPGA'ya yüklediniz, bunu yapmak için ekranlar kendi kendini açıklıyor.


0

Bir HDL öğrenmeyi seçerseniz, nerede olduğunuz daha iyi dil olanları etkileyebilir. Avrupa'da VHDL daha popüler. ABD'de Verilog, VHDL olan savunma sanayi dışında daha popüler. (ABD Savunma Bakanlığı başlangıçta VHDL'yi yarattı) Bu, yalnızca yakınınızdaki kişilerin bir dilde veya diğer dilde daha iyi yardımcı olabileceği anlamına gelir. Ancak çevrimiçi yardım arıyorsanız, bu önemsiz olabilir.

Dikkate alınacak diğer kitaplar , Altera DE1 ve DE2 kartlarına atıfta bulunan Dijital Sistemlerin Hızlı Prototipi: SOPC Edition'dır . Nasıl çalıştıklarına dair fikir vermek için DE1 ve DE2'ye taşınan çok sayıda farklı bilgisayar zaten var. Minimigtg68 (Amiga), FpgaGen (Sega Genesis), vb. Örneklere bakmak için bu panoya taşınır.

Xilinx'e giderseniz, şu anda içine girdiğim iki kitap var. Verilog ile FPGA Prototipleme Örnekler: Xilinx Spartan-3 Versiyonu VHDL ile FPGA Prototipleme Örnekler: Xilinx Spartan-3 Versiyonu Gerçi bunlarla önerilebilecek belirli bir kart bilmiyorum. Umarım yakında kurulu FPGA Arcade hakkında heyecanlıyım ama Xilinx ya da başka bir şey olup olmadığını unutuyorum.


0

Bu varyantı, şimdi Logisim Evrim olarak adlandırılan Logisim'i daha da geliştirdi. Logisim'de yerleşik bir mantık devresinin şemalarından VHDL'ye dışa aktarma özelliği uyguladılar.

Burada bulunabilir: https://github.com/reds-heig/logisim-evolution

Bu sorunun eski olduğunu bilin, ama bana bir yığın yardımcı oldu ve umarım başka birine yardımcı olur.

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.