TKT-1212 Digitaalijärjestelmien toteutus. Lecture 7: VHDL Testbenches Ari Kulmala, Erno Salminen 2008

Similar documents
TKT-1212 Digitaalijärjestelmien toteutus

Lecture 8: VHDL Test Benches

TKT Logic synthesis

Lecture 9. VHDL, part IV. Hierarchical and parameterized design. Section 1 HIERARCHICAL DESIGN

Test Benches - Module 8

Test Bench. Top Level Model Test Bench MUT

VHDL Testbench. Test Bench Syntax. VHDL Testbench Tutorial 1. Contents

Summary of FPGA & VHDL

Using ModelSim to Simulate Logic Circuits in VHDL Designs. 1 Introduction. For Quartus II 13.0

Two HDLs used today VHDL. Why VHDL? Introduction to Structured VLSI Design

VHDL. VHDL History. Why VHDL? Introduction to Structured VLSI Design. Very High Speed Integrated Circuit (VHSIC) Hardware Description Language

OUTLINE SYSTEM-ON-CHIP DESIGN. GETTING STARTED WITH VHDL September 3, 2018 GAJSKI S Y-CHART (1983) TOP-DOWN DESIGN (1)

EEL 4783: Hardware/Software Co-design with FPGAs

Symbolically the RS-Latch that is being simulated is the one shown below, it s truth table is also given:

Definitions. Key Objectives

In our case Dr. Johnson is setting the best practices

VHDL simulation and synthesis

VHDL: A Crash Course

Symbolically a D-Latch can be represented as so, it s truth table is also given:

ECE 3401 Lecture 10. More on VHDL

Specifying time in VHDL

Assignment. Last time. Last time. ECE 4514 Digital Design II. Back to the big picture. Back to the big picture

VHDL: RTL Synthesis Basics. 1 of 59

ECE U530 Digital Hardware Synthesis. Course Accounts and Tools

ECE 545 Lecture 4. Simple Testbenches. George Mason University

CDA 4253 FPGA System Design VHDL Testbench Development. Hao Zheng Comp. Sci & Eng USF

Lecture 12 VHDL Synthesis

Designing with VHDL and FPGA

ECE Digital Design Laboratory. Lecture 3 Finite State Machines!

COE 405, Term 062. Design & Modeling of Digital Systems. HW# 1 Solution. Due date: Wednesday, March. 14

In the previous lecture, we examined how to analyse a FSM using state table, state diagram and waveforms. In this lecture we will learn how to design

In the previous lecture, we examined how to analyse a FSM using state table, state diagram and waveforms. In this lecture we will learn how to design

VHDL for Synthesis. Course Description. Course Duration. Goals

Control and Datapath 8

ENGR 5865 DIGITAL SYSTEMS

VHDL for Logic Synthesis

VHDL Simulation. Testbench Design

Lecture 4. VHDL Fundamentals. George Mason University

VHDL for Logic Synthesis

Outline. CPE/EE 422/522 Advanced Logic Design L05. Review: General Model of Moore Sequential Machine. Review: Mealy Sequential Networks.

VHDL Testbench Design. Textbook chapters 2.19, , 9.5

VHDL Essentials Simulation & Synthesis

Simulation with ModelSim Altera from Quartus II

The Optimization of a Design Using VHDL Concepts

Advanced module: Video en/decoder on Virtex 5

VHDL/Verilog Simulation. Testbench Design

5. VHDL - Introduction - 5. VHDL - Design flow - 5. VHDL - Entities and Architectures (1) - 5. VHDL - Entities and Architectures (2) -

Hardware Synthesis. References

Part 4: VHDL for sequential circuits. Introduction to Modeling and Verification of Digital Systems. Memory elements. Sequential circuits

University of Twente. VHDL tutorial For internal use only. Faculty of Electrical Engineering, Mathematics and Computer Science. E.

INTRODUCTION TO VHDL. Lecture 5 & 6 Dr. Tayab Din Memon Assistant Professor Department of Electronic Engineering, MUET

Constructing VHDL Models with CSA

Quartus Counter Example. Last updated 9/6/18

TKT-1212 Digitaalijärjestelmien toteutus

The block diagram representation is given below: The output equation of a 2x1 multiplexer is given below:

