Design Organization and Parameterization Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.

Slides:



Advertisements
Similar presentations
COE 405 Structural Specification of Hardware Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd University of Petroleum & Minerals Dr. Aiman.
Advertisements

Structural Specification of Hardware Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
VHDL Programming in CprE 381 Zhao Zhang CprE 381, Fall 2013 Iowa State University Last update: 9/15/2013.
Sequential Statements
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)
© Dr. Alaaeldin Amin 1 Hardware Modeling & Synthesis Using VHDL Very High Speed Integrated Circuits Start Of VHDL Development First Publication.
COE 561 Digital System Design & Synthesis Introduction to VHDL Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd University of Petroleum.
Introduction to VHDL CSCE 496/896: Embedded Systems Witawas Srisa-an.
ELEN 468 Lecture 191 ELEN 468 Advanced Logic Design Lecture 19 VHDL.
VHDL. What is VHDL? VHDL: VHSIC Hardware Description Language  VHSIC: Very High Speed Integrated Circuit 7/2/ R.H.Khade.
COE 405 Design Organization and Parameterization Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd University of Petroleum & Minerals Dr.
1 Comparators: Procedures Discussion D9.2 Example 22.
1 Lecture 11 Chap 13: Test Benches Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Introduction to VHDL (part 2)
1 H ardware D escription L anguages Basic Language Concepts.
Resolved Signals Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
1 Part I: VHDL CODING. 2 Design StructureData TypesOperators and AttributesConcurrent DesignSequential DesignSignals and VariablesState Machines A VHDL.
Introduction to VHDL Arab Academy for Science, Technology & Maritime Transport Computer Engineering Department Magdy Saeb, Ph.D.
Hardware Design Environment Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
A VHDL Tutorial ENG2410. ENG241/VHDL Tutorial2 Goals Introduce the students to the following: –VHDL as Hardware description language. –How to describe.
Dataflow Descriptions Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
ENG6090 RCS1 ENG6090 Reconfigurable Computing Systems Hardware Description Languages Part 5: Modeling Structure.
VHDL Introduction. V- VHSIC Very High Speed Integrated Circuit H- Hardware D- Description L- Language.
7/10/2007DSD,USIT,GGSIPU1 Basic concept of Sequential Design.
Capt Michael Tanner Room 2F46A
1/8/ L7 Project Step 3Copyright Joanne DeGroat, ECE, OSU1 Project Step 4 Step 1 in transitioning to behavioral modeling. We will wire behavioral.
Language Concepts Ver 1.1, Copyright 1997 TS, Inc. VHDL L a n g u a g e C o n c e p t s Page 1.
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.
1 Introduction to VHDL Spring What is VHDL? VHDL can be uses to model and synthesise digital systems. VHDL = VHSIC Hardware Description Language.
Basic Concepts in VHDL Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Packages and Use Clauses Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
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.
Lecture 5 Chap 6 Package std_logic_arith Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
VHDL Very High Speed Integrated Circuit Hardware Description Language Shiraz University of shiraz spring 2011.
Design Methodology Based on VHDL Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Electrical and Computer Engineering University of Cyprus LAB 1: VHDL.
M. Balakrishnan Dept of Computer Science & Engg. I.I.T. Delhi
(1) Basic Language Concepts © Sudhakar Yalamanchili, Georgia Institute of Technology, 2006.
L13 – VHDL Language Elements. VHDL Language Elements  Elements needed for FPGA design Types  Basic Types  Resolved Types – special attributes of resolved.
Aliases Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Lecture 9 Chap 11: Subprograms Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University.
Chapter 5 Introduction to VHDL. 2 Hardware Description Language A computer language used to design circuits with text-based descriptions of the circuits.
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.
VHDL Discussion Subprograms IAY 0600 Digital Systems Design Alexander Sudnitson Tallinn University of Technology 1.
Signals & Data-typesVer 1.1, Copyright 1997, TS, Inc. VHDL S i g n a l s & D a t a T y p e s Page 1.
COE 202 Introduction to Verilog Computer Engineering Department College of Computer Sciences and Engineering King Fahd University of Petroleum and Minerals.
Modern Digital System Design Using VHDL: A Practical Introduction Subprograms & Packages Dr. Aiman H. El-Maleh Computer Engineering Department King Fahd.
EGRE 6311 LHO 04 - Subprograms, Packages, and Libraries EGRE 631 1/26/09.
Chapter 8. Additional Topics in VHDL 권동혁.
1 Introduction to Engineering Spring 2007 Lecture 18: Digital Tools 2.
1 Introduction to Engineering Spring 2007 Lecture 19: Digital Tools 3.
Basic Language Concepts
Subject Name: FUNDAMENTALS OF HDL Subject Code: 10EC45
Module Goals Introduce structural VHDL constructs Use of components
Behavioral Modeling in Verilog
HDL Programming Fundamentals
CPE 528: Lecture #4 Department of Electrical and Computer Engineering University of Alabama in Huntsville.
VHDL Discussion Subprograms
CPE 528: Lecture #5 Department of Electrical and Computer Engineering University of Alabama in Huntsville.
CPE 528: Lecture #3 Department of Electrical and Computer Engineering University of Alabama in Huntsville.
VHDL Discussion Subprograms
Hardware Modeling & Synthesis Using VHDL
Copyright Joanne DeGroat, ECE, OSU
Single bit comparator Single bit comparator 4/10/2007 DSD,USIT,GGSIPU
EEL4712 Digital Design (VHDL Tutorial).
Presentation transcript:

Design Organization and Parameterization Instructors: Fu-Chiung Cheng ( 鄭福炯 ) Associate Professor Computer Science & Engineering Tatung University

Outline Definition and usage of subprograms Packaging parts and utilities Design Parameterization Design Configuration Design Libraries

Design Organization and Parameterization Functional design of a digital system is often done independently of the physical characteristics or technology in which design is being implemented Based on technology, power consumption, speed, and temperature range, components are categorized into various libraries from which designs choose specific components To support such design environments, VHDL provides language constructs for parameterizing and customizing designs and for definition and usage of libraries.

Design Organization and Parameterization definition and usage of libraries: – Library – Use clause – Package customizing designs – Configuration declarations parameterizing designs – By use of generic parameters, VHDL allows a design to be parameterized such that the specific timing, number of bits or even the wiring is determined when the design is configured

Chapter focuses Subprograms: functions and procedures Library packages Design parameterization Design configuration

Definition and Usage of Subprograms Single bit comparator GT Equation a_gt_b = a. gt + b'. gt + a. b' EQ Equation a_eq_b = a. b. eq + a'. b'. eq LT Equation a_lt_b = b. lt + a'. lt + b. a'

Use functions in place of Boolean Expressions ARCHITECTURE functional OF bit_comparator IS FUNCTION fgl (w, x, gl : BIT) RETURN BIT IS BEGIN RETURN (w AND gl) OR (NOT x AND gl) OR (w AND NOT x); END fgl; FUNCTION feq (w, x, eq : BIT) RETURN BIT IS BEGIN RETURN (w AND x AND eq) OR (NOT w AND NOT x AND eq); END feq; BEGIN a_gt_b <= fgl (a, b, gt) AFTER 12 NS; a_eq_b <= feq (a, b, eq) AFTER 12 NS; a_lt_b <= fgl (b, a, lt) AFTER 12 NS; END functional;

Definition and Usage of functions

ARCHITECTURE structural OF nibble_comparator IS COMPONENT comp1 PORT (a, b, gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); END COMPONENT; FOR ALL : comp1 USE ENTITY WORK.bit_comparator (functional); CONSTANT n : INTEGER := 4; SIGNAL im : BIT_VECTOR ( 0 TO (n-1)*3-1); BEGIN -- next page END structural;

ARCHITECTURE structural OF nibble_comparator IS -- previous pages BEGIN c_all: FOR i IN 0 TO n-1 GENERATE l: IF i = 0 GENERATE least: comp1 PORT MAP (a(i), b(i), gt, eq, lt, im(0), im(1), im(2) ); END GENERATE; m: IF i = n-1 GENERATE most: comp1 PORT MAP (a(i), b(i), im(i*3-3), im(i*3-2), im(i*3-1), a_gt_b, a_eq_b, a_lt_b); END GENERATE; r: IF i > 0 AND i < n-1 GENERATE rest: comp1 PORT MAP (a(i), b(i), im(i*3-3), im(i*3-2), im(i*3-1), im(i*3+0), im(i*3+1), im(i*3+2) ); END GENERATE; END structural;

Definition and Usage of Procedures Defining a procedure as test bench apply_data (a, 00&15&15&14&14&14&14&10&00&15&00&00&15, 500 NS); apply_data (b, 00&14&14&15&15&12&12&12&15&15&15&00&00, 500 NS); Feed a and b with 13 integers each

ARCHITECTURE procedural OF nibble_comparator_test_bench IS TYPE integers IS ARRAY (0 TO 12) OF INTEGER; PROCEDURE apply_data (SIGNAL target : OUT BIT_VECTOR (3 DOWNTO 0); CONSTANT values : IN integers; CONSTANT period : IN TIME) IS VARIABLE j : INTEGER; VARIABLE tmp, pos : INTEGER := 0; VARIABLE buf : BIT_VECTOR (3 DOWNTO 0); BEGIN … END procedural;

ARCHITECTURE procedural OF nibble_comparator_test_bench IS …. BEGIN FOR i IN 0 TO 12 LOOP tmp := values (i); j := 0; WHILE j <= 3 LOOP IF (tmp MOD 2 = 1) THEN buf (j) := '1'; ELSE buf (j) := '0'; END IF; tmp := tmp / 2; j := j + 1; END LOOP; target <= TRANSPORT buf AFTER i * period; END LOOP; END apply_data;

