Yazılım & Bilgisayar Mühendisliği
Vhdl Testbenches: Fpga ve Asic Validasyon için Etkili Test Ortamıları Nasıl Yaratılır
Table of Contents
Güvenilir FPGA ve ASIC donanımı titiz test ve geçerlilik talep ediyor. VHDL testibenches, silikona girmeden önce mühendislere dijital tasarımları simüle etmek ve doğrulamak için gerekli olan zorunlu araçlardır. Etkili bir testbench fonksiyonel hataları, zamanlama ihlallerini ve köşe sütunları tasarım döngüsünde erken bulur ve genel gelişim maliyetlerini azaltır.Bu makale, FPGA ve ASIC doğrulama için geçerli olan VHDL testi için sağlam bir kılavuz sunar.
Bir VHDL Testbench nedir?
Bir VHDL testibench, yalnızca simülasyon amaçlı yazılmış VHDL kodun özel bir parçasıdır. sentezlenebilir VHDL'nin aksine - bu çıktıların gerçek donanıma haritalanması gerekir - testbench'in sentez kısıtlamaları yoktur. amacı, bir saat ve sıfırlama için giriş stimuli'yi oluşturmaktır (DUT), bu uyaran testleri, rastgele dizileri izlemek ve hatta puanlara dayalı olarak otomatik olarak kontrol etmek.
Testbench ve sentezlenebilir bir modül arasındaki temel fark, testbenches asla dosya I/O, metin çıktısı ve donanımda pratik olabilecek karmaşık veri yapıları gibi bir simülatörün içinde çalışmasına izin vermez.
Testbenches FPGA ve ASIC Validasyon için Eleştireldir
Birçok doğrulama mühendisi, test sırasında proje zamanlarının% 60-80'ini harcıyor. Bir test olmadan, bir tasarıma sahip olmak, dalgaformları manuel olarak inceleme gerektirir, bu hata ve yavaştır. Otomatik testler süreci hızlandırıyor ve güvenilirlik geliştiriyorlar.
- [FONT:0)Early Bug Tespiti:[Dönetici:[Dönetici: 0 ) Bugs, ASICs'de veya yönetim kurulunda yapılanların bir kısmını maliyetle buldular.
- [FONT:0)Regresyon Testi:[Döneticileri yapıldığında, testbenches mevcut işlevselliğin kırılmamasını sağlamak için yeniden tanımlanabilir.
- [FONT:0)Corner-Case Coverage:) Testbenches, manuel dalga düzenlemesinden çok daha fazla giriş kombinasyonu üretebilir.
- [FONT:0)Dokuz:[DÜye Olmayanlar İçin Tıklayınız.
ASIC tasarımları için, bir testbench genellikle özelliklerden sonra yazılan ilk kod parçası sonlanır, bazen RTL'nin kendisi tamamlandıktan önce. Bu uygulama, test odaklı geliştirme olarak bilinen, tasarımın başlangıçtan doğrulandığını sağlar.
Etkili bir VHDL Testbench
Her testbench, karmaşıklıktan bağımsız olarak, birkaç temel bina bloğu içerir. Bu bileşenleri anlamak etkili testlere yönelik ilk adımdır.
1. Saat ve Yükleme
Çoğu senkronizasyon dijital tasarım bir saat gerektirir ve sıfır. Testbenches genellikle belirli bir frekansta bir saat sinyalini kapmak için bir işlem içerir. Sıfır nesil birkaç döngü için sıfıra çıkmalı, sonra onu serbest bırakmalı. Örnek model:
- Assert 100 ns için düşük sıfır.
- De-assert saat çalışırken sıfırlanır.
- Test vektörlerini uygulamadan önce birkaç saat döngüsüne izin verin.
2. Stimulus Generation
Bu bileşen gerçek dünya koşullarını temsil eden giriş sinyalleri yaratır. Stimulus (her test vektörü açıkça tanımlanabilir) veya rastgele (bir p-random sayı nesli ile) Stimulus genellikle bir veya daha fazla YZT:0)işlemler)) olarak tanımlanır.
3. DUT Aniasyon
Test altında tasarım test mimarisi içinde anlık olarak yapılır. limanları, test sürücüleri veya monitörlerin yerel sinyallerine bağlıdır. Signal adlandırma kongreleri (örneğin, [[ENFLT:0) DUT iç ağlarından testbench sinyalleri ayırt etmenize yardımcı olur.
4. İzleme ve Checkers
İzlemeler DUT çıktılarını gözlemler ve değerlerini belirli simülasyon zamanlarında yakalarlar. Checkers, beklenen değerlere karşı gerçek çıktıları karşılaştırır, ya da hemen ya da bilinen bir gecikmeden sonra. Self-checking testbenches ifadeler kullanır ([DFLT:2) bayrak hataları otomatik olarak.
5. Test Sequencer
Birden fazla test senaryosu için, bir dizir, yürütme siparişini kontrol eder, tanımlanmış aşamalarda uyaranlar uygulanır ve senkronizasyon bariyerlerini içerebilir (örneğin, bir sonraki giriş göndermeden önce belirli bir yanıt bekleyin).
6. Rapor ve Logging
Testbenches, simülatörü konsoluna veya bir log dosyasına doğru ilerleme mesajları ve son sonuçları yayınlamalıdır. Bu, toplu simülasyonun manuel olarak dalgaformları görmeme gerek kalmadan çalışmasını sağlar. İyi giriş zaman damgalarını, test tanımlayıcılarını ve geçiş/fail statüsünü içerir.
Bir VHDL Testbench Oluşturma Adımları
Sıfırdan bir test kurmak sistematik bir yaklaşım izler. Aşağıdaki adımlar hem basit hem de gelişmiş ortamlara uygulanır.
Adım 1: DUT Interface ve Özellikleri Anlayın
Tek bir çizgi yazmadan önce, DUT'un port listesini gözden geçirmeden önce, protokol gereksinimleri, zamanlama diyagramları ve işlevsel özellikleri. Tüm giriş ve çıkış limanlarını, veri genişliklerini ve elhaklarını tanımlayın. Örneğin, DUT bir AXI Stream FIFO ise, hazır / geri ödeme davranışı ve eşleme ayarlarını not edin.
2. Adım: Testbench Skeleton
Bir VHDL dosyası boş bir varlık ( limanlar) ve bir mimari ile oluşturun. DUT portlarına bağlanmak için bir sinyal oluşturun. Örneğin DUT'u bir bileşen olarak Anında değiştirin.
entity tb_fifo is
end entity tb_fifo;
architecture sim of tb_fifo is
signal clk : std_logic := '0';
signal rst_n : std_logic := '0';
signal data_in : std_logic_vector(7 downto 0);
signal wr_en : std_logic;
signal full : std_logic;
-- ... other signals
begin
DUT: entity work.fifo
port map (
clk => clk,
rst_n => rst_n,
data_in => data_in,
wr_en => wr_en,
full => full
);
-- Clock generation process
clk <= not clk after 5 ns;
end architecture sim;
Adım 3: Stimulus Processes
DUT'u sürmek için bir veya daha fazla işlem ekleyin. Basit bir FIFO için, verileri FFO'ya tam olarak gelene kadar yazabilirsiniz, sonra okuyun.UseENFLT:4 veya ESFLT:5 saati ile senkronize etmek için.
Adım 4: Implement Monitors and Checkers
Çıktı sinyalleri gözlemleyen ve onları beklenen değerleri karşılaştırmak için karşılaştırmak. Self-checking testbenches use claims. For example:
assert dout = expected_data
report "Data mismatch at time " & time'image(now)
severity error;
Karmaşık DUTs için, referans modeli inşa etmeyi düşünün - doğru davranışı tahmin eden davranışsal bir açıklama - ve DUT'un çıkış döngüsünü döngüye döngüsü ile karşılaştır.
Adım 5: Run Simülasyons and Analyze Results
Testbench ve DUT'u seçtiğiniz simülatörün içinde kullanın ve iddia hataları için transkriptleri inceleyin.Görünmüş davranışların dalgaform izleyicileri kullanın.Testbench iteratively.
VHDL Testbenches'te Strategies Türleri
Farklı tasarım doğrulama hedefleri farklı test metodolojileri için çağrıda bulunur. En yaygın stratejiler şunlardır:
Yönetmen Test
Yönelme testinde, her test davası belirli bir özelliği kontrol etmek için elle yapılır. Bu, karmaşık tasarımlara ölçeklendirmek kolay değildir.Yönetim testleri bilinen köşe vakalarının bulunduğu ilk sanity kontrolleri ve regresyon süitleri için en iyisidir.
Random Testi
Rastgele test, sahte-random sayı jeneratörlerini çok sayıda giriş dizisini oluşturmak için kullanır. Testbench otomatik olarak çıktıları kontrol eder, genellikle referans modeline karşı. Bu yaklaşım, insan spektrallarının kaçırabileceği köşe vakaları keşfeder. VHDL rastgele sayılar oluşturmak için işlev sunar.
Coverage-Driven Test
Kapaklar metrikler (kola kapsamı, toggle kapsama, fonksiyonel kapsama) tasarımların hangi bölümlerinin egzersiz yaptığını gösterir. Birçok simülatörü VHDL kapsama paketlerini (örneğin, OSV VM veya UV VM VM) kullanarak uygulanabilir.
Regresyon Testi
Tasarım geliştikçe, bir regresyon paketi, geri dönüşümlerin tanıtılmadığından daha önce tüm testlerin tümünü çalıştırıyor. Bu, otomatik bir test kullanımı gerektirir. ModelSim veya Python senaryoları ile, başlatıcıları otomatik olarak çalıştırmaya ve sonuçları altın loglara kıyasla karşılaştırabilir.
Robust Testbenches için İleri Teknikler
Temel uyaran ve kontrol etmenin ötesinde, sezonlanmış doğrulama mühendisleri verimlilik ve test kalitesini artırmak için birkaç gelişmiş teknik kullanmaktadır.
Prosedürler ve Fonksiyonlar Kullanımı
Örneğin, AXI Stream arayüzüne tek bir kelime yazan bir prosedür birçok test için yeniden kullanılabilir. Bu modülerlik kod çoğaltmayı azaltır ve testbench'i korumak için daha kolay hale getirir.
Entity Instantiation vs. Cooliation
[FONT=0)Doğru varlık anlık olarak [DÜDÜDÜDÜDÜDÜDÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜSİADİ [ÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
VHDL-2008 Özellikler
VHDL-2008 testbench gelişimini artırmak için birkaç inşa tanıttı:
- [FONT:0)Enhanced jenerik türleri:) Daha esnek olmana izin verir.
- [FONT:0)Boolean portlardaki ifadeler:), Çözülmemiş sinyallerin bağlantısını basitleştirir.
- [FONT:0)Konditional ve seçilmiş sinyal atamaları: Süreç blokları için ihtiyaçtan yoksundur.
- [FONT:0)Standart: ([FONTT:0)) Ambalaj: ve [[Döneticileri temiz bir şekilde sonlandırmak için prosedürler.
- [FONT:0)Süreksel gelişmeler:[Dönetici:[Dönetici: 9) Açıklamalar simülasyonu durdurmak için [[Ücretsizler için [[DÜye Olmayanlar İçin Tıklayınız.
VHDL-2008 testbenches (DUT eski standartlarda yazılmalıdırsa bile) okunabilir ve kod hacmini azaltır.
Dosya I/O Test Vectors için
Büyük veri kümeleri (örneğin, görüntü filtreleri veya paket işlemcileri) işlemek için, metin veya ikili dosyaların test vektörleri önemlidir. VHDL'sİLFLT:14) paketi [[ENFLT:15) ve prosedürleri) kaynak sızıntılarından kaçınmak için her zaman yakın dosyalar sunar.
Puanlama ve Önleme
Bir puanboard olağanüstü işlemleri takip eden ve cevap geldiğinde kontrol eden bir veri yapısıdır. Bu, otobüsle işlev modellerinde yaygındır. Örneğin, bir DMA kontrolör testbench'da, bir puanboard her yaz isteği takip edebilir ve verilerin doğru hafıza konumunda göründüğünü doğrulayabilir.
En İyi Uygulamalar VHDL Testbenches
İyi testbench uygulamaları tasarım büyüdükçe öder. Aşağıdaki kılavuzlar testbenches sağlam ve adapte edilebilir tutmaya yardımcı olur.
modülerlik ve Reuse
Testbench'i ayrı dosyalara ayırın: DUT anlık ve saat / orta nesil için biri, ortak prosedürler için başka bir üçüncü, test dizileri için paketler kullanın.Bu modülerlik, birden fazla testbenches ile tekrarlama prosedürleri sağlar.
Naming Conventions
Net kullanın, tutarlı adlandırma. Örneğin:
- [FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=TRNT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=TRNT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=
- [FONT=18]
- [FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=
- [FONT: A) Teste özel sabitler için.
Genrics aracılığıyla parametreleme
Pass DUT jenerik parametreleri (örneğin, veri genişliği, FIFO derinliği) genel haritalar aracılığıyla testbench varlığına izin verir. Bu, kod değişiklikleri olmadan birden fazla konfigürasyonu doğrulamaya olanak sağlar.
Kendi kendine kontrol edin ve Sıfır Hoşgörü
Her testbench, herhangi bir iddia başarısız olursa otomatik olarak başarısız olmalıdır.Demek gerekirse testbench, yanlış eşleştirmelerden sonra sadece "Testbench"i açıkça yazdırır.
Dokümantasyon ve Yorumlar
Her testin amacı, beklenen davranış ve herhangi bir özel zamanlama gereksinimleri. İyi yorumlar gelecekteki mühendislere yardımcı olur (kendi altı ay sonra dahil) test niyetlerini anlamayı sağlar.
VHDL Testbenches with Modern Simülasyon Tools
Testbench kullanarak, simülatörü ile nasıl etkileşim kuracağını etkili bir şekilde gerektirir.
Simulator scripts
Çoğu simülasyon araçları Tcl senaryosu (ModelSim, Vivado, Riviera-PRO) Doğru sırayla tüm kaynak dosyalarını derleyen bir derleme yazın, simülasyon kütüphanelerini ayarlar ve testbench'i çalıştırın. Örneğin, tipik bir ModelSimFLT:23).
vlib work
vcom -2008 dut.vhd
vcom -2008 tb_fifo.vhd
vsim -voptargs=+acc work.tb_fifo
run -all
Batch Mode ve Regresyon
Regresyon testi için, zaman kurtarmak için toplu modda simülasyonlar çalıştırın. Testbench dış bir senaryo tarafından parsedilebilecek açık bir geçiş / mesaj yayınlamalıdır. Makefiles veya Python'u kullanarak düşünmek birden fazla testbench çalışır.
Waveform Dumping ve Debug
Geliştirme sırasında, tüm hiyerarşik sinyalleri giriş yapmak için ModelSim'de dalgaformu kullanın. Üretim için aşırı giriş hız simülasyonu için çalışır.
Coverage Collection
ModelSim'de, [[Inable code scope seçenekleri, kullanım kolaylığı:) ve sonra [[Dört|tavaj raporları yazmak için [[Analyze unreached line veya toggle points to create additional test cases.
Ortak Pitfalls ve Them'dan Nasıl Kaçırmak
Neglecting reset Sequence
Birçok tasarım belirli bir saat döngüsü için iddia edilmeye karar verir. Her zaman DUT özelliklerini takip eder; genel testler genellikle başarısız olur çünkü reset çok erkenden çıkarıldı.
Improper senkronizasyon
Yanlış saat döngüsündeki sürüş sinyalleri, sık sık sık simülasyon yanlış eşleştirmeler kaynağıdır. Her zaman yükselen bir saat kenardan sonra girişleri hemen alır (örneğin, kenar sırasında değil).
Tamamlanmış Kapak
Normal işlemi test etmek kolaydır, ancak hata koşullarını atlayın (örneğin, tam FIFO, backpress, geçersiz giriş). Tüm eyaletler ve geçişleri kapsayan Plan testi vakaları.
Timing'i görmezden gelmek
sentezlenebilir RTL simülasyonu genellikle döngü-kuddizedir, ancak testbenches yanlış model kombinasyonlar kullanabilir.UseurFLT:29) Maddeleri bakım ile kullanın; zaman senkronizasyonu senkronizasyonu tercih edin senkronizasyonu senkronizasyonu tercih edin.
Sertcoded Gecikmeler
*) Tamamen bir şekilde asenkron davranışı modellemezken, bu tür gecikmeler saat frekansı değişikliklerine duyarlı testler yapar. yerine saat döngüleri kullanın.
Dış Araçlar ve Kaynaklar
Testbench uzmanlığınızı derinleştirmek için aşağıdaki kaynakları keşfedin:
- [FONT=0)UV VM: Universal VHDL Verification Methodology[[Dönetici:0) – AXI, SPI ve UART gibi ortak arayüzleri işlemek için prosedürler sağlayan açık kaynak VHDL doğrulama çerçevesi.
- [FONT=0)OSVVM: Açık Kaynak VHDL Doğrulama Yöntemi[[[Dönetici: 1) - rastgeleleştirme, kapsama ve puanlama özellikleri standart VHDL testbenches için.
- [FONT:0]VHDL-2008 Tasarımcılar Kılavuzu[Dönetici:0)[Dönetici:0)[FONTT:1).
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Etkili VHDL testibenches, hataları erken yakalayan ve modüler, parametresiz ve iyi hazırlanmış bir test haline getiren tasarım karmaşıklığıyla ölçeklenen test ortamı oluşturabilirsiniz.Ingerekli testbenches that scales with UVVM and OSVVM evolve, learning environment that catch böceklerin to create the correct, and enable design meet the locations before Hardware is built.Innally, the time made in creating a detailed testbench testbenches by lower testingbenches that scales with correct tools and methodologies like UV VM VM VM VM VM and OSVVM evolve, you can create test environment that frameworks can further improve production. sonuçta, the time investment in building a detailed testbench, the time costs through the correct testingbenches by correct apps.