UNIT I Introduction to VHDL VHDL: - V -VHSIC, H - Hardware, D - Description, L Language Fundamental section of a basic VHDL code Library :

Midterm Exam Thursday, October 24, :00--2:15PM (75 minutes)

Introduction to VHDL. Yvonne Avilés Colaboration: Irvin Ortiz Flores Rapid System Prototyping Laboratory (RASP) University of Puerto Rico at Mayaguez

Simulation with ModelSim Altera from Quartus II

CprE 583 Reconfigurable Computing

Introduction to VHDL #3

EITF35 - Introduction to the Structured VLSI Design (Fall 2016) Interfacing Keyboard with FPGA Board. (FPGA Interfacing) Teacher: Dr.

Logic Verification 13-1

ECE 545 Lecture 6. Behavioral Modeling of Sequential-Circuit Building Blocks. George Mason University

MATLAB AND MODELSIM LINKING

Verilog HDL is one of the two most common Hardware Description Languages (HDL) used by integrated circuit (IC) designers. The other one is VHDL.

DIGITAL LOGIC DESIGN VHDL Coding for FPGAs Unit 6

Lecture 2 Hardware Description Language (HDL): VHSIC HDL (VHDL)

ECE 448 Lecture 4. Sequential-Circuit Building Blocks. Mixing Description Styles

Synthesis from VHDL. Krzysztof Kuchcinski Department of Computer Science Lund Institute of Technology Sweden

Introduction to VHDL. Main language concepts

Lecture 4. VHDL Fundamentals. Required reading. Example: NAND Gate. Design Entity. Example VHDL Code. Design Entity

ECEU530. Schedule. ECE U530 Digital Hardware Synthesis. Datapath for the Calculator (HW 5) HW 5 Datapath Entity

Sequential Logic - Module 5

EECS150 - Digital Design Lecture 7 - Computer Aided Design (CAD) - Part II (Logic Simulation) Finite State Machine Review

DIGITAL LOGIC WITH VHDL (Fall 2013) Unit 6

FSM Components. FSM Description. HDL Coding Methods. Chapter 7: HDL Coding Techniques

Introduction to VHDL #1

קורס VHDL for High Performance. VHDL

CCE 3202 Advanced Digital System Design

Advanced Training Course on FPGA Design and VHDL for Hardware Simulation and Synthesis. 26 October - 20 November, 2009

Lecture 7. Standard ICs FPGA (Field Programmable Gate Array) VHDL (Very-high-speed integrated circuits. Hardware Description Language)

Accelerate FPGA Prototyping with

Lecture 6. Advanced Testbenches. George Mason University

Document Version: 0.6 Document Date: 15 April 2011 Prepared by: Y. Ermoline for ATLAS Level-1Calorimeter Trigger

VHDL And Synthesis Review

310/ ICTP-INFN Advanced Tranining Course on FPGA and VHDL for Hardware Simulation and Synthesis 27 November - 22 December 2006

CPE 626 Advanced VLSI Design Lecture 6: VHDL Synthesis. Register File: An Example. Register File: An Example (cont d) Aleksandar Milenkovic

EENG 2910 Project III: Digital System Design. Due: 04/30/2014. Team Members: University of North Texas Department of Electrical Engineering

ECE 545 Lecture 7. Advanced Testbenches. George Mason University

EITF35: Introduction to Structured VLSI Design

Assignment 01 Computer Architecture Lab ECSE

Overview. Ram vs Register. Register File. Introduction to Structured VLSI Design. Recap Operator Sharing FSMD Counters.

The University of Alabama in Huntsville ECE Department CPE Midterm Exam Solution Spring 2016

Lab 3 Sequential Logic for Synthesis. FPGA Design Flow.

Chapter 6 Combinational-Circuit Building Blocks

C-Based Hardware Design

TSIU03, SYSTEM DESIGN LECTURE 2

Verilog for High Performance

Hardware Description Languages. Modeling Complex Systems

Transcription:

TKT-1212 Digitaalijärjestelmien toteutus Lecture 7: VHDL Testbenches Ari Kulmala, Erno Salminen 2008

Contents Purpose of test benches Structure of simple test bench Side note about delay modeling in VHDL Better test benches Separate, better reusable stimulus generation Separated sink for the response File handling for stimulus and response Example and conclusions

