En son öğrencilere yönelik basit bir 16 bit RISC işlemcisine baktım. Belgelerde küçük bir yardıma ihtiyaç duyulması ve eksik bir dosyaya sahipti, ancak EDA Bahçesi olarak adlandırılan İnternet aracında ücretsiz bir şekilde kullanmayı taklit etmeyi başardım. Bu sefer, sizi kod ayrıntılarını ve simülasyonun tam olarak nasıl çalıştırılacağını da alacağım.
Zaten kontrol etmediyseniz, önceki yayıncıya atıfta bulunmak istersiniz. Diyagramların yanı sıra tablolar, bu yazıda tartışılan dosyaları kavradığınızda yardımcı olacak yüksek düzeyde genel bakış sağlar.
Bunu gerçekten gerçek bir FPGA’da programlamak istersen, yapacak küçük bir işin var. Hafızanın yanı sıra, Simülasyon için iyi çalışan bir yöntemde Kayıt Başlatma işlemi gerçekleştirilir, ancak orijinal bir FPGA üzerinde çalışmaz. Neyse, başlayalım!
Dosya dosyası
Her veriyi ayrı ayrı alırsanız, hiçbiri anlamak son derece zordur. İşte hızlı bir şekilde yıkık (internet simülasyonunda kullanacağım veri adlarını kullanıyorum):
Parametre.v – Bu, her dosya için bazı temel tanımlar belirleyen bir verilerdir.
prog.v – Bu yön hafızasıdır. Basit bir modül, bu adres için verileri sunar. $ ReadMemb yönergesi verileri bir veriden (Test.prog) okur.
register.v – Kayıt dosyası. Bu neredeyse yönü hafızası gibidir, ancak buna göre iki kontrol portu vardır.
data.v – RAM belleği. Bu neredeyse kayıtlar gibi, ancak tek bir kontrol limanının yanı sıra daha büyük. Bir veri açmanın yanı sıra hafıza yorumlarını yazdıran bazı simülasyon kodları var, ancak bunu hata ayıklama için olduğu gibi silindim. Ön içerik, Test.Data dosyasından geliyor.
ALU.V – Bunun karmaşık olacağına inanacaksınız, ancak olmadığı. Sadece iki giriş alır ve çıktıyı üretecek bir şey yapar. Basit bir şey gibi bir şey ekler veya çıkarır. Her zaman @ (*) Verilog’a bunun için saatli mantık üretmemesini söyler. Sadece bazı basit kapılara ve mukozlara dönüşür.
Datapath_unit.v – Bu, daha karmaşık dosyalardan biridir, ancak kazarsanız, esas olarak toplu olduğunu göreceksiniz. Bu veri, tüm kaynakları (kayıtların yanı sıra anılar gibi) bir araya getirir.
Control_unit.v – Bir daha uzun bir modül, bu sadece yön tablosunu uygular, mevcut talimatlara dayanarak kontrol hatlarını ayarlar.
Alucontrol.v – Bu veri ALU için talimatları çözer. Orijinal yazıda eksikti. Garip bir şekilde, Alucontrol dosyasına sahip olan aynı sitede bir tane daha benzer bir CPU var, ancak farklı bir yön ayarlaması için açıkça. Bununla birlikte, bu verileri takip etmenin yanı sıra stil tablosunu kullanmaya başlayarak, bunu yeniden yapmayı başardım. [Fpga4students] bunu düzeltirse, dosyalar son derece farklı görünebilir.
Design.SV – Bu veriler kullandığım EdaPlayground simülatörü için gereklidir. Üst düzey elemanları (veri yolu ve kontrol ünitesinin yanı sıra) içerir. EdaPlayground bu dosyayı yalnızca bu dosyayı işlerken, yukarıda belirtilen diğer dosyaları içermesi için gereklidir. Bu, her birinin bir zaman çizelgesi direktifine sahip olduğu için bazı uyarılara neden olur, ancak bu zararsızdır.
TestBench.SV – TestBench, gerçek tasarımın bir parçası değil, ancak sadece simülasyonu ortaya koyma ve sonuçları toplar. EdaPlayground ile çalışmak için biraz değiştirmek zorunda kaldım, ancak işlem aynı. Sadece bir CPU üretir, bir saati besler ve bir süre çalışmasını sağlar. Test programının yanı sıra hafıza içeriği Test.prog’un yanı sıra Test.Data’da.
Simülasyon
İki şeyden birini yapabilirsin. Stilin kopyasını harekete geçirmeye hazır olabilirsiniz, ancak bu sizin en iyi seçeneğiniz olmayabilir. Sadece EdaPlayground’a gitmenizi ve yeni bir verilog projesi üretmenizi öneririm. Ardından dosyaları orijinal postadan hareket ettirmeye başlayın. Kayıp dosyaların yanı sıra hatalarla karşılaşacaksınız. Tam olarak kaç tane düzeltebileceğinizi görün. Eğer güdük ederseniz, güdük ederseniz size yardımcı olmak için kopyamı kullanabilirsiniz. Bu şekilde daha fazla keşfedeceksiniz.
Denemeyi seçerseniz, tam burada EdaPlayground hakkında birkaç ipucu. UVM / OVMM seçiliyse, herhangi bir diğer kütüphaneyi seçmeniz gerekmez. ICARUS Verilog 0.9.7’yi kullandım, ancak mümkün olan en muhtemel verilog araçlarının herhangi bir türünü kullanabilirsiniz. Epwave onay kutusunu incelemek ve bunu testbenchin inital parçasına eklemek için gerekliliğinizi de incelemek istiyorsunuz:
ilk
başlamak
$ dumpfile (“dump.vcd”);
$ dumpvars;
Yeni dosyalar yapmak için veri adı sekmelerinin yanındaki + göstergesini kullanın. EdaPlayground, bölme başına on dosya sınırına sahiptir. Unutmayın, her iki testbench.sv veya design.sv’de ürettiğiniz her türlü .v dosyasını eklemeniz gerekir. Diğer dosyalar bunları dolaylı olarak kullandığından veri dosyalarını dahil etmeyi gerekmez.
Koşmak!
Tüm hatalara uyduğunuzda, WAVEFORM görüntüleyicisini, epwave’yu alacağınız gibi çalıştırabilir. Sen have İlgi oranı sinyallerini eklemek için CPU’yu işte izleyebilirsiniz. Hafızada veya bazı hata ayıklama limanlarında bazı G / Ç cihazları eklemek eğlenceli olurdu, böylece işleri biraz daha iyi izleyebilirsiniz. Genellikle, içeri girenlerin bir kavramını almak için Kayıt Borsa Bağlantı Noktası’na genellikle izleyeceğim.
Orijinal kodun çok fazla talimat kullanan bir programı vardı. Bunu da yerine getirdim, bununla değiştirdim:
0000_0100_0000_0000 // 0000: Ton R0 <- MEM (R2 + 0) R2 = 0'dan beri bu R0'da 1 koyar
0000_0100_0100_0000 // 0002: Tonlar R1'de aynı) (R1 her zaman 1 içerecektir)
// place 8 (bayt), 4 (kelime):
0010_0000_0101_0000 // 0004: r2 = r0 + r1
0001_0010_1000_0000 // 0006: MEM [R1] = R2 (bu MEM [1] = R2
0000_0010_0000_0000 // 0008: r0 = MEM [R1]
1101_0000_0000_0011 // 000a: Yere atla # 4 (CPU 2 ile çarpacak ve 2)
// 000C'de yön yok, ancak PC'nin atlamayı sürdürürken oraya asılacak
Programın yanı sıra, her döngü ile birlikte 4'ü yerleştirin. İşte tipik bir oturum:
Çok fazla iç sinyalleri bıraktım, ancak hafıza adresinin 1'in yanı sıra, döngünün ilk iki yinelemesinde 2 olarak ayarlandığını görebilirsiniz.
Son oyunu
Bu harika bir akademik CPU mu? Emin değilim. Bazı basit bir CPU'lar var, ancak zor oldukları için sık sık, ya da son derece pratik değiller. Bundan daha zor olan herhangi bir şey, yeni başlayanlar için ısırmanın büyük olasılıkla. Böyle bir şeyle başa çıkmadan önce bazı temel verilog kavraymanız gerektiğine inanırken, belgeler bazı bölgelerde biraz seyrek (ve kafa karıştırıcı) idi. Açıkçası, çalıştığımdan beri yeterince harikaydı, ancak daha yeni başlıyorsanız, en büyük olasılıkla açıklamaların yanı sıra biraz daha fazla yardım için teşekkür ederiz.
Tercih edilen bir Akademik Verilog CPU'nun var mı? Hala "tam" olan bir kişiyi arıyorum.