Wat is Testbench?
Beschrijving voor simulatie die ingangen aan de te verifiëren schakeling geeft en controleert of de uitgangen kloppen. Wordt niet gesynthetiseerd, dus vertragingen en weergaveopdrachten kunnen vrij worden gebruikt.
Japanse benaming: テストベンチ
“Testbench” komt voor in 6 oefenvragen uit 2 onderwerpen, bijv. Hardwarebeschrijvingstalen en verificatie, LSI-ontwerpflow en EDA.
Vakgebied: Hardwarebeschrijvingstalen en verificatie
Wat een testbench bevat
Een testbench is een HDL-module op het hoogste niveau, meestal zonder poorten, die het te testen ontwerp (design under test, DUT) instantieert en omringt met alles wat nodig is om het te beproeven. Hij genereert de klok, bijvoorbeeld always #5 clk = ~clk;, wat elke 5 tijdseenheden omschakelt en bij een tijdseenheid van 1 ns een periode van 10 ns geeft, past de reset toe, stuurt ingangsstimulus aan en observeert de uitgangen. Hij kan ook testvectoren uit bestanden lezen, logs schrijven en golfvormen dumpen. De DUT is het synthetiseerbare ontwerp; de testbench bestaat alleen in simulatie.
Constructies alleen voor simulatie
Omdat een testbench nooit wordt gesynthetiseerd, kan hij mogelijkheden gebruiken die geen betekenis in hardware hebben. Vertragingsopdrachten zoals #10 laten de simulatietijd verstrijken, $display en bestands-I/O drukken waarden af of leggen ze vast, en de case-equality-operator === vergelijkt X- en Z-bits letterlijk, waardoor een test kan detecteren dat een uitgang onbekend is geworden. Synthese negeert of weigert deze constructies, dus ze moeten buiten de RTL blijven. Als ze in de ontwerpcode terechtkomen, kunnen het gedrag in simulatie en in hardware uiteenlopen op manieren die moeilijk te debuggen zijn.
Van golfvormen naar zelfcontrolerende tests
Voor een klein blok kan het met het oog bekijken van golfvormen volstaan, maar dat schaalt niet. Een zelfcontrolerende (self-checking) testbench berekent of zoekt voor elke invoer het verwachte resultaat op, vaak met een referentiemodel, vergelijkt het automatisch met de uitgang van de DUT en meldt afwijkingen als fouten. Duizenden tests kunnen dan zonder toezicht draaien, bijvoorbeeld 's nachts als regressie. Grotere projecten bouwen hierop voort met constrained random stimulus, scoreboards en het verzamelen van coverage, en de verificatie-inspanning is vaak even groot als of groter dan de ontwerpinspanning.
Veelgestelde vragen
Is een testbench synthetiseerbaar?
Nee. Een testbench wordt alleen voor simulatie geschreven, dus hij gebruikt vrij vertragingen, weergaveopdrachten, bestands-I/O en andere constructies die geen hardware kunnen worden.
Wat is de DUT in een testbench?
DUT staat voor design under test: de synthetiseerbare module die de testbench instantieert, met stimulus aanstuurt en controleert.
Wat is het verschil tussen == en === in een Verilog-testbench?
De operator == geeft X terug als een van beide operanden X- of Z-bits bevat, net als een hardwarecomparator. De operator === vergelijkt X en Z letterlijk en geeft altijd 0 of 1 terug, dus testbenches gebruiken hem om onbekende uitgangen te detecteren.