Introduction VHDL is not very flexible language for verification Verification is generally wanted at high level, but in VHDL that is not always possible In synchronous design, we verify the functionality at cycle-level Not detailed timing, which will be checked with static timing analysis tools Note that term testing is usually used for manufacturing test whereas verification ensures functional correctness (=e.g. testbenches). However, terms are often used interchangeably e.g. in this presentation E.g. DUT (design under test) should actually be DUV. 3

What Is The VHDL Test Bench (TB)? VHDL test bench (TB) is a piece of code meant to to verify the functional correctness of HDL model. The main objectives of TB is to: 1. Instantiate the design under test (DUT) 2. Generate stimulus waveforms for DUT 3. Generate reference outputs and compare them with the outputs of DUT 4. Automatically provide a pass or fail indication Test bench is a part of the circuits specification. Sometimes it s a good idea to design the test bench before the DUT Functional specification ambiguities found Forces to dig out the relevant information of the environment Different designers for DUT and its tb! 4

Stimulus and Response TB can generate the stimulus (input to DUT) in several ways: a) Algorithmically on-the-fly b) Read vectors stored as constants in an array c) Read vectors stored in a separate system file d) Read from C through Foreign Language Interface (FLI, Modelsim) The response (output from DUT) must be automatically checked. Expected response must be known exactly Response can be stored into file for further processing. Example: Stimulus can be generated with Matlab and TB feeds it into DUT. DUT generates the response and TB stores it into file. Result can be compared to Matlab simulations. In practice, this has to be automatic, not manual comparison! 5

Choosing test method clk signal A. Manual generate test with modelsim force command check the wave forms B. Automated test generation and response checking B is the only viable option This figure shows only 1/3 of signals 1/50 000 of time line This check should be repeated few times a day during development... 1 000 cycles 6

Test Bench Structures TB should be reusable without difficult modifications. Modular design The structure of the TB should be simple enough so that other people understand its behaviour. It has to be easy to run Not much dependencies on files or scripts Good test bench propagates all the generics and constants into DUT. Question: How to verify that the function of the test bench is correct? A: sanopa muuta kato 7

Simple Test Bench Only the DUT is instantiated into test bench. Stimulus is generated inside the test bench Not automatically handwritten to code trying to spot corner cases Poor reusability. Suitable only for very simple designs, if at all stimulus AVOID! 8

A Simple Test Bench (2) DUT: Synchronous adder, entity, architecture ENTITY tb_adder IS PORT ( a(2:0) clk : IN STD_LOGIC; rst_n : IN STD_LOGIC; b(2:0) a, b : IN UNSIGNED(2 DOWNTO 0); rst_n y : OUT UNSIGNED(2 DOWNTO 0)); clk END tb_adder; ARCHITECTURE RTL OF tb_adder IS BEGIN -- RTL PROCESS (clk, rst_n) BEGIN -- process IF rst_n = 0 THEN -- asynchronous reset (active low) y <= (OTHERS => 0 ); ELSIF clk EVENT AND clk = 1 THEN -- rising clock edge y <= a + b; END IF; END PROCESS; END RTL; y(2:0 ) 9

A Simple Test Bench (3) Test bench Entity: ENTITY simple_tb IS END simple_tb; Architecture: ARCHITECTURE stimulus OF simple_tb IS DUT: COMPONENT tb_adder PORT ( clk : IN STD_LOGIC; rst_n : IN STD_LOGIC; a, b : IN UNSIGNED(2 DOWNTO 0); y : OUT UNSIGNED(2 DOWNTO 0) ); END COMPONENT; 10

A Simple Test Bench (4) Clock period and connection signals: CONSTANT period : TIME := 50 ns; SIGNAL clk : STD_LOGIC := 0 ; SIGNAL rst_n : STD_LOGIC; SIGNAL a, b, y : unsigned(2 downto 0); Begin of the architecture and component instantiation: DUT : tb_adder PORT MAP ( clk => clk, rst_n => rst_n, a => a, b => b, y => y); Clock generation: generate_clock : PROCESS (clk) BEGIN -- process clk <= NOT clk AFTER period/2; END PROCESS; 11

