ZPU (mikroişlemci) - ZPU (microprocessor)

Sovyet / Rus uçaksavar silahı için bkz. ZPU .

ZPU a, mikroişlemci küme makinesi bir bulunmaktadır elektronik sistemlerde denetleme kod çalıştırmak Norveç şirketi Zylin AS tarafından tasarlanan alan programlanabilir geçit dizisi (FPGA).

ZPU, küçük bir ekonomik nişe sahip nispeten yeni bir yığın makinesidir ve giderek artan sayıda kullanıcı ve uygulamaya sahiptir. Çok az miktarda elektronik mantık gerektirecek şekilde tasarlanmıştır ve FPGA'da başka amaçlar için daha fazla elektronik mantık kullanılabilir hale getirir. Kolayca kullanılabilir hale getirmek için GNU Derleyici Koleksiyonunun bir bağlantı noktasına sahiptir . Bu, derleyicisiz CPU'lara göre uygulamayı çok daha kolay hale getirir. Küçük boyuta karşılık hızdan ödün vererek, hesaplamaların ara sonuçlarını yazmaçlar yerine aşağı açılan bir yığın halinde bellekte tutar.

Zylin Corp., ZPU'yu 2008'de açık kaynaklı yaptı.

Kullanım

Birçok elektronik proje, bir FPGA'da elektronik mantık içerir. Ayrıca bir mikroişlemciye sahip olmak israftır, bu nedenle FPGA'daki elektronik mantığa bir CPU eklemek yaygındır. Genellikle, CPU daha az kaynak kullanıyorsa daha küçük, daha ucuz bir FPGA kullanılabilir. ZPU'nun ele almak için tasarlandığı tam durum budur.

ZPU, örneğin bir kullanıcı arabirimi gibi yazılım tarafından en iyi şekilde işlenen bir sistemin çeşitli görevlerini yerine getirmek için tasarlanmıştır. ZPU çok yavaştır, ancak küçük boyutu, FPGA'ya gereken yüksek hızlı algoritmaların yerleştirilmesine yardımcı olur.

Diğer bir sorun da FPGA'lar için çoğu CPU'nun yalnızca belirli bir FPGA üreticisinden temin edilebilen kapalı kaynaklı olmasıdır. Bazen bir projenin güvenlik denetimleri, eğitim amaçlı kullanımlar veya diğer nedenlerle geniş çapta dağıtılabilen bir tasarıma sahip olması gerekir. Bu tescilli CPU'lar üzerindeki lisanslar bu kullanımları engelleyebilir. ZPU açık kaynaklıdır.

Bazı projeler, küçük olması gereken ancak doğası gereği daha büyük koda sahip olan bir CPU üzerinde çalışan koda ihtiyaç duyar. Alternatif olarak, bir proje GNU Derleyici Koleksiyonu için çok çeşitli kod, derleyiciler ve hata ayıklama araçlarından yararlanabilir. Bu durumlarda, hedef CPU'da ZPU'nun komut kümesini uygulamak için bir emülatör yazılabilir ve ZPU'nun derleyicileri kodu üretmek için kullanılabilir. Ortaya çıkan sistem yavaştır, ancak kodu birçok CPU'dan daha az belleğe sığdırır ve projenin çok çeşitli derleyiciler ve kod kullanmasını sağlar.

Tasarım özellikleri

ZPU, elektronik mantık miktarını en aza indirmek için açık bir şekilde tasarlanmıştır. Minimal bir komut kümesine sahiptir, ancak GNU Derleyici Koleksiyonu için kodlanabilir. Ayrıca, FPGA'da olması gereken yazmaç sayısını en aza indirerek, flip-flop sayısını en aza indirir. Kayıtlar yerine, ara sonuçlar bellekte yığın üzerinde tutulur.

Ayrıca hafızadan tasarruf sağlayan küçük bir kodu vardır. Yığın makine talimatlarının kayıt kimliklerini içermesi gerekmez, bu nedenle ZPU'nun kodu diğer RISC CPU'larından daha küçüktür ve ARM Holdings Thumb2'nin yalnızca yaklaşık% 80'ine ihtiyaç duyduğu söylenir . Örneğin, işaretli anlık, ZPU'nun 32 bitlik bir değeri en fazla 5 baytlık talimat alanında ve bir kadar küçük bir yerde saklamasına yardımcı olur. Çoğu RISC CPU'su en az sekiz bayt gerektirir.

Son olarak, talimatlarının yaklaşık 2 / 3'ü, diğer 1 / 3'lük "gerekli" talimatlar kullanılarak uygulanan bellenim tarafından taklit edilebilir. Sonuç çok yavaş olsa da, elde edilen CPU 446 arama tablosu gerektirebilir (FPGA karmaşıklığının bir ölçüsü, kabaca 1700 elektronik mantık geçidine eşdeğerdir).

ZPU, sıfır konumundan başlayan 32 baytlık kod alanından oluşan bir sıfırlama vektörüne sahiptir. Ayrıca, 32 baytlık kod alanından oluşan bir vektör 32 baytlık bir kod alanından oluşan bir vektör ile 32 adreste başlayan tek bir kenara duyarlı kesmeye sahiptir. 2 ila 63 arasındaki vektörlerin her biri 32 bayt boşluğa sahiptir, ancak 33 ila 63 arasındaki talimatları taklit etmek için kod için ayrılmıştır.

