1 Introduction to VHDL part 1 Fall 08. 2 Preliminary Class web page egre365/index.html Syllabus Grades: –Quizzes.

Slides:



Advertisements
Similar presentations
Digital Design with VHDL Presented by: Amir Masoud Gharehbaghi
Advertisements

1 Lecture 13 VHDL 3/16/09. 2 VHDL VHDL is a hardware description language. The behavior of a digital system can be described (specified) by writing a.
History TTL-logic PAL (Programmable Array Logic)
Mridula Allani Fall 2010 (Refer to the comments if required) ELEC Fall 2010, Nov 21(Adopted from Profs. Nelson and Stroud)
VHDL ELEC 418 Advanced Digital Systems Dr. Ron Hayne Images Courtesy of Thomson Engineering.
Introduction to VHDL (Lecture #5) ECE 331 – Digital System Design The slides included herein were taken from the materials accompanying Fundamentals of.
Introduction to VHDL VHDL Tutorial R. E. Haskell and D. M. Hanna T1: Combinational Logic Circuits.
Introduction to VHDL CSCE 496/896: Embedded Systems Witawas Srisa-an.
ELEN 468 Lecture 191 ELEN 468 Advanced Logic Design Lecture 19 VHDL.
VHDL And Synthesis Review. VHDL In Detail Things that we will look at: –Port and Types –Arithmetic Operators –Design styles for Synthesis.
Programming in VHDL Using Processes. How Processes Run A process is either in suspend mode or is running. For a process to run, there has to be a change.
VHDL. What is VHDL? VHDL: VHSIC Hardware Description Language  VHSIC: Very High Speed Integrated Circuit 7/2/ R.H.Khade.
Introduction to VHDL (part 2)
ECE 332 Digital Electronics and Logic Design Lab Lab 5 VHDL Design Styles Testbenches.
1 Part I: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
A VHDL Tutorial ENG2410. ENG241/VHDL Tutorial2 Goals Introduce the students to the following: –VHDL as Hardware description language. –How to describe.
IAY 0600 Digital Systems Design
VHDL Introduction. V- VHSIC Very High Speed Integrated Circuit H- Hardware D- Description L- Language.
VHDL IE- CSE. What do you understand by VHDL??  VHDL stands for VHSIC (Very High Speed Integrated Circuits) Hardware Description Language.
RTL Hardware Design by P. Chu Chapter Basic VHDL program 2. Lexical elements and program format 3. Objects 4. Data type and operators RTL Hardware.
Basic Overview of VHDL Matthew Murach Slides Available at:
1 Introduction to VHDL Spring What is VHDL? VHDL can be uses to model and synthesise digital systems. VHDL = VHSIC Hardware Description Language.
Fall 2004EE 3563 Digital Systems Design EE 3563 VHDL – Basic Language Elements  Identifiers: –basic identifier: composed of a sequence of one or more.
Introduction to VHDL Spring EENG 2920 Digital Systems Design Introduction VHDL – VHSIC (Very high speed integrated circuit) Hardware Description.
Copyright(c) 1996 W. B. Ligon III1 Getting Started with VHDL VHDL code is composed of a number of entities Entities describe the interface of the component.
Fall 2004EE 3563 Digital Systems Design EE 3563 VHSIC Hardware Description Language  Required Reading: –These Slides –VHDL Tutorial  Very High Speed.
VHDL Very High Speed Integrated Circuit Hardware Description Language Shiraz University of shiraz spring 2011.
Electrical and Computer Engineering University of Cyprus LAB 1: VHDL.
(1) Basic Language Concepts © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.
VHDL Basics. VHDL BASICS 2 OUTLINE –Component model –Code model –Entity –Architecture –Identifiers and objects –Operations for relations VHDL ET062G &
EE3A1 Computer Hardware and Digital Design Lecture 2 Introduction to VHDL.
Introduction to VHDL Simulation … Synthesis …. The digital design process… Initial specification Block diagram Final product Circuit equations Logic design.
Lecture #7 Page 1 Lecture #7 Agenda 1.VHDL Data Types Announcements 1.n/a ECE 4110– Digital Logic Design.
Chapter 5 Introduction to VHDL. 2 Hardware Description Language A computer language used to design circuits with text-based descriptions of the circuits.
15-Dec-15EE5141 Chapter 4 Sequential Statements ä Variable assignment statement ä Signal assignment statement ä If statement ä Case statement ä Loop statement.
George Mason University Simple Testbenches ECE 545 Lecture 4.
1 Part III: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
BASIC VHDL LANGUAGE ELEMENTS Digital Design for Instrumentation with VHDL 1.
ECOM 4311—Digital System Design with VHDL
George Mason University ECE 448 – FPGA and ASIC Design with VHDL VHDL Coding for Synthesis ECE 448 Lecture 12.
VHDL Programming Fundamentals Presented By Dr. Pradyut Kumar Biswal Department of Electronics, IIIT Bhubaneswar.
George Mason University Behavioral Modeling of Sequential-Circuit Building Blocks ECE 545 Lecture 8.
1 Introduction to Engineering Spring 2007 Lecture 18: Digital Tools 2.
An Introduction to V.H.D.L.. Need of a Compiler… main( ) { int x=10,y=20,z; z = x + y ; printf ( “ %d “, z ); getch( ) ; } What’s That ? Give me only.
IAY 0600 Digital Systems Design
Basic Language Concepts
Subject Name: FUNDAMENTALS OF HDL Subject Code: 10EC45
Design Entry: Schematic Capture and VHDL
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
ECE 4110–5110 Digital System Design
ECE 4110–5110 Digital System Design
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
CHAPTER 10 Introduction to VHDL
CHAPTER 17 VHDL FOR SEQUENTIAL LOGIC
VHDL VHSIC Hardware Description Language VHSIC
RTL Style در RTL مدار ترتيبي به دو بخش (تركيبي و عناصر حافظه) تقسيم مي شود. مي توان براي هر بخش يك پروسس نوشت يا براي هر دو فقط يك پروسس نوشت. مرتضي صاحب.
Data Flow Modeling of Combinational Logic
VHDL (VHSIC Hardware Description Language)
IAS 0600 Digital Systems Design
CPE 528: Lecture #5 Department of Electrical and Computer Engineering University of Alabama in Huntsville.
Introduction to VHDL part 1
ECE 448 Lecture 3 Combinational-Circuit Building Blocks Data Flow Modeling of Combinational Logic ECE 448 – FPGA and ASIC Design with VHDL.
Data Flow Description of Combinational-Circuit Building Blocks
IAS 0600 Digital Systems Design
Data Flow Description of Combinational-Circuit Building Blocks
ECE 545 Lecture 5 Simple Testbenches.
Sequntial-Circuit Building Blocks
EEL4712 Digital Design (VHDL Tutorial).
Presentation transcript:

1 Introduction to VHDL part 1 Fall 08

2 Preliminary Class web page egre365/index.html Syllabus Grades: –Quizzes (2)40% –Homework10% –Laboratory10% –Design Project15% –Final Exam25% Text book The Student’s Guide to VHDL. –This will be used primarily as a reference.

3 What is VHDL? We will use VHDL to model digital systems. VHDL = VHSIC Hardware Description Language –VHSIC = Very High Speed Integrated Circuit Developed in 1980’s by DOD. Veralog is an older hardware description language. –Some (for example ASIC designers) prefer Veralog. ANSI/IEEE Std is the version we will use. –ANSI/IEEE Std is the newest version. VHDL is a very complex language. A system can be described and simulated using VHDL. VHDL descriptions can be synthesized and implemented in programmable logic. –Synthesis tools can accept a only subset of VHDL.

4 VHDL Primarily for modeling digital systems. –Lesser extent analog –We will consider only digital systems Reasons for modeling –Specify requirements –Simulation, testing, verification –Synthesis Advantage –Increase reliability –Minimize cost and design time –Increase flexibility and ease with which a system can be modified. –Avoid design errors through use of simulation. Problem –We model our conception of the system. –May not accurately reflect reality.

5 A VHDL program library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ABorC is port (A : in std_logic; B : in std_logic; C : in std_logic; F : out std_logic); end ABorC; architecture arch of ABorC is signal X : std_logic; begin X <= A and B after 1 ns; F <= X or C after 1 ns; end;

6 Types chapter 2 The concept of type is important and fundamental when describing data in VHDL. The type of a data object defines the set of values that an object can assume, as well as the set of operations that can be performed on those values. –For example data object of type bit can assume a value of either ‘0’ or ‘1’, and can support operators such as “and”, “or”, “xor”, “nand”, etc. Each object in VHDL has to be of some type. VHDL is a strongly typed language. Scalar data types consists of single, indivisible values. Besides the usual types such as integer and real, VHDL also provides other types such as time and bit. User defined types are frequently employed. We will make extensive use of standard libraries that define special types such as stdlogic. –We will use stdlogic in place of bit. Stdlogic can assume more values that 0 and 1. For example high impedance and don’t care values.

7 VHDL type classification See SG p 51, DG p ns “ ” ‘1’ 125 FALSE ‘A’

8 Operations that can be performed on type integer. See SG p 36, DG p 35 Use parentheses to force desired Precedence.

9 Operations on type Boolean and type Bit. See p46 Note: For type bit replace false with ‘0’ and true with ‘1’. Not legal Legal

10 Constants, variables, and signals An object is a named item in a VHDL model that has a value of a specific type. There are four classes of objects: constants, variables, signals, and files. The use of constants and variables in VHDL is similar to what you are already familiar with from other programming languages. The idea of a signal is a new concept required because in VHDL we are modeling electrical (digital) systems. –Signals usually represent voltages on wires. –But you can also use a signal in place of a variable. –Sometimes it may not matter if you use a signal or a variable. –Other times there may be subtle reasons for using one over the other. –Initially you may tend to be confused by the distinction between signals and variables, but this will be made clear later. We will postpone the discussion of files till later. Objects must be declared prior to use.

11 Constants constant CONST_NAME: := ; -- Examples of Declaration of Constants: constant GO: BOOLEAN := TRUE; constant Max: INTEGER := 31; constant HexMax: INTEGER := 16#FF#; -- hex (base 16) integer constant ONE: BIT := '1'; constant S0: BIT_VECTOR (3 downto 0) := "0000"; constant S1: bit_vector(15 downto 0) := X"AB3F“; -- hex string constant HiZ: STD_LOGIC := 'Z'; -- Here Z is high impedance. constant Ready: STD_LOGIC_VECTOR (3 downto 0) := "0-0-"; -- 0’s & don’t cares Note: VHDL is not case sensitive. -- is used for comments. BOOLEAN, INTEGER, BIT, etc are examples of predefined VHDL types. –VHDL is a strongly typed language. –Cannot for example directly assign a bit or std_logic value to an integer type.

12 Variables VAR_NAME := ; -- example Count := 10; Vbit := '0'; Declaration variable VAR_NAME: ; -- example: variable Test: BOOLEAN; variable Count: INTEGER range 0 to 31 := 15; -- Set initial value to 15. variable vBIT: BIT; variable VAR: BIT_VECTOR (3 downto 0); variable VAR_X: STD_LOGIC := ‘0’; -- Set initial value to ‘0’. variable VAR_Y: STD_LOGIC_VECTOR (0 to 3);

13 Signals SIG_NAME ; -- Examples BitX <= ‘1’; Declaration signal SIG_NAME: ; -- example: signal Flag: BOOLEAN := TRUE; -- TRUE is the initial vlaue signal intX: INTEGER range 0 to 31; signal BitX: BIT := ‘1’; signal Control_Bus: BIT_VECTOR (3 downto 0); signal X: STD_LOGIC; signal Y: STD_LOGIC_VECTOR (0 to 3) := “0000”;

14 Signals Events, Propagation Delay, and Concurrency Signals –Signals of type bit take on values of 0 and 1. –Digital components (gates, flip-flops, etc.) respond to input signals to produce output signals. –A signal change is called an event. –The effect of an event is delayed by the propagation delay through the component. VHDL allows for associating a delay with a signal. Z <= X and Y after 2 ns; –Signals may propagate through several components concurrently. Z <= X and Y after 2 ns; V <= (Z xor not W) nand X after 3 ns; W <= X or Y after 1 ns; –VHDL is an event driven concurrent programming language. Statements don’t necessarly execute sequentially. This makes VHDL “hard.” An event on X may cause an event on some or all of the signals Z, V, and W.

15 VHDL example EX 1 --EX1.vhd ENTITY tb is END tb; ARCHITECTURE test OF tb IS signal X : BIT; BEGIN X <= not X after 10 ns; END test;

16 --EX2.vhd ENTITY tb is END tb; ARCHITECTURE test OF tb IS signal X, Y : BIT; BEGIN X <= not X after 10 ns; Y <= '1' after 5 ns, '0' after 12 ns, '1' after 25 ns; END test;

17 --EX3.vhd ENTITY tb is END tb; ARCHITECTURE test OF tb IS signal X, Y : BIT; signal Z, Z1, Z2: BIT; BEGIN X <= not X after 10 ns; Y <= '1' after 5 ns, '0' after 12 ns, '1' after 25 ns; Z <= X or Y after 1 ns; Z1 <= (X and Y) xor Z; Z2 <= Z xor (X and Y); END test;

18 Another VHDL example EX4 -- EX4 - Signal example -- File: ex4.vhd entity ex4 is end entity ex4; architecture ex_arc of ex4 is signal X: BIT; signal Y: BIT; signal Z, V, W: BIT; begin -- concurrent signals assignments X <= not X after 10 ns; Y <= not Y after 25 ns; Z <= X and Y after 2 ns; V <= (Z xor not W) nand X after 3 ns; W <= X or Y after 1 ns; end architecture ex_arc;

19 X <= not X after 10 ns; Y <= not Y after 25 ns; Z <= X and Y after 2 ns; V <= (Z xor not W) nand X after 3 ns; W <= X or Y after 1 ns;

20 std_logic_1164 multi-value logic system TYPE std_ulogic IS ( 'U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-' -- Don't care );

21 resolution function – resolves two drives for a single signal. Std_logic has a built in resolution function. CONSTANT resolution_table : stdlogic_table := ( | U X 0 1 Z W L H - | | ( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X | ( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 | ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 | ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z | ( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W | ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L | ( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H | ( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ) -- | - | ); S <= ‘1’; S <= ‘0’; Don’t drive signal from multiple sources! ‘X’ indicates an unknown value. This can be caused by the resolution function as shown below.

22 Why have ‘U’ in std_logic types? Any uninitialized type assumes the left most value of that type. –TYPE std_logic IS ( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-' ); –TYPE BIT is (‘0’, ‘1’); What is the initial value? variable vBIT: BIT; variable VAR_X: STD_LOGIC := ‘0’; signal BitX: BIT := ‘1’; signal X: STD_LOGIC; Signal N: integer;

23 Recall EX2: Let’s use std_logic in place of bit. --EX2.vhd ENTITY tb is END tb; ARCHITECTURE test OF tb IS signal X, Y : BIT; BEGIN X <= not X after 10 ns; Y <= '1' after 5 ns, '0' after 12 ns, '1' after 25 ns; END test;

24 --EX2.vhd Using STD_LOGIC LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; ENTITY tb is END tb; ARCHITECTURE test OF tb IS signal X, Y : STD_LOGIC; BEGIN X <= not X after 10 ns; Y <= '1' after 5 ns, '0' after 12 ns, '1' after 25 ns; END test;

25 What happened? In VHDL uninitialized signals and variables assume the left most value of the type. –STD_LOGIC initializes to “U”. X <= not X after 10 ns; Y <= '1' after 15 ns, '0' after 25 ns; -- truth table for "not" function CONSTANT not_table: stdlogic_1d := | U X 0 1 Z W L H - | ( 'U', 'X', '1', '0', 'X', 'X', '1', '0', 'X' );

26 --EX2.vhd Using STD_LOGIC -- with initialization LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; ENTITY tb is END tb; ARCHITECTURE test OF tb IS signal X: STD_Logic := '1'; Signal Y : STD_LOGIC := '0'; BEGIN X <= not X after 10 ns; Y <= '1' after 5 ns, '0' after 12 ns, '1' after 25 ns; END test;

27 LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY tb is END tb; ARCHITECTURE test OF tb IS constant ALL_ONES: std_logic_vector(3 downto 0) := X"F"; constant Some_Ones: std_logic_vector(3 downto 0) := X"A"; SIGNAL Q : std_logic_vector(3 downto 0) := (others => '0'); --"0000"; signal X : std_logic_vector(3 downto 0); BEGIN Q <= Q(2 downto 0) & not Q(3) after 5 ns; X <= ALL_ONES after 10 ns, Some_Ones after 15 ns, "0000" after 20 ns; END test; A more complicated example using IEEE.STD_LOGIC_ARITH

28 Same example using numeric package. LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use ieee.numeric_std.all; ENTITY tb is END tb; ARCHITECTURE test OF tb IS constant ALL_ONES: unsigned(3 downto 0) := X"F"; constant Some_Ones: unsigned(3 downto 0) := X"A"; SIGNAL Q : unsigned(3 downto 0) := (others => '0'); --"0000"; signal X : unsigned(3 downto 0); BEGIN Q <= Q(2 downto 0) & not Q(3) after 5 ns; X <= ALL_ONES after 10 ns, Some_Ones after 15 ns, "0000" after 20 ns; END test; The numeric package defines unsigned to be a std_locic_vector that is treated as an unsigned vector. (You can also have a signed vector).

29 And Or gate in VHDL example library IEEE;use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity ABorC is port (A : in std_logic; B : in std_logic; C : in std_logic; F : out std_logic); end ABorC; architecture arch of ABorC is signal X : std_logic; begin X <= A and B after 1 ns; F <= X or C after 1 ns; end; Instead of the numeric package we will normally use the arithmetic package and the associated unsigned package. But the numeric package would work equally well.

30 Test bench for and or example LIBRARY IEEE;USE work.all; USE IEEE.Std_Logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY tb IS END ENTITY tb; Architecture TEST of tb is SIGNAL X: std_logic_vector (2 downto 0) := "000"; SIGNAL Y: std_logic;begin U1: ENTITY work.ABorC(arch) PORT MAP(A => X(2), B => X(1), C => X(0), F => Y); X <= X + 1 after 10 ns; end test;

31 U1: entity work.or3 port map (A => AB, B => ACin, C => BCin, F => Cout); U2: entity work.and2 port map (A => A, B => B, F => AB); U3: entity work.and2 port map (A => B, B => Cin, F => BCin); U4: entity work.and2 port map (A => A, B => Cin, F => ACin); U5: entity work.xor2 port map (A, B, AxorB); U6: entity work.xor2 port map (Cin, AxorB, S);

32 VHDL design units Configuration Package Package Body Entity –Describes Interface Describes how the circuit appears form the outside. Similar to a schematic symbol. Architecture –Specifies function Describes how the circuit does what it does. –RTL –Behavioral –Structural Initially we will focus on the Entity and Architecture. –Both are always necessary the others are optional. See DG chapter 5

33 Process The process is a fundamental concept in VHDL Processes are contained within an architecture. –An architecture may contain several processes. Processes execute concurrently (at the same time) –Code within a process execute sequentially. (See chapter 3.) Combinational circuits can be modeled without using process. Sequential circuits need processes. Processes provide powerful statements not available outside processes. Example process (A, B) F <= A xor B; end process; Sensitivity list

34 Process Process statements occur within an architecture. The syntax for a process is: LABEL1: -- optional label process (signal_name, …) is -- declarations begin -- sequential statements end process LABEL1;

35 Process example Without process statements architecture ex_arc of ex4 is signal X: BIT; signal Y: BIT; signal Z, V, W: BIT; Begin -- concurrent signals assignments X <= not X after 10 ns; Y <= not Y after 25 ns; Z <= X and Y after 2 ns; V <= (Z xor not W) nand X after 3 ns; W <= X or Y after 1 ns; end architecture ex_arc; With process statements Process(X) begin X <= not X after 10 ns; End process; P2: process(y) begin Y <= not Y after 25 ns; End process P2; P3: Process(X,Y,Z,W) begin Z <= X and Y after 2 ns; V <= (Z xor not W) nand X after 3 ns; End process P3; P4: process(X,Y) begin W <= X or Y after 1 ns; End process P4;

36 A VHDL example illustrating that signals are updated when the process suspends. ARCHITECTURE test OF tb IS signal CLK: std_logic := '0'; -- Initial vlaue of '0' signal X: INTEGER := 0; -- Initial value of 0 BEGIN -- Make the signal CLK changes every 10 nsec. CLK <= not CLK after 10 ns; -- CLK changes every 10 nsec -- States within a process execute sequentially -- All process are activated at time t = The process below is also activated when CLK changes. process (CLK) variable I: INTEGER := 0; -- Initial value of 0 begin I := I + 3; X <= X + 3; I := I + 2; X <= X + 2; I := I + 1; X <= X + 1; end process; END test; Signals are not updated until the process suspends. The process is activated at time t = 0 and when signal CLK changes.

37 A VHDL example continued CLK <= not CLK after 10 ns; process (CLK) variable I: INTEGER := 0; -- Initial value of 0 begin -- signal X is an integer with initial value of 0 I := I + 3; X <= X + 3; I := I + 2; X <= X + 2; I := I + 1; X <= X + 1; end process; END test;

38 Example mod 10 counter LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use ieee.numeric_std.all; ENTITY ExMod10 IS PORT ( CLK: in std_logic; Count: BUFFER integer range 0 to 9 ); END ENTITY ExMod10; Architecture Example of ExMod10 is begin DoCount: process(clk) is begin if falling_edge(clk) then if count < 9 then count <= count+1; else count <= 0; end if; end process DoCount; end architecture Example;

39 LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use IEEE.numeric_std.all; ENTITY tb IS END ENTITY tb; Architecture TEST of tb is SIGNAL C: std_logic := '0'; SIGNAL CNT: integer range 0 to 9; COMPONENT ExMod10 PORT ( CLK: in std_logic; Count: BUFFER integer range 0 to 9 ); END COMPONENT ExMod10; begin DUT: ExMod10 PORT MAP ( CLK => C, -- Clock at 100 MHz Count => CNT ); C <= not C after 5 ns; end test; VHDL 87 Test bench

40 Alternative simpler test bench possible with VHDL 93 LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use IEEE.numeric_std.all; ENTITY tb IS END ENTITY tb; Architecture TEST of tb is SIGNAL C: std_logic := '0'; SIGNAL CNT: integer range 0 to 9; begin DUT: ENTITY ExMod10 PORT MAP ( CLK => C, -- Clock at 100 MHz Count => CNT ); C <= not C after 5 ns; --end architecture TEST; end test;

41 An alternative architecture LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use ieee.numeric_std.all; ENTITY ExMod10 IS PORT ( CLK: in std_logic; Count: BUFFER integer range 0 to 9 ); END ENTITY ExMod10; Architecture Example of ExMod10 is begin DoCount: process(clk) is begin if falling_edge(clk) then -- if count < 9 then count <= count+1; -- else -- count <= 0; -- end if; end if; end process DoCount; end architecture Example;

42 Using OUT instead of BUFFER Note: Here we are using IEEE.STD_LOGIC_ARITH.ALL LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ExMod10 IS PORT ( CLK: in std_logic; Count: OUT integer range 0 to 9 ); END ENTITY ExMod10;

43 Using a temporary signal CNT. Architecture SIG of ExMod10 is signal CNT: INTEGER RANGE 0 TO 9; begin DoCount: process(clk) is begin if CLK'EVENT AND CLK = '0' then CNT <= (CNT+1) mod 10; end if; end process; Count <= CNT; end architecture SIG;

44 Alternative architecture using a temporary variable. Architecture VAR of ExMod10 is begin DoCount: process(clk) is variable vcount: integer range 0 to 9; begin if clk’event and clk = ‘0’ then vcount := (vcount + 1) mod 10; count <= vcount; end if; end process DoCount; end architecture VAR;

45 A test bench LIBRARY IEEE; USE work.all; USE IEEE.Std_Logic_1164.all; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY tb IS END ENTITY tb; Architecture TEST of tb is SIGNAL C: std_logic := '0'; SIGNAL Count_sig: integer range 0 to 9; signal Count_var: integer range 0 to 9; begin DUT: ENTITY work.ExMod10(SIG) PORT MAP ( CLK => C, -- Clock at 100 MHz Count => Count_sig ); DUT2: ENTITY work.ExMod10(VAR) PORT MAP ( CLK => C, -- Clock at 100 MHz Count => Count_var ); C <= not C after 5 ns; --end architecture TEST; end test; Must specify the particular architecture.