A Simple Test Bench (5) Stimuli generation and the end of the architecture: rst_n <= 0, 1 AFTER 10 ns; a <= "000", "001" AFTER 225 ns, "010" AFTER 375 ns; b <= "000", "011" AFTER 225 ns, 010" AFTER 375 ns; end stimulus; -- ARCHITECTURE Configuration: CONFIGURATION cfg_simple_tb OF simple_tb IS FOR stimulus FOR DUT : tb_adder USE ENTITY work.tb_adder(rtl); END FOR; END FOR; END cfg_simple_tb; Not very comprehensive 12

A Simple Test Bench (6) Simulation: How to check correcteness? Take your eye into hand and watch. Not too convenient... You notice that is does something but validity is hard to ensure. 13

VHDL delay modeling Signal assignments can have delay (as in prev example) 1. Inertial delays Used for modeling propagation delay, or RC delay 1. after 2. reject-inertial Useful in modeling gate delays Glitches filtered 2. transport delay transmission lines testbench stimuli generation glitches remain 14

VHDL delay modeling (2) After 5 ns propagates signal change IF the signal value stays constant for > 5 ns, and change occurs 5 ns after the transition reject inertial propagates signal change if value is constant for > 3 ns and change occurs 5 ns after transition transport propagates the signal as is after 5 ns 15

VHDL delay modeling (3) 16 Be careful! Behavior will be strange if the edges of the clk and signal generated this way are aligned.

More elegant test benches

Test Bench with a Separate Source Source and DUT instantiated into TB. For designs with complex input and simple output. Source can be for instance an entity or a process. 18

A Test Bench with a Separate Source (2) Input stimuli for adder is generated in a separate entity counter. 19

A Test Bench with a Separate Source (3) Source, a clock-triggered up counter Entity of the source: ENTITY tb_counter IS PORT ( clk : IN STD_LOGIC; rst_n : IN STD_LOGIC; Y : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) ); END tb_counter; 20

A Test Bench with a Separate Source (4) Architecture of the source component: ARCHITECTURE RTL OF tb_counter IS SIGNAL Y_r : unsigned(2 downto 0) BEGIN -- RTL PROCESS (clk, rst_n) BEGIN -- process IF rst_n = 0 THEN -- asynchronous reset (active low) Y_r <= (OTHERS => 0 ); ELSIF clk EVENT AND clk = 1 THEN -- rising clock edge Y_r <= Y_r+1; END IF; END PROCESS; Y <= std_logic_vector(y_r); END RTL; Note: overflow not checked 21

A Test Bench with a Separate Source (5) Test bench: Architecture ARCHITECTURE separate_source OF source_tb IS Declare the components DUT and source COMPONENT tb_adder PORT ( clk : IN STD_LOGIC; rst_n : IN STD_LOGIC; a, b : IN UNSIGNED(2 DOWNTO 0); y : OUT UNSIGNED(2 DOWNTO 0) ); END COMPONENT; COMPONENT tb_counter PORT ( clk : IN STD_LOGIC; rst_n : IN STD_LOGIC; y : OUT UNSIGNED(2 DOWNTO 0) ); END COMPONENT; 22

A Test Bench with a Separate Source (6) Clock period and connection signals CONSTANT period : TIME := 50 ns; SIGNAL clk : STD_LOGIC := 0 ; -- init value allowed only in simulation! SIGNAL rst_n : STD_LOGIC; SIGNAL response_out, stim_a_in, stim_b_in : unsigned(2 downto 0); Port mappings of the DUT and the source DUT : tb_adder PORT MAP ( clk => clk, rst_n => rst_n, a => stim_a_in, b => stim_b_in, y => response_out ); i_source : tb_counter PORT MAP ( clk => clk, rst_n => rst_n, y => stim_a_in ); stim_b_in <= stim_a_in; -- simplication, generally should be different from stim_a_in 23

A Test Bench with a Separate Source (7) Clock and reset generate_clock : PROCESS (clk) BEGIN -- process clk <= NOT clk AFTER period/2; -- this style needs init value END PROCESS; rst_n <= 0, 1 AFTER 10 ns; END separate_source 24

A Test Bench with a Separate Source (8) Simulation: Overflow in adder, three bits unsigned value range 0..7 25

