vhdl –test benches

24
VHDL – Test benches

Upload: others

Post on 06-Oct-2021

11 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: VHDL –Test benches

VHDL – Test benches

Page 2: VHDL –Test benches

How to simulate VHDL code• Use a simulation tool like e.g. ModelSim• Test bench to apply stimuli/test inputs to the VHDL code• Visual inspection through graphical output (waveform)• Self checking test benches (add code to check and verify result)

Page 3: VHDL –Test benches

Test benches• Basic concept: Add a stimuli (input) to the design

under test and observe the outputs to verify correct behavior/functionality

• A characteristic of VHDL: test bench can be written in same language as the design to be verified.

• A VHDL TB can of course also contain errors introduced by the TB designer!

• Test benches are not to be synthesized, and can therefore use the entire VHDL language (e.g. after, wait for, write etc.)

• For proper simulation of FPGAs:– often more lines of verification code than for design source– can be more time consuming than design– Yet, often less effort spent on verification strategies and

documentation!

Partly adopted from: FPGA development best practice course by Espen Tallaksen, www.bitvis.no

Page 4: VHDL –Test benches

The most basic test bench ”template”library ieee;use ieee.std_logic_1164.all;

entity test_UUT is -- empty entityend test_UUT

architecture testbenk_arch of test_UUT isComponent UUT:port(

…………………);end component;signal ………. signal ………. :=’0’; -- start value for inputs beginU1: UUTport map (………..);

STIMULI:processbegin…….wait;end process;end architecture;

(UUT = Unit Under Test)

Component declaration

Defines a signal for each port in the UUT

Component instantiation

Test sequencer to provide stimuli

Only test sequencer

Page 5: VHDL –Test benches

Example of input signal/stimuli

Remember to initialize clkotherwise std_logic_vector à U

Alternatively

Page 6: VHDL –Test benches

Example design Basic test bench

Page 7: VHDL –Test benches

Test benches• Different levels / complexity– Generate input stimuli àmanual verification of output– Generate input stimuli à automatic verification of output– Use of verification components (advanced)

• Objective when writing a test bench– Verify design requirements for device under test– Sufficient functional coverage with minimum effort– Simple to write, understand and modify (by anyone)

• Modularity

– Simple to execute, debug and understand reports • Scripting, and well structured and meaningful log and alert functionality

Partly adopted from: FPGA development best practice course by Espen Tallaksen, www.bitvis.no

Page 8: VHDL –Test benches

Test bench concepts

General needed features:• Logging mechanism

– informative, no attention required, progress reporting• Alert handling

– Messages that need attention (severity levels)• Verbosity control

– Enable or disable logging output• String handling and randomisation• Checks and awaits

Project specific • test sequencer• support procedures/processes

Page 9: VHDL –Test benches

Basic test bench architecture

• Minimum required support– Logging– Alert handing & reports

• Additional support– Continuous actions not handled by sequencer (e.g. clock generator)

Partly adopted from: FPGA development best practice course by Espen Tallaksen, www.bitvis.no

Test sequencer

DUTSupport

Procedures & functions

Supportprocesses

Page 10: VHDL –Test benches

Example of basic check functionality

When the specified condition is false, the ASSERT statement triggers and the report is issued

label: assert boolean_condition[ report string ] [ severity name ];

Page 11: VHDL –Test benches

• Used to print messages at the simulation console when specified runtime conditions are met

• Defines one of four severity levels– Note: information about condition to the user– Warning: alerts conditions that are not expected but not fatal– Error: alert conditions that will cause the model to work incorrectly– Failure: alert conditions that are fatal

Will abort simulation

Assert statement example

Page 12: VHDL –Test benches

Attributes• Attributes extract additional information about and object

(signal, variable , type, component)

• ‘image(x) and ‘value(s) simplifies reporting through text I/O

Now: predefined function that returns simulation time

Page 13: VHDL –Test benches

Predefine attributes

NOT all supported by synthesis tools

Page 14: VHDL –Test benches

Can for example be to check for setup violation

Attributes

clk

A5 ns

Page 15: VHDL –Test benches

TB support procedures (Ex. of check)Example of checking for an expected value of an object of type unsigned

Page 16: VHDL –Test benches

TEXTIO

• Provides declarations and subprograms for handling text (ASCII) files in VHDL (e.g. for logging)

• Three types of basic operation– Declaration of a file and its type– Opening and closing a file of a specified type– Reading and writing a file

• Data types to assist in text handling– Line : text buffer used to interface VHDL I/O and the file– File of type text: may only contains ASCII characters

Page 17: VHDL –Test benches

File I/O

Alternative: Implicit file open

File_open()File_close()

File for storing ASCII

Declaration and open file

Writing

read_mode / append_mode

Page 18: VHDL –Test benches

Example logging procedure

VHDL is strongly typed:Need to specify type of Characters enclosed in “ ”.

write is overloaded

Page 19: VHDL –Test benches

Self-testing test benches• Contains a number of support procedures/process to improve efficiency

of test bench and perform automatic checks of relevant signals

• Alerts and relevant results should be clearly indicated

• Status / summary should be reported at the end

• Structured and readability: use procedures to hide details

• Visual inspection of timing diagrams often not needed (saves time)

• Other people can more easily maintain the code

• However, it is a demanding task to make a self-testing test bench!– If possible, write for reuse of procedures

• If available, consider using already available libraries

Write to file

Page 20: VHDL –Test benches

UVVM utility library

• An open source library – available to anyone– More info at:

• https://uvvm.org– Can be downloaded from:

• https://github.com/UVVM

– Easy to integrate into your project

• Supports the most fundamental functionality of any structured VHDL test bench– Sufficient for simple test benches– Platform for more advanced TBs

• Purpose: standarize and qualify a set of good procedures => improve quality and efficiency

Page 21: VHDL –Test benches

Some available and helpful procedures • report_global_ctrl()• report_msg_id_panel()• enable_log_msg()• disable_log_msg()• increment_expected_alerts()• log()• check_value()• check_value_in_range()• check_stable()• alert()• report_alert_counters()• to_string()• await_value()• await_change()• random()

https://github.com/UVVM/UVVM/blob/master/uvvm_util/doc/util_quick_ref.pdf

Page 22: VHDL –Test benches

Basic example UVVM Basic test bench

Page 23: VHDL –Test benches

Output when using UVVM

Page 24: VHDL –Test benches

Output when using UVVM