COMPONENT comp4 PORT (a, b : IN bit_vector (3 DOWNTO 0); gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); END COMPONENT; FOR a1 : comp4 USE ENTITY WORK.nibble_comparator(structural); SIGNAL a, b : BIT_VECTOR (3 DOWNTO 0); SIGNAL eql, lss, gtr : BIT; SIGNAL vdd : BIT := '1'; SIGNAL gnd : BIT := '0'; BEGIN a1: comp4 PORT MAP (a, b, gnd, vdd, gnd, gtr, eql, lss); apply_data (a, 00&15&15&14&14&14&14&10&00&15&00&00&15, 500 NS); apply_data (b, 00&14&14&15&15&12&12&12&15&15&15&00&00, 500 NS); END procedural;

Simulation report TIME SIGNALS ================================ (NS) a(3:0) b(3:0) gtr eql lss 0 "0000" "0000" '0' '0' '0' '1' "1111" "1110" '1' '0' "1110" "1111" '0'... '1' "1100" '1'... '0' 3500 "1010" '0'... '1' 4000 "0000" "1111" "1111" '1' '0' 5000 "0000" '0' '1'

Details of a subprogram body

Loop statement with FOR iteration scheme

If statement

Utility Procedures Procedures or functions such as – Binary to integer – Integer to binary are very useful. They can be grouped as a library. They can be reused.

Binary to Integer Conversion PROCEDURE bin2int (bin : IN BIT_VECTOR; int : OUT INTEGER) IS VARIABLE result: INTEGER; BEGIN result := 0; FOR i IN bin'RANGE LOOP -- ‘RANGE attribute makes IF bin(i) = '1' THEN -- this a generic procedure result := result + 2**i; END IF; END LOOP; int := result; END bin2int;