Response handling

Test Bench with a Separate Source and Sink Both the stimulus source and the sink are separate instances. Complex source and sink without response-source interaction. stimulus response 27

Smart Test Bench Circuit s response affects further stimulus. 28

Test Bench with Text-IO Stimulus for DUT is read from an input file and the data is modified in the source. The response modified in the sink is written in the output file. 29

A Test Bench with Text-IO (2) Test case: 30

A Test Bench with Text-IO (3) Test bench: Libraries, remember to declare the textio-library! library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use std.textio.all; use IEEE.std_logic_textio.all; 31

A Test Bench with Text-IO (4) Architecture ARCHITECTURE text_io OF source_tb IS DUT and the connection signals COMPONENT tb_adder PORT ( clk : IN STD_LOGIC; rst_n : IN STD_LOGIC; a, b : IN UNSIGNED(2 DOWNTO 0); y : OUT UNSIGNED(2 DOWNTO 0) ); END COMPONENT; CONSTANT period : TIME := 50 ns; SIGNAL clk : STD_LOGIC := 0 ; SIGNAL rst_n : STD_LOGIC; SIGNAL a, b, y : unsigned(2 downto 0); 32

A Test Bench with Text-IO (5) Port mapping DUT : tb_adder PORT MAP ( clk => clk, rst_n => rst_n, a => a, b => b, y => y); Clock and reset generate_clock : PROCESS (clk) BEGIN -- process clk <= NOT clk AFTER period/2; END PROCESS; rst_n <= 0, 1 AFTER 75 ns; Process process (clk, rst_x) 33

A Test Bench with Text-IO (6) Declaration of the input and output files FILE file_in : TEXT IS IN "datain.txt"; FILE file_out : TEXT IS OUT "dataout.txt"; File paths are relative to simulation directory (the one with modelsim.ini) Variables for one line of the input and output files VARIABLE line_in : LINE; VARIABLE line_out : LINE; Value of variable is updated immediately. Hence, the new value is visible on the same execution of the process (already on the next line) Variables for the value in one line VARIABLE input_tmp : INTEGER; VARIABLE output_tmp : INTEGER; 34

A Test Bench with Text-IO (7) Beginning of the process and reset Clock BEGIN -- process IF rst_n = 0 THEN -- asynchronous reset a <= (OTHERS => 0 ); b <= (OTHERS => 0 ); ELSIF clk EVENT AND clk = 1 THEN -- rising clock edge Read one line from the input file to the variable line_in and read the value in the line line_in to the variable input_tmp IF NOT (ENDFILE(file_in)) THEN READLINE(file_in, line_in); READ(line_in, input_tmp); 35

A Test Bench with Text-IO (8) input_tmp is fed to both inputs of the DUT a <= CONV_UNSIGNED(input_tmp, 3); b <= CONV_UNSIGNED(input_tmp, 3); The response of the DUT is converted to integer and fed to the variable output_tmp output_tmp := CONV_INTEGER(y); The variable output_tmp is written to the line line_out that is written to the file file_out WRITE (line_out, output_tmp); WRITELINE(file_out, line_out); At the end of the input file the note End of file! is given ELSE ASSERT FALSE REPORT "End of file!" SEVERITY NOTE; END IF; 36

A Test Bench with Text-IO (9) Input file provided to test bench Output file produced by the test bench: Two cycle latency: 1 cycle due to file read +1 cycle due to DUT 37

A Test Bench with Text-IO (10) Simulation: 38

Text-I/O types supported by default READ and WRITE procedures support Bit, bit_vector Boolean Character Integer Real String Time Source: textio_vhdl93 library, Altera Hint: std_logic_1164, numeric_std etc are all available in VHDL, you can always check those for reference. 39

The Simulation with A Golden Design For example, ensure that two models are equivalent. E.g. behav model for fast simulation and RTL model for efficient synthesis. 40

Complex Test Bench TB DUT Input File Stimulus generation Compare Results File dynamic part of TB Golden design Pass/fail indication static part of TB 41

Golden Design DUT is compared to the specification i.e. the golden design. Something that is agreed to be correct 42

