Yumuşak CPU doğrulaması


18

Şu anda Xilinx ISE ve ISIM kullanarak VHDL'de basit bir CPU tasarlama sürecindeyim. Tasarım kısmı oldukça iyi gidiyor, ancak doğrulamayı tutarlı bir şekilde yapmanın bir yolunu bulamıyorum.

Şu anda üzerinde çalıştığım işlevi test etmek için güncellediğim bir VHDL test tezgahım var. Bu çok ad-hoc, ve regresyonları yakalamama yardımcı olmaz ve şartname / talimat setine uyumu doğrulamak için kullanılamaz.

Kapsamlı bir test paketi geliştirmeyi düşündüm, ancak sorun, CPU olarak genel amaçlı bir parçanın potansiyel durumunun daha az genel bileşenlerle karşılaştırıldığında çok büyük olması.

Tasarım ve testleri daha kontrollü bir şekilde yapmama izin veren bir yöntem arıyorum. Bir çeşit "donanım TDD" olacak. Böyle bir şey var mı? CPU gibi genel amaçlı parçalara nispeten kolay uygulanabilir mi?

Yanıtlar:


16

CPU doğrulamasının tüm sorunu çok büyük ve zordur. Sadece bundan kariyer yapan insanlar var. Size genel bir bakış sunacağım ...

  1. Her talimatı ve her talimatın küçük ayrıntılarını test eden bir montaj dili programı yazın. Örneğin, ADD komutunu test ederken, hem pozitif, hem negatif hem de her birinden (iki kez) sayılarla test edebilirsiniz. Daha sonra, taşıma bayrağını, sıfır bayrağını, vb.

  2. C / C ++ veya başka bir şey kullanarak CPU'nuzun bir modelini yazın. Bu sizin sanal CPU'nuz. Bu aynı zamanda sizin “altın CPU” nuzdur, yani bu her şeyin karşılaştırıldığı CPU'dur. İdeal olarak VHDL'yi yazan kişi, C / C ++ modelini yazanla aynı kişi değildir .

  3. C / C ++ modelini ve VHDL modelini yan yana çalıştırabileceğiniz ve sonuçları döngü bazında karşılaştırabileceğiniz bir sistem yazın / oluşturun. Montaj programınızı Adım 1'den çalıştırın ve iki modelin eşleştiğinden emin olun.

  4. İki modelinizi rastgele "talimatlar" üzerinde çalıştırın. Temel olarak, "ram" ı rastgele verilerle doldurun ve rastgele verileri gerçek talimatlar gibi yürütün. Aynı rasgele verileri VHDL ve C / C ++ modellerinde çalıştırın ve sonuçları karşılaştırın. Bu C / C ++ modeli bazı iş istasyonlarında ve / veya sunucularda çalışır (yeni CPU'nun kendisi değil).

  5. Adım 4'ü esasen sonsuza dek tekrarlamak için bir makine veya birkaç makine kurun. CPU'nuz "bitmiş" ve bir yıl veya daha uzun bir süredir üretimde olsa bile bu testi uygulayacaksınız.

  6. Simüle edilecek başka şeyler olduğunda bu adımları tekrarlayın. Örneğin, kullanılabilir olduğunda zamanlama ile rota sonrası VHDL'de çalıştırabilirsiniz.

VHDL ve C / C ++ sürümlerini karşılaştırmanın her hatayı yakalayacağının garantisi yoktur - ancak gerçekten daha iyi bir yol yoktur. CPU'yu rastgele talimatlarla test etmek zaman alır, ancak bu da çok yararlıdır. Bunun tek gerçek alternatifi, CPU'nun farklı bölümlerini test etmek için tüm gün kod yazmak için birçok insanı işe almaktır - ve daha büyük şirketler bunu yapar, ancak rastgele veri şeyler de yaparlar.

VHDL kodu yazan tek bir kişi için genellikle sadece 1. adım yapılır. Ancak CPU'yu satacaksanız, diğer adımların en azından bir kısmının yapılması gerekir (ve gerçekten hepsini yapmalısınız).


Mükemmel cevap, teşekkür ederim! Bu çok mantıklı. "Altın CPU" aslında test sırasında döngüsel doğrulama yapmanızı sağlayan bulmacanın eksik parçasıdır. Bu çoğunlukla bir oyuncak projesi olduğundan, son paragrafın ilk cümlesine uyacağımı ve sadece 1. adımı yapacağımı düşünüyorum. Ama ne yapmam gerektiğini bilmek çok değerli.
drxzcl

Ayrıca, daha basit ve bu nedenle daha doğru olma olasılığını sağlayan altın, ancak döngüsel olarak doğru olmayan bir C ++ modeline sahip olabilirsiniz - örneğin ALU işlevselliğini test etmek için yararlıdır ("2 + 2 = 4 ve bazı bayraklar, I "bir kene sonra 2 + 2 = 4 ve 2 kene sonra bayrakları" yerine "umurumda değil")
Martin Thompson

Ayrıca, kod kapsamını (her şeyi uyguladığınızı kontrol etmek için) ve test kapsamını (tüm testlerin hem pas hem de başarısızlık için test edildiğini kontrol etmek için) çalıştırın
Martin Thompson

Takip: "Birinci adım" prosedürünü kullanarak, montajcımda çok fazla hata bulmayı başardım ... P Çekirdeğin kendisi nispeten iyi görünüyor.
drxzcl
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.