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 Q
yalnızca RESET
veya ü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 posedge
veya 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ığı or
için kafa karıştırıcıydı and
. Ayrıca 1'b0
(tek bir 0
bit) ' in değiştirilmesine dikkat edin ( atanmasına bağlı olarak '0
birçok 0
bite 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_comb
Duyarlı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!