Golden design testbench Often, a system is first modeled with software and then parts are hardware accelerated Software implementation serves as a golden reference E.g. Video encoder implemented with C, motion estimation accelerated Tends to be quite slow. Foreign language interface C motion estimation C Video encoder stimuli Read, convert, interface DUV Motion Est result Compare OK? VHDL TESTBENCH Feedback for the video encoder 43

Same Test Bench for Different Designs Architecture of the DUT can be changed Should always be the objective 44

Autonomous test bench Does not need input file stimulus Determines the right result on-the-fly Very good for checking if simple changes or optimizations broke the design Note that some (pseudo-)randomization on the stimuli must be done in order to make sure that the corner cases are covered Check the code, statement, and branch coverages! TB Stimulus configuration DUT Stimulus generation Result calculation Compare Pass/fail indication 45 static part of TB

Design Flow 46

Example and conclusions

Example: verifying an interconnection DUV, the interconnection Delivers data from a single source to destination so that 1. data remain in-order 2. data are error-free 3. with finite latency Note that the only the transferred data integrity is important, not what it represents The testbench can be deferred to a few assertions a) Data A arrives at destination b) Data B does not arrive before A, if A was sent before it c) Data does not change (or duplicate) When checking these assertions, you also implicitely verify the correctness of the interface! i.e. read-during-write, write to full buffer, write with an erroneous command etc. All of these can be fairly simply accomplished with an automatic test bench requiring no external files Separate the stimuli and verification 48

Initial values Hierarchical interconnection testbench Counter or PRNG Configuration Counter or PRNG Compare enable enable Protocol logic Protocol logic Sender Receiver Test Agent interconnect interconnect Sender configuration per test agent-basis Burst length (ie.sending several data in consecutive clock cycles) Idle times Destination Initial values: Seed for counter / LFSR Number of components Addresses of the components Sender and Receiver Counter or PRNG FOR EACH SOURCE AND/OR DESTINATION! (PRNG = pseudo-random number generator) 49 error

The testbench Expandable to very large configurations Test Agent Test Agent Test Agent Test Agent Test Agent Test Agent INTERCONNECTION Test Agent Test Agent Test Agent Test Agent Test Agent Test Agent 50

What is the interconnection? The interconnection topology does not matter since we did not take that into account in the assumptions, only the functionality of the interconnection a) Data A arrives at destination b) Data B does not arrive before A, if A was sent before it c) Data does not change (or duplicate) a)typical: Single shared bus b) Hierarchical octagon 51 Source Destination c) Mesh d) Butterfly

Autonomous and complex test benches Always a preferred choice Well designed, resusable testbench pays back Use modular design Input (stimuli) separated from output (check) blocks in code All the testbenches should be designed so that they automatically check for errors No manual comparison in any stage Code coverage must be high However, high code coverage does not imply that the TB is all-inclusive, but it is required for that! Autonomous test benches must include long runs and random patterns to make sure that corner cases are checked Designing the test benches in a synchronous manner makes sure that the delta delays do not mess things up Synchronous test bench also works as the real environment would More on the delta delay on next lecture about simulators 52

Example VHD: Traffic light test bench Statement, Branch, Condition and expression coverage 100% However, the test bench is not perfect! Example VHDL code shown (available at web page) General test bench form begin -- tb -- component instantiation DUV : traffic_light... input : process (clk, rst_n) begin -- process input... end process input; output: process (clk, rst_n) begin -- process output... end process output; Clock generation Reset generation End tb; 53

Synthesizable testbenches Synchronous, synthesizable test benches are a good practice if e.g. the design includes clock domain crossings Can be synthesized to a FPGA and tested in a real environment Run-time error checking facilities to a real product may be extracted from the test bench easily Then, assertion should be written this way: If (a > b) then assert false error error_out(0) <= 1 ; End if; Or one can make own assertions for simulation and synthesis, e.g. Assert_gen(cond, level, error_sig); In simulation, regular assertion, in synthesis, assigns to error_sig 54

General guidelines 55 Every entity you design has an own test bench. Automatic verification and result check Input generated internally or from file Output checked automatically The less external files we rely on, the easier is the usage (scripts) Somebody else may also be using your code! e.g. Vsim my_tb; run 10ms; tests ok Make verify Timeout counters detect if the design does not respond at all! Do not rely that the designer checks the waves

The end. Questions? 56