Integer to Binary Conversion PROCEDURE int2bin (int : IN INTEGER; bin : OUT BIT_VECTOR) IS VARIABLE tmp : INTEGER; BEGIN tmp := int; FOR i IN 0 TO (bin'LENGTH - 1) LOOP -- ‘LENGTH attribute IF (tmp MOD 2 = 1) THEN -- is used bin (i) := '1'; ELSE bin (i) := '0'; END IF; tmp := tmp / 2; END LOOP; END int2bin;

Procedures within procedure PROCEDURE apply_data ( SIGNAL target : OUT BIT_VECTOR (3 DOWNTO 0); CONSTANT values : IN integers; CONSTANT period : IN TIME) IS VARIABLE buf : BIT_VECTOR (3 DOWNTO 0); BEGIN FOR i IN 0 TO 12 LOOP int2bin (values(i), buf); target <= TRANSPORT buf AFTER i * period; END LOOP; END apply_data;

Functions serve as utilities FUNCTION to_integer (bin : BIT_VECTOR) RETURN INTEGER IS VARIABLE result: INTEGER; BEGIN result := 0; FOR i IN bin'RANGE LOOP IF bin(i) = '1' THEN result := result + 2**i; END IF; END LOOP; RETURN result; END to_integer;

Packaging Parts and Utilities Component declarations as well as utilities can be packaged A package declaration containing component declarations of simple gates Eliminates the need for individual declarations

Package Declaration -- Packaging components PACKAGE simple_gates IS COMPONENT n1 PORT (i1: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n2 PORT (i1: i2: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n3 PORT (i1, i2, i3: IN BIT; o1: OUT BIT); END COMPONENT; END simple_gates;

Package Declaration PACKAGE basic_utilities IS TYPE integers IS ARRAY (0 TO 12) OF INTEGER; FUNCTION fgl (w, x, gl : BIT) RETURN BIT; FUNCTION feq (w, x, eq : BIT) RETURN BIT; PROCEDURE bin2int (bin : IN BIT_VECTOR; int : OUT INTEGER); PROCEDURE int2bin (int : IN INTEGER; bin : OUT BIT_VECTOR); PROCEDURE apply_data ( SIGNAL target : OUT BIT_VECTOR (3 DOWNTO 0); CONSTANT values : IN integers; CONSTANT period : IN TIME); FUNCTION to_integer (bin : BIT_VECTOR) RETURN INTEGER; END basic_utilities;

Package Definition PACKAGE BODY basic_utilities IS FUNCTION fgl (w, x, gl : BIT) RETURN BIT IS BEGIN RETURN (w AND gl) OR (NOT x AND gl) OR (w AND NOT x); END fgl; FUNCTION feq (w, x, eq : BIT) RETURN BIT IS BEGIN RETURN (w AND x AND eq) OR (NOT w AND NOT x AND eq); END feq; …. – next three pages END basic_utilities;

PROCEDURE bin2int (bin : IN BIT_VECTOR; int : OUT INTEGER) IS VARIABLE result: INTEGER; BEGIN result := 0; FOR i IN bin'RANGE LOOP IF bin(i) = '1' THEN result := result + 2**i; END IF; END LOOP; int := result; END bin2int;

PROCEDURE int2bin (int : IN INTEGER; bin : OUT BIT_VECTOR) IS VARIABLE tmp : INTEGER; VARIABLE buf : BIT_VECTOR (bin'RANGE); BEGIN tmp := int; FOR i IN 0 TO (bin'LENGTH - 1) LOOP IF (tmp MOD 2 = 1) THEN bin (i) := '1'; ELSE bin (i) := '0'; END IF; tmp := tmp / 2; END LOOP; END int2bin;

PROCEDURE apply_data ( SIGNAL target : OUT BIT_VECTOR (3 DOWNTO 0); CONSTANT values : IN integers; CONSTANT period : IN TIME) IS VARIABLE buf : BIT_VECTOR (3 DOWNTO 0); BEGIN FOR i IN 0 TO 12 LOOP int2bin (values(i), buf); target <= TRANSPORT buf AFTER i * period; END LOOP; END apply_data; FUNCTION to_integer (bin : BIT_VECTOR) RETURN INTEGER IS VARIABLE result: INTEGER; BEGIN result := 0; FOR i IN bin'RANGE LOOP IF bin(i) = '1' THEN result := result + 2**i; END IF; END LOOP; RETURN result; END to_integer; END basic_utilities;

Using functions in packages USE WORK.basic_utilities.ALL; ARCHITECTURE functional OF bit_comparator IS BEGIN a_gt_b <= fgl (a, b, gt) AFTER 12 NS; a_eq_b <= feq (a, b, eq) AFTER 12 NS; a_lt_b <= fgl (b, a, lt) AFTER 12 NS; END functional;

USE WORK.basic_utilities.ALL; ARCHITECTUR procedural OF nibble_comparator_test_bench IS COMPONENT comp4 PORT ( a, b : IN bit_vector (3 DOWNTO 0); gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); END COMPONENT; FOR a1 : comp4 USE ENTITY WORK.nibble_comparator(structural); SIGNAL a, b : BIT_VECTOR (3 DOWNTO 0); SIGNAL eql, lss, gtr : BIT; SIGNAL vdd : BIT := '1'; SIGNAL gnd : BIT := '0'; BEGIN a1: comp4 PORT MAP (a, b, gnd, vdd, gnd, gtr, eql, lss); apply_data (a, 0&15&15&14&14&14&14&10&00&15&00&00&15, 500 NS); apply_data (b, 0&14&14&15&15&12&12&12&15&15&15&00&00, 500 NS); END procedural;

Aggregate for elements of the array ALTERNATIVE: use aggregate operation apply_data (a, (00,15,15,14,14,14,14,10,00,15,00,00,15), 500 NS); apply_data (b, (00,14,14,15,15,12,12,12,15,15,15,00,00), 500 NS);

Design Parametrization Component models can be parameterized to better utilize gate or component models and to make general models usable in different design environments VHDL: generic parameters Generic parameters: timing, delay When a parameterized gate is used, its generic (parameters) values are passed to the parameters

Parametrized Inverter ENTITY inv_t IS GENERIC (tplh : TIME := 5 NS; tphl : TIME := 3 NS); PORT (i1 : IN BIT; o1 : OUT BIT); END inv_t; -- ARCHITECTURE average_delay OF inv_t IS BEGIN o1 <= NOT i1 AFTER (tplh + tphl) / 2; END average_delay;

Parametrized 2-input NAND Gate ENTITY nand2_t IS GENERIC (tplh : TIME := 6 NS; tphl : TIME := 4 NS); PORT (i1, i2 : IN BIT; o1 : OUT BIT); END nand2_t; -- ARCHITECTURE average_delay OF nand2_t IS BEGIN o1 <= i1 NAND i2 AFTER (tplh + tphl) / 2; END average_delay;

Parametrized 3-input NAND Gate ENTITY nand3_t IS GENERIC (tplh : TIME := 7 NS; tphl : TIME := 5 NS); PORT (i1, i2, i3 : IN BIT; o1 : OUT BIT); END nand3_t; -- ARCHITECTURE average_delay OF nand3_t IS BEGIN o1 <= NOT ( i1 AND i2 AND i3 ) AFTER (tplh + tphl) / 2; END average_delay;

Entity declaration of with generics

Graphical representation with generics Port association and generic association must be done when used

ARCHITECTURE default_delay OF bit_comparator IS COMPONENT n1 PORT (i1: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n2 PORT (i1, i2: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n3 PORT (i1, i2, i3: IN BIT; o1: OUT BIT); END COMPONENT; FOR ALL : n1 USE ENTITY WORK.inv_t (average_delay); FOR ALL : n2 USE ENTITY WORK.nand2_t (average_delay); FOR ALL : n3 USE ENTITY WORK.nand3_t (average_delay); -- Intermediate signals SIGNAL im1,im2, im3, im4, im5, im6, im7, im8, im9, im10 : BIT; BEGIN -- a_gt_b output g0 : n1 PORT MAP (a, im1); g1 : n1 PORT MAP (b, im2); g2 : n2 PORT MAP (a, im2, im3); g3 : n2 PORT MAP (a, gt, im4); g4 : n2 PORT MAP (im2, gt, im5); g5 : n3 PORT MAP (im3, im4, im5, a_gt_b); …. END default_delay; Use default delays

ARCHITECTURE fixed_delay OF bit_comparator IS COMPONENT n1 GENERIC (tplh, tphl : TIME); PORT (i1: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n2 GENERIC (tplh, tphl : TIME); PORT (i1, i2: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n3 GENERIC (tplh, tphl : TIME); PORT (i1, i2, i3: IN BIT; o1: OUT BIT); END COMPONENT; FOR ALL : n1 USE ENTITY WORK.inv_t (average_delay); FOR ALL : n2 USE ENTITY WORK.nand2_t (average_delay); FOR ALL : n3 USE ENTITY WORK.nand3_t (average_delay); SIGNAL im1,im2, im3, im4, im5, im6, im7, im8, im9, im10 : BIT; BEGIN -- a_gt_b output …. -- a_eq_b output … -- a_lt_b output END fixed_delay;

BEGIN -- a_gt_b output g0 : n1 GENERIC MAP (2 NS, 4 NS) PORT MAP (a, im1); g1 : n1 GENERIC MAP (2 NS, 4 NS) PORT MAP (b, im2); g2 : n2 GENERIC MAP (3 NS, 5 NS) PORT MAP (a, im2, im3); g3 : n2 GENERIC MAP (3 NS, 5 NS) PORT MAP (a, gt, im4); g4 : n2 GENERIC MAP (3 NS, 5 NS) PORT MAP (im2, gt, im5); g5 : n3 GENERIC MAP (4 NS, 6 NS) PORT MAP (im3, im4, im5, a_gt_b); -- a_eq_b output g6 : n3 GENERIC MAP (4 NS, 6 NS) PORT MAP (im1, im2, eq, im6); g7 : n3 GENERIC MAP (4 NS, 6 NS) PORT MAP (a, b, eq, im7); g8 : n2 GENERIC MAP (3 NS, 5 NS) PORT MAP (im6, im7, a_eq_b); -- a_lt_b output g9 : n2 GENERIC MAP (3 NS, 5 NS) PORT MAP (im1, b, im8); g10 : n2 GENERIC MAP (3 NS, 5 NS) PORT MAP (im1, lt, im9); g11 : n2 GENERIC MAP (3 NS, 5 NS) PORT MAP (b, lt, im10); g12 : n3 GENERIC MAP (4 NS, 6 NS) PORT MAP (im8, im9, im10, a_lt_b); END fixed_delay;

Component instantiation statement with generic map Generic map aspect comes first

Bit comparator with timing parameters ENTITY bit_comparator_t IS GENERIC (tplh1, tplh2, tplh3, tphl1, tphl2, tphl3 : TIME); PORT (a, b, -- data inputs gt, -- previous greater than eq, -- previous equal lt : IN BIT; -- previous less than a_gt_b, -- greater a_eq_b, -- equal a_lt_b : OUT BIT); -- less than END bit_comparator_t;

ARCHITECTURE passed_delay OF bit_comparator_t IS COMPONENT n1 GENERIC (tplh, tphl : TIME); PORT (i1: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n2 GENERIC (tplh, tphl : TIME); PORT (i1, i2: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n3 GENERIC (tplh, tphl : TIME); PORT (i1, i2, i3: IN BIT; o1: OUT BIT); END COMPONENT; FOR ALL : n1 USE ENTITY WORK.inv_t (average_delay); FOR ALL : n2 USE ENTITY WORK.nand2_t (average_delay); FOR ALL : n3 USE ENTITY WORK.nand3_t (average_delay); -- Intermediate signals SIGNAL im1,im2, im3, im4, im5, im6, im7, im8, im9, im10 : BIT; BEGIN

-- a_gt_b output g0 : n1 GENERIC MAP (tplh1, tphl1) PORT MAP (a, im1); g1 : n1 GENERIC MAP (tplh1, tphl1) PORT MAP (b, im2); g2 : n2 GENERIC MAP (tplh2, tphl2) PORT MAP (a, im2, im3); g3 : n2 GENERIC MAP (tplh2, tphl2) PORT MAP (a, gt, im4); g4 : n2 GENERIC MAP (tplh2, tphl2) PORT MAP (im2, gt, im5); g5 : n3 GENERIC MAP (tplh3, tphl3) PORT MAP (im3, im4, im5, a_gt_b); -- a_eq_b output g6 : n3 GENERIC MAP (tplh3, tphl3) PORT MAP (im1, im2, eq, im6); g7 : n3 GENERIC MAP (tplh3, tphl3) PORT MAP (a, b, eq, im7); g8 : n2 GENERIC MAP (tplh2, tphl2) PORT MAP (im6, im7, a_eq_b); -- a_lt_b output g9 : n2 GENERIC MAP (tplh2, tphl2) PORT MAP (im1, b, im8); g10 : n2 GENERIC MAP (tplh2, tphl2) PORT MAP (im1, lt, im9); g11 : n2 GENERIC MAP (tplh2, tphl2) PORT MAP (b, lt, im10); g12 : n3 GENERIC MAP (tplh3, tphl3) PORT MAP (im8, im9, im10, a_lt_b); END passed_delay;

Page 174 Fig 6.26

ARCHITECTURE iterative OF nibble_comparator IS COMPONENT comp1 GENERIC (tplh1 : TIME := 2 NS; tplh2 :TIME := 3 NS; tplh3 : TIME := 4 ns;) PORT (a, b, gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); END COMPONENT; FOR ALL : comp1 USE ENTITY WORK.bit_comparator_t (passed_delay); SIGNAL im : BIT_VECTOR ( 0 TO 8); BEGIN c0: comp1 PORT MAP (a(0), b(0), gt, eq, lt, im(0), im(1), im(2)); c1to2: FOR i IN 1 TO 2 GENERATE c: comp1 PORT MAP (a(i), b(i), im(i*3-3), im(i*3-2), im(i*3-1), im(i*3+0), im(i*3+1), im(i*3+2) ); END GENERATE; c3: comp1 PORT MAP (a(3), b(3), im(6), im(7), im(8), a_gt_b, a_eq_b, a_lt_b); -- default values END iterative; Fig 6.27 mistake

Associated with OPEN (default) ARCHITECTURE iterative OF nibble_comparator IS... BEGIN c0: comp1 -- Association by position, GENERIC MAP (OPEN, OPEN, 8 NS, OPEN, OPEN, 10 NS) PORT MAP (a(0), b(0), gt, eq, lt, im(0), im(1), im(2));... END iterative;

Named association ARCHITECTURE iterative OF nibble_comparator IS... BEGIN c0: comp1 GENERIC MAP (tplh3 => 8 NS, tphl3 => 10 NS) PORT MAP (a(0), b(0), gt, eq, lt, im(0), im(1), im(2));... END iterative; same as the previous slide (others are defaults)

Named association PORT AS DECLARED: PORT (a, b, gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); ARCHITECTURE BECOMES: ARCHITECTURE iterative OF nibble_comparator IS... BEGIN c0: comp1 GENERIC MAP (tplh3 => 8 NS, tphl3 => 10 NS) PORT MAP (a => a(0), b => b(0), gt => gt, eq => eq, lt => lt, a_gt_b => im(0), a_eq_b => im(1), a_lt_b => im(2));... END iterative;

Named association Rule: as_in_declaration => local_value Order is not significant Leave open or use a_gt_b => OPEN Outputs can be left open, inputs only if default

A customizable test bench USE WORK.basic_utilities.ALL; ARCHITECTURE customizable OF nibble_comarator_test_bench IS COMPONENT comp4 PORT ( a, b : IN BIT_VECTOR (3 DOWNTO 0); gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); -- use which implementation? END COMPONENT; -- require configuration statement SIGNAL a, b : BIT_VECTOR (3 DOWNTO 0); SIGNAL eql, lss, gtr : BIT; SIGNAL vdd : BIT := '1'; SIGNAL gnd : BIT := '0'; BEGIN a1: comp4 PORT MAP (a, b, gnd, vdd, gnd, gtr, eql, lss); apply_data (a, (0,15,15,14,14,14,14,10,00,15,00,00,15), 500 NS); apply_data (b, (0,14,14,15,15,12,12,12,15,15,15,00,00), 500 NS); END customizable;

Configuring customizable for testing structural architecture of nibble_comparator USE WORK.ALL; CONFIGURATION functional OF nibble_comparator_test_bench IS FOR customizable FOR a1 : comp4 USE ENTITY WORK.nibble_comparator(structural); END FOR; END functional;

Graphical representation Use structural of nibble_comparator

Configuring customizable for testing iterative architecture of nibble_comparator USE WORK.ALL; CONFIGURATION average_delay OF nibble_comparator_test_bench IS FOR customizable FOR a1 : comp4 USE ENTITY WORK.nibble_comparator(iterative); END FOR; END average_delay; No need to recompile the test bench

Configuration Declaration d Configuration declaration replaces or adds to a configuration specification

ARCHITECTURE flexible OF nibble_comparator IS COMPONENT comp1 PORT (a, b, gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); END COMPONENT; SIGNAL im : BIT_VECTOR ( 0 TO 8); BEGIN c0: comp1 PORT MAP (a(0), b(0), gt, eq, lt, im(0), im(1), im(2)); c1to2: FOR i IN 1 TO 2 GENERATE c: comp1 PORT MAP (a(i), b(i), im(i*3-3), im(i*3-2), im(i*3-1), im(i*3+0), im(i*3+1), im(i*3+2) ); END GENERATE; c3: comp1 PORT MAP (a(3), b(3), im(6), im(7), im(8), a_gt_b, a_eq_b, a_lt_b); END flexible; Which comp1 implementation is used? general purpose nibble_comparator

USE WORK.ALL; CONFIGURATION default_bit_level OF nibble_comparator_test_bench IS FOR customizable FOR a1 : comp4 USE ENTITY WORK.nibble_comparator(flexible); FOR flexible FOR c0, c3: comp1 USE ENTITY WORK.bit_comparator (default_delay); END FOR; FOR c1to2 FOR c: comp1 USE ENTITY WORK.bit_comparator (default_delay); END FOR; END default_bit_level;

default_delay of bit_comparator flexible OF nibble_comparator Fig 6.36

USE WORK.ALL; CONFIGURATION fixed_bit_level OF nibble_comparator_test_bench IS FOR customizable FOR a1 : comp4 USE ENTITY WORK.nibble_comparator(flexible); FOR flexible FOR c0, c3: comp1 USE ENTITY WORK.bit_comparator (fixed_delay); END FOR; FOR c1to2 FOR c: comp1 USE ENTITY WORK.bit_comparator (fixed_delay); END FOR; END fixed_bit_level; Binding to the fixed_delay architecture

USE WORK.ALL; -- See Fig 6.39 CONFIGURATION passed_bit_level OF nibble_comparator_test_bench IS FOR customizable FOR a1 : comp4 USE ENTITY WORK.nibble_comparator(flexible); FOR flexible FOR c0, c3: comp1 USE ENTITY WORK.bit_comparator_t (passed_delay) GENERIC MAP (tplh1 => 2 NS, tplh2 => 3 NS, tplh3 => 4 NS, tphl1 => 4 NS, tphl2 => 5 NS, tphl3 => 6 NS); END FOR; FOR c1to2 FOR c: comp1 USE ENTITY WORK.bit_comparator_t (passed_delay) GENERIC MAP (tplh1 => 2 NS, tplh2 => 3 NS, tplh3 => 4 NS, tphl1 => 4 NS, tphl2 => 5 NS, tphl3 => 6 NS); END FOR; END passed_bit_level; Using configuration declarations for component bindings, and specification of generic parameters

Fig 6.41

ARCHITECTURE partially_flexible OF nibble_comparator IS COMPONENT comp1 PORT (a, b, gt, eq, lt : IN BIT; a_gt_b, a_eq_b, a_lt_b : OUT BIT); END COMPONENT; FOR ALL : comp1 USE ENTITY WORK.bit_comparator_t (passed_delay); SIGNAL im : BIT_VECTOR ( 0 TO 8 ); BEGIN c0: comp1 PORT MAP (... ); c1to2 : FOR i IN 1 TO 2 GENERATE c: comp1 PORT MAP (... ); END GENERATE; c3: comp1 PORT MAP (... ); END partially_flexible;

USE WORK.ALL; CONFIGURATION incremental OF nibble_comparator_test_bench IS FOR customizable FOR a1 : comp4 USE ENTITY WORK.nibble_comparator (partially_flexible); FOR flexible FOR c0, c3: comp1 GENERIC MAP (tplh1 => 2 NS, tplh2 => 3 NS, tplh3 => 4 NS, tphl1 => 4 NS, tphl2 => 5 NS, tphl3 => 6 NS); END FOR; FOR c1to2 FOR c: comp1 GENERIC MAP (tplh1 => 2 NS, tplh2 => 3 NS, tplh3 => 4 NS, tphl1 => 4 NS, tphl2 => 5 NS, tphl3 => 6 NS); END FOR; END incremental;

Unbound VHDL description of set- reset latch ENTITY sr_latch IS PORT (s, r, c : IN BIT; q : OUT BIT); END sr_latch; ARCHITECTURE gate_level OF sr_latch IS COMPONENT n2 PORT (i1, i2: IN BIT; o1: OUT BIT); END COMPONENT; SIGNAL im1, im2, im3, im4 : BIT; BEGIN g1 : n2 PORT MAP (s, c, im1); g2 : n2 PORT MAP (r, c, im2); g3 : n2 PORT MAP (im1, im4, im3); g4 : n2 PORT MAP (im3, im2, im4); q <= im3; END gate_level; -- Fig 6.44

Unbound VHDL description of a D- latch ENTITY d_latch IS PORT (d, c : IN BIT; q : OUT BIT); END d_latch; ARCHITECTURE sr_based OF d_latch IS COMPONENT sr PORT (s, r, c : IN BIT; q : OUT BIT); END COMPONENT; COMPONENT n1 PORT (i1: IN BIT; o1: OUT BIT); END COMPONENT; SIGNAL dbar : BIT; BEGIN c1 : sr PORT MAP (d, dbar, c, q); c2 : n1 PORT MAP (d, dbar); END sr_based; -- Fig 6.45

Unbound VHDL description for an n-bit D-F/F ENTITY d_register IS PORT (d : IN BIT_VECTOR; c : IN BIT; q : OUT BIT_VECTOR); END d_register; ARCHITECTURE latch_based OF d_register IS COMPONENT dl PORT (d, c : IN BIT; q : OUT BIT); END COMPONENT; BEGIN dr : FOR i IN d'RANGE GENERATE di : dl PORT MAP (d(i), c, q(i)); END GENERATE; END latch_based; -- Fig 6.46

USE WORK.ALL; -- see Fig 6.47 CONFIGURATION average_gate_delay OF d_register IS FOR latch_based FOR dr FOR di : dl USE ENTITY WORK.d_latch(sr_based); FOR sr_based FOR c1 : sr USE ENTITY WORK.sr_latch(gate_level); FOR gate_level FOR g2, g4 : n2 USE ENTITY WORK.nand2_t(average_delay) GENERIC MAP (5 NS, 6 NS); END FOR; FOR g1, g3 : n2 USE ENTITY WORK.nand2_t(average_delay) GENERIC MAP (2 NS, 4 NS); END FOR; FOR c2 : n1 USE ENTITY WORK.inv_t(average_delay) GENERIC MAP (3 NS, 5 NS); END FOR; END average_gate_delay; -- Fig 6.48

ARCHITECTURE single OF d_register_test_bench IS COMPONENT reg PORT (d : IN BIT_VECTOR (7 DOWNTO 0); c : IN BIT; q : OUT BIT_VECTOR (7 DOWNTO 0) ); END COMPONENT; FOR r8 : reg USE CONFIGURATION WORK.single_gate_delay; SIGNAL data, outdata : BIT_VECTOR (7 DOWNTO 0); SIGNAL clk : BIT; BEGIN r8: reg PORT MAP (data, clk, outdata); data <= X"00", X"AA" AFTER 0500 NS, X"55" AFTER 1500 NS; clk <= '0', '1' AFTER 0200 NS, '0' AFTER 0300 NS, '1' AFTER 0700 NS, '0' AFTER 0800 NS, '1' AFTER 1700 NS, '0' AFTER 1800 NS; END single; -- Fig 6.51

ENTITY xor2_t IS GENERIC (tplh : TIME := 9 NS; tphl : TIME := 7 NS); PORT (i1, i2 : IN BIT; o1 : OUT BIT); END xor2_t; ARCHITECTURE average_delay OF xor2_t IS BEGIN o1 <= i1 XOR i2 AFTER (tplh + tphl) / 2; END average_delay; ---- ENTITY inv_t IS GENERIC (tplh : TIME := 5 NS; tphl : TIME := 3 NS); PORT (i1 : IN BIT; o1 : OUT BIT); END inv_t; ARCHITECTURE average_delay OF inv_t IS BEGIN o1 <= NOT i1 AFTER (tplh + tphl) / 2; END average_delay; -- Fig 6.53 (library for Parity checking circuit)

ENTITY parity IS PORT (a : IN BIT_VECTOR (7 DOWNTO 0); odd, even : OUT BIT); END parity; -- ARCHITECTURE iterative OF parity IS COMPONENT x2 PORT (i1, i2: IN BIT; o1: OUT BIT); END COMPONENT; COMPONENT n1 PORT (i1: IN BIT; o1: OUT BIT); END COMPONENT; SIGNAL im : BIT_VECTOR ( 0 TO 6 ); BEGIN first: x2 PORT MAP (a(0), a(1), im(0)); middle: FOR i IN 1 TO 6 GENERATE m: x2 PORT MAP (im(i-1), a(i+1), im(i)); END GENERATE; last: odd <= im(6); inv: n1 PORT MAP (im(6), even); END iterative;

CONFIGURATION parity_binding OF parity IS FOR iterative FOR first : x2 USE ENTITY WORK.xor2_t (average_delay) GENERIC MAP (5 NS, 5 NS); END FOR; FOR middle (1 TO 5) FOR m : x2 USE ENTITY WORK.xor2_t (average_delay) GENERIC MAP (5 NS, 5 NS); END FOR; FOR middle ( 6) FOR m : x2 USE ENTITY WORK.xor2_t (average_delay) GENERIC MAP (6 NS, 7 NS); END FOR; FOR inv : n1 USE ENTITY WORK.inv_t (average_delay) GENERIC MAP (5 NS, 5 NS); END FOR; END parity_binding; -- Fig 6.55 Parity Circuit Design Configuration

Design Library Logic families or groups of components (i.e. libraries) are categorized according to their physical characteristics, price, complexity, usage, or other properties. VHDL language supports the use of design libraries for categorizing components or utilities.

Design Library Existing VHDL Libraries: – STD: STANDARD package: BIT, BIT_VECTOR, TIME, …. TEXTIO package – IEEE: std_logic_1164 package: std_logic (All basic functions are available in this package) numeric_std package: numeric_bit package: – Work: The library current in use

Design Library Altera Max Plus II VHDL Libraries: – altera: reg24 (pre-tested components) – lpm: (Library of parameterized modules) lpm_and, lpm_or, …

Multi-value Logic (std_logic) Value Representing ==================== '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 std_logic satisfies most hardware design needs

AND table for std_logic type

Use of Library LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; -- ENTITY nand2_t IS GENERIC (tplh : TIME := 6 NS; tphl : TIME := 4 NS); PORT (i1, i2 : IN std_logic; o1 : OUT std_logic); END nand2_t; ARCHITECTURE average_delay_mvla OF nand2_t IS BEGIN o1 <= i1 NAND i2 AFTER (tplh + tphl) / 2; END average_delay_mvla;

Use of Library ls7400 (user-defined) Ex1 LIBRARY ls7400; USE ls7400.simple_gates.ALL; Ex2 LIBRARY ls7400; USE ls7400.ALL; Ex3 LIBRARY ls7400; USE ls7400.ALL;.. … FOR g1, g3 : n2 … USE ENTITY ls7400.nand2 (single_delay); … END FOR;

Summary Definition of subprograms Packaging utilities and components Design parameterization Design configuration