Temel ZPU'nun 32 bitlik bir veri yolu vardır. ZPU ayrıca daha fazla mantık kaydetmek için 16 bit genişliğinde bir veri yoluna sahip bir modele sahiptir.

Araçlar ve kaynaklar

ZPU, GNU Derleyici Koleksiyonunun iyi test edilmiş bir bağlantı noktasına sahiptir. Meraklılar ve aygıt yazılımı mühendisleri ECos , FreeRTOS ve μClinux'u taşıdı . En az bir grup meraklı, Arduino'nun popüler geliştirme ortamını kopyaladı ve ZPU'ya uyarladı.

Artık ZPU çekirdeğinin birden fazla modeli var. Orijinal Zylin çekirdeklerinin yanı sıra, ZPUino çekirdekleri ve ZPUFlex çekirdeği de vardır. Zylin çekirdeği, minimum FPGA ayak izi için tasarlanmıştır ve 16 bitlik bir sürümü içerir. ZPUino, hız için pratik iyileştirmelere sahiptir, öykünülmüş talimatları donanımla değiştirebilir ve bir çip üzerinde sistem çerçevesine yerleştirilmiştir. ZPUFlex, harici bellek bloklarını kullanmak üzere tasarlanmıştır ve öykünülmüş talimatları donanımla değiştirebilir.

Akademik projeler, güç verimliliği çalışmaları ve iyileştirmeleri ile güvenilirlik çalışmalarını içerir.

Hızı artırmak için, çoğu uygulayıcı taklit edilen talimatları uyguladı ve bir yığın önbelleği ekledi. Bunun ötesinde, bir uygulayıcı, iki yığınlı bir mimarinin ardışık düzeneğe izin vereceğini (yani hızı, saat döngüsü başına bir talimata yükseltmek), ancak bunun da derleyici değişiklikleri gerektirebileceğini söyledi.

Bir uygulayıcı, yığın önbelleği ve otomatik saat geçidi eklenmesiyle güç kullanımını% 46 azalttı. Güç kullanımı o zaman kabaca ARM v2a mimarisini uygulayan küçük açık kaynaklı Amber çekirdeğine eşdeğerdi.

ZPU'nun hataya dayanıklılık tarafından en çok yardım edilen parçaları adres veriyolu, yığın işaretçisi ve program sayacıdır.

Komut seti

"TOS", "Top of Stack" in kısaltmasıdır. "NOS", "Yığının En Üstüne Sonraki" ifadesinin kısaltmasıdır.

Gerekli ZPU Komut Seti
İsim İkili Açıklama
KIRILMA 00000000 CPU'yu durdurun ve / veya hata ayıklayıcıya atlayın.
IM_x 1xxxxxxx İmzalı bir 7 bitlik hemen TOS'a itin veya ekleyin.
STORESP_x 010xxxxx TOS'u açın ve üstten bir ofsetle yığında saklayın.
LOADSP_x 011xxxxx Yığın içinde indekslenmiş bir değerden alın ve TOS'a itin.
EMULATE_x 001xxxxx X vektöründeki kodla bir talimatı taklit edin.
ADDSP_x 0001xxxx Yığın içinde indekslenmiş bir değerden alın ve değeri TOS'a ekleyin.
POPPC 00000100 TOS'tan bir adres açın ve PC'de saklayın.
YÜK 00001000 Bir adres açın ve yüklenen bellek değerini TOS'a itin.
MAĞAZA 00001100 NOS'u TOS tarafından gösterilen belleğe kaydedin. İkisini de patlat.
PUSHSP 00000010 Mevcut SP'yi TOS'a itin.
POPSP 00001101 TOS'u açın ve SP'de saklayın.
EKLE 00000101 TOS ve NOS'un tamsayı olarak eklenmesi.
VE 00000110 TOS ve NOS'un bit tabanlı AND'si.
VEYA 00000111 TOS ve NOS'un bit tabanlı VEYA.
DEĞİL 00001001 Hizmet Şartları'nın bit tabanlı DEĞİL.
FLIP 00001010 TOS'un bit sırasını ters çevirin.
HAYIR 00001011 İşlem yok. (Genellikle gecikme döngüleri veya kod tabloları için kullanılır.)

Kod noktaları 33 ila 63, 2 ila 32 arasındaki vektörlerdeki kodla benzetilebilir: LOADH ve STOREH (16 bit bellek erişimi), LESSTHAN (karşılaştırma seti 1 doğru, 0 yanlış), LESSTHANOREQUAL, ULESSTHAN, ULESSTHANOREQUAL, SWAP (TOS ile NOS), MULT, LSHIFTRIGHT, ASHIFTLEFT, ASHIFTRIGHT, CALL, EQ, NEQ, NEG, SUB, XOR, LOADB ve STOREB (8-bit bellek erişimi), DIV, MOD, EQBRANCH, NEQBRANCH, POPPCREL, CONFIG, PUSHPC, SYSCALL, PUSHSPADD, HALFMULT, CALLPCREL

Referanslar