Sie sind auf Seite 1von 184

A. P.

Goclse
D.A.Goclse

Technical Publications Punes

Fundamentals of HDL
ISBN 9788184314052
All rights reserved with Technical Publications. No port of this book should be
reproduced in any form, Electronic, Mechonicol, Photocopy or ony information storage and
retrievol system without prior permis.sion in writing, from Technical Publications, Pvne.

Published by :
Tuchnical Publications rune"
# 1, Amit Residency, 412, Shaniwar Peth, Pun - 411 030, Ind"...

Printer :
Ale<t DTPrintm
Sr.no. 10/3,Sinlw51d Ro1d,
l\.nt 41 1 041

Copyrighted material

Table of Contents
1.1WhyHDL?........................................................................................... 1-1
1.2 A Brief History of HDL ......... .... ... ........................ ...... ...... .................. ... 1 - 2
1.2.1 A Brief History of VHDL . . .. . .... . . .. . ....... . . . ..... . . . . .. . .. . .. . ... . . . ..... 1 - 2
1.2.2 A Brief History of Verilog HDL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . 1 - 3

1.3 Structure of the HDL Module ................ ........ ....... ..... ........ ....... ........ .... 1 - 3
1.3.1 Structure of the VHDL Module . . . . . . . . . . . . . . . .. . . . .. . . . . . . . . . . . . . . . . . .. .. . . . . . . 1 - 3
1-4
1.3.1.1 Package. .
1.3.1.2 Entity . . . . .

1 -5

1.3.1.3 Architecture . .

1- 7

1.3.1.4 Configuration. .
1-8
1.3.2 Structure of the Verilog Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 - 9

1.4 Operators ............... ...... ................ ...................................................... 1 - 10


1.4.1 Operators in VHDL. . . . . . . . . . . . . .. . .. . . . . .. . .. . . . . . .. .. . . . . . . .. . . . . . . .. .. . . 1 - 1O
1.4.1.1 Logical Operators .
1 - 11
1.4.1.2 Relational Operators . . .

1 - 12

1.4.1.3 Arithmetic Operators . . .

1 -13

1.4.1.4 Shift and Rotate Operators .

1 -14

1.4.1.SOperatorPrecedence .
1 - 14
1.4.2 Operators in Verilog HDL ..... . . . ............ . .... . ....... . . . .. . . . . .. . ...... . 1 -15
1.4.2.1 Boolean Logical Operators. . . .

1-15

1.4.2.2 Unary Reduction Logical Operators

1 -1 6

1.4.2.3 Bitwise Logical Operators .

1 -16

1.4.2.4 Relational Operators . .

1 - 16

1.4.2.5 Binary Arithmetic Operators

1 - 17

1.4.2.6 Unary Arithmetic Operators.

1 - 17

1.4.2.7 Other Operators . .

1 - 17

1.4.2.8 Operator Precedence.

1 - 18

Copyrighted material

1.5 Data Types .................................................... ....... ............. ......... ........ 1 - 18


1.5.1 VHDL Data Types .... . ...... . .. .. .. . .. ... .. . . ... . . . . . . . . . . ......... .. .. .. 1 -19
1.5.1.1 Scalar Types . .
1- 19
1.5.1.2 Comoostte Types.

1-22

1.5.1.3AccessTypes .

1-25

1.5.1.4FileType . . ..

1-25

1.5.1.50therTypes. . .
1- 26
1.5.2 Verilog Data Type.. . . . . .. . .. ...... .. .. ..... . .............. . . ..... . ......... 1 - 27
1.5.2.1 Nets (Wire) and Registers . . . . . .
1-27
1.5.2.2 Abstract Data Types : integer, real time . . . . . . . . . . . . . . . . . . . 1- 28
1.5.2.3 Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1- 29

1.6 Styles or Types of Descriptions ....... ......... .................................. ....... 1 - 29


1.6.1 Behavioral Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . 1- 30
1.6.2 Dataflow Design Elements .. .. .. . .. .. .. .. .. . ............. .................... 1 - 31
1.6.3 Structural Design Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 - 32
1.6.4 Switch-Level Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 - 33
1.6.5 Mixed-Type Descriptions . .. .. .. ...... .. ..... .... ...... ...... ... .. . .. . .. . .. .. 1 - 34
1.6.6 Mixed Language Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 - 35

1.7 Simulation and Synthesis ............................... .................................... 1 - 36


1.7.1 Synthesis . .. . . .... . .. .... .. . .. . .. .. .. .. . . . .. .. .. . .. . ..... ... .. .. .. . . .. ... 1 - 36
1.7.2 Simulation . . . .. . ......... .. . . .... ..... ...... . .. . ... . ............ . . .. . ... . . 1 - 37

1.8 Brief Comparison of VHDL and Verilog ...... ... ........ ............................ 1 - 38
1.9 Summary of Operators in VHDL and Verilog ......... ............................ 1 - 39
Review Questions ........... ............................ ............................................. 1 - 41

2.1 High Lights of Data-Flow Description ... ....... .. ....... ................................ 2 - 1


2.2 Structure of the Data-Flow Description ....... .. ....... ....... ............. ............ 2 - 1
2.2.1 Signal Declaration and Assignment Statement .. .. . .. . .... . ......... ....... .... .. . 2 - 2
2.2.2 Execution of Assignment Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 - 2
2.2.3 Constant Declaration and Assignment Statement .. .. . . : . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 - 4

2.3 Data Type - Vectors ..................................... ........ ...... ....... ...... ............. 2 - 8
Review Questions .............. .......................................................... ......... ...2 - 26

Copyrighted ma erial

3.1 Behavioral Description Highlights ...................................... .......... ........ 3 - 1


3.2 Structure of the HDL Behavioral Description ....................................... 3 - 1
3.3 The VHDL Variable Assignment Statement.. ....................................... 3 - 4
3.4 Sequential Statements ........... .............................................................. 3 - 4
3.4.1 IF Statement. . .......... . .... . .. ................. . .................... . .... 3 - 4
3.4.2 Signal and Variable Assignment ...... .. . . . ... . .. . .. . ........ . . . . ... . ...... .. . 3 - 10
3.4.3 Case Statement . . ...... . . .. ............. . .. . . .. . ..... . . ........ . . ......... 3 -13
3.4.4 Comparison between CASE and IF Statement ... . .... . ..... . . ........... . ...... .
3.4.4.1 Verilog Casex and Casez . . . . . . . . . . . . . . . . . . . . . . . .
3.4.5 Loop Statement . .......... . . . . . . . . .. .. . ... . .. . . . ........... . ............. .
3.4.5.1 For-Loop Statement. .

3 - 14
3- 20
3 - 21
3- 21

3.4.5.2 While-Loop Statement.

3-23

3.4.5.3 Verilog Repeat. . .

3-23

3.4.5.4 Verilog Forever . . .

3 - 24

3.4.5.5 VHDL Next and Exit. .

3 - 24

Review Questions ....... ............................................................................ 3 - 35

4.1 Highlights of Structural Description .. ................. .... ........ ...................... 4 - 1


4.2 Organization of the Structural Description ...... .............. ...................... 4 - 1
4.3 Binding ........... ........ ........ ........................... .............. ............................. 4 - 4
4.3.1 Binding between Entity and Architecture in VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 4 - 4
4.3.2 Binding between Entity and Component in VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 - 5
4.3.3 Binding between Library and Module in VHDL. ................. . .... . ............. 4 - 6
4.3.4 Binding between Two Modules in Verilog . . .. . . .. . .. .... .. . . .. . .. . .. . .. . ........ . 4 - 8

4.4 State Machine .................................................................................... 4 - 36


4.4.1 Types of Sequential Circuits.... . . . .. .. . . .. . . . . .. . .... .. . .. . . .... .. . . ..... . . . . 4 - 37
4.4.1.1 Moore Model . . . . . . . .
4 - 37
4.4.1 .2 Mealy Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 - 39
4.4.1.3 Moore Vs Mealy Circuit Modets . . . . . . . . . . . . . . . . . . . . . . 4-40
4.4.2 State Machine Notations . ......... ..... ... .. . . . . ...... . .. ..... .. . ..... . ..... 4 - 40
4 4 2 1 State and State Variable
4-40
4 4 2 2 Present State and Next State .

. . . . . . . . . . . . . . . . . . . 4-40

Copyrighted material

4.4.2.3 State Transition Diagram

4 - 41

4.4.2.4 State Table . . . . . .

4 -42

4.4.2.5 Transition Table .

4 -43

4.5 Design Equations and Circuit Diagram ............................................. 4 - 43


4.6 Generate (HDL), Generic (VHDL), and Parameter (Verilog) ............ 4 - 53
Review Questions ............................... .. ........ ......... .................................. 4 - 64

5.1 Highlights of Procedures, Tasks and Functions .................................. 5 - 1


5.2 Procedures and Tasks ......................................................................... 5 - 1
5.2.1 Procedures (VHDL) . .. .... ..... . . ..... . ... .... ... .... ........ .. ... . .... . .... 5 - 2
5.2.2 Tasks (Verilog) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 - 3

5.2.3 Examples of Procedures and Tasks....... . .. . ... . ... . .. .. . . . ..... ........ . ..... 5 - 4

5.3 Functions ........................................................................................... 5 - 21


5.3.1 VHDL Functions .. .. . . . .... . .... . ......................... ........ ..... .. .. 5 - 22
5.3.2 Verilog Functions .... . ..................................................... 5 22
5.3.3 Function Examples . .. .. . . .. . .. . ... . .. .. .. .. .. .. .. . .. . .. . .... . .. . ........... 5 - 23

5.4 Advanced HDL Descriptions : File Processing .................................. 5 - 27


5.4.1 VHDL File Processing .. . ....................................... . ........... 5 - 27
5.4.2 Verilog File Processing. ..... .. ...... . .. . .. .. ..... .. .. . .. .. ......... . .. . .. .. . 5 - 30

5.5 Examples of File Processing .............................................................. 5 - 33


5.5.1 Examples of VHDL File Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 - 33
5.5.2 Example of Verilog File Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 40

Review Questions ................................................................ ...... ....... ,, .. ,, 5 - 41

6.1 Why Mixed-Type Description? ........... .......... ........ ...... ......................... 6 - 1


6.2 VHDL User-Defined Types .......................................................... ........ 6 - 1
6.3 VHDL Package .................................................................................... 6 - 2
6.3.1 Implementation of Arrays .. . .. . ... . .. .. .. .. .. . ... . .. . .. . .. .... . . .... .. . . ... . .. 6 - 4
6.3.1.1 Single-Dimensional Arrays in VHDL . .
. 6-4
6.3.1.2 Single - Dimensional Arrays in Verilog . . . . . . . . . . . . . . . . . . . . 6 -5
6.3.2.3 Two-Dimensional Arrays. . . . . . . . . . . . . . . . . . . . . . . . . 6 -11

Copyrighted material

6.4 Mixed-Type Description Examples ... ..... ........ .. .... .. ..... ....... .......... ...... 6 - 12
Review Questions ....... ........ ........ .... ........... ......... .............. ..... ,,

6 - 24

7.1 Highlights of Mixed-Language Description ............ ..... ....... ....... ........... 7 - 1


7.2 How to Invoke One Language from the Other ..... .. ........... ......... .. ..... ... 7 - 1
7.2.1 Invoking a VHDL Entity from a Verilog Module .. .. .. . . . . ..... . . . . .. ... . ... ... . 7. 1
7.2.2 Invoking a Verilog Module from a VHDL Module .. . . . .... . . .... ... . .. . ...... . .. . .. 7 3

7 .3 Mixed-Language Description Examples ............... ....... ........ ........ ........ 7 - 4


7.4 Limitations of Mixed Language Description ... .. ...... ........ ....... ........ ..... 7 - 16
Review Questions ... ..... ... ................ ......... .. ,, ........ ......... ,,... ... .... .

7 - 17

8.1 Highlights of Synthesis ........ ........ ........... ................ ........ .................... .. 8 - 1


8.2 Synthesis Information from Entity and Module .......................... .......... 8 - 3
8.2.1 Synthesis Information from Entity (VHDL) . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 8 3
8.2.2 Verilog Synthesis Information from Module Inputs/Outputs . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9

8.3 Mapping Process and always in the Hardware Domain ........... ......... 8 - 11
8.3.1 Mapping the Signal-Assignment Statement to Gate-level. . . . . . . . . . . . . . . . . . . . . . . . . . . 8 11
8.3.2 Mapping the Variable-Assignment Statement to Gate-Level Synthesis. . . . . . . . . . . . . . . . . 8 15
8.3.3 Mapping Logical Operators . . . . . . . .. . . . . . . .. . . . . . . . . . . . . . . . . . . . . .. . . . . . .. . . . . 8 16
8.3.4 Mapping the IF Statement .. .. . . . .. . .. . . . . .. . .. . .. . . .. .. . . . . .. . . . . . . .. 8 -19
8.3.5 Mapping the Case Statement. .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . 8 31
8.3.6 Mapping the Loop Statement .. . ... . .. . . .. . . .. . ... ..... . . ....... . . . . . ... . . . . . . 8 37
8.3.7 Mapping Procedure or Task.. ... . .. . . . . . . .. . . . . . .. . . . . .. . . . . .. . .. .. .. . ... . . .. 8 38
8.3.8 Mapping the Function Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 40

Review Questions ................................................................................... 8 - 43

A 1 VHDL Standard s .. . ... .,, ..... ........ .,, .... ......... ................. ... ,, .. .. A - 1
A.2 Predefined Packages ... ........ ... ........ ... ....... .. ..... ... ...... ............... ........... A - 2
A.2.1 Standard . . . . ... . .. . .. . . . . . .. . ... . . . .. . . . ...... . .. . .. . ..... . .. . . . .. . .. . . . . A 2
A.2.2 TEXTIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A 4
A.2.3 STD LOGIC 1164 .. .. . . . . . .. . . .. . .. . .. . . .. .... . .. . .. .. ... . . .. .. ....... . .. A 5

A.2.4 NUMERIC_BIT . . . .. . ... .. . ... .. . . . ..... . .. . ....... . .......... .. .. ... . . A- 8


A.2.5 NUMERIC STD.. . .. ...... . .. ......... . ...... . ... . .. . ..... . .. . .......... .. A-1 1
A.2.6 MATH REAL . .. . ......... .. . . .. .. .. . ....... . ..... . ........ .. . . . . ... . .. ... A-15
A.2.7 MATH_COMPLEX ..... . . ... . .................. . . ....... ............... ... . A - 16

B.1 Decoders in VHDL ............................. .................... ...... ................. ..... B - 1


B 2 Encoders in VHDL. ....... ........ . .. .. .. ............. .

B-5

B.3 Three State Devices in VHDL ............................................................. B - 9


B.4 Multiplexers in VHDL. .............. ........... ......... ...................................... B - 12
B.5 Parity Circuits in VHDL. ...................................... ,............................. . B - 15
B.6 Comparators in VHDL .................... ............ ..................... ....... ........... B - 16
B 7 Adders and Subtracters in VHDL ... ........... .............................. .......... B - 18
B.8 ALU in VHDL ........................................................... .............. ............ B - 21
B.9 Multipliers in VHDL. .... ........ ........ , ...................................................... B - 22
B.1 O VHDL Code for Barrel Shifter .......................................................... B - 23
B.10.1 Barrel Shifter . . . . . . . . .. . .. . . .. .. .. . .. . .. . .. . . . . . . . . . . . . . . . .. . .. .. . . .. . . . . B - 23
B.10.2 Barrel Shifter using VHDL ... . .. . ... . . .. . ..... . . .. .. ... . ... . .... . , . .. . ...... B 25

B.11 VHDL Code for Simple Floating - Point Encoder ........................... B - 26


B.1 1.1 Simple Floating-Point Encoder . . . . .. . . . . .. . . .. . . . . . . . . . . . .. . . . . . . .. . . . .. . . .. B - 26
B.1 1.2 Simple Floating-Point Encoder in VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B 28

B.12 VHDL Code for Cascadina Comp.:.rators ................................... ..... B - 28


8.12.1 Cascading Comparators . . . . . . . .. .. .. . .. . . .. . . . .. . . . . . . . . . .. . . . . . . .. .. . . .. . B - 28
B.12.2 Cascading Compa1ators in VHDL ....... . ... .. . . . .. .. . . . . .. . .. .. .. . .. . ... .... B. 30

B.13 VHDL Code for Dual Priority Encoder ............ .......................... ....... B - 30
B.14 VHDL code for Ones Counter........................................................ B - 33
B 14 1 Behavioral VHDL Code for a 32-bit Ones Counter . .

8-33

8.14.2 Structural VHDL Code for a 32-bit Ones Counter . .. . ... . . . ..... . .. . .. .. .. . .. .. .. B - 34

B.15 VHDL Code for Binary to Gray Code Converter ... .............. ............ B - 38
B.16 VHDL Code for Gray to Binary Code Converter ............................. B - 40
B.17 VHDL Code for Latch ...................................... .............. .................. B - 42
B.18 VHDL Code for Flip-Flop ..... ........ ............ ........ ................................ B - 43
B.18.1 VHDL Code for a D Flip-Flop using IF-THEN Statement . . . . . . . . . . . . . . . . . . . . . . . . . . B 43

Copyrighted material

B.18.2 VHDL Code for a D Flip-Flop using WAIT-UNTIL Statement . . .................. .. . B - 44


B.18.3 VHDL Code for a D Flip-Flop with Asynchronous ReseliClear . . . . . . . . . . . . . . . . . . . . . . B - 45
B.18.4 VHDL Code for a D Flip-Flop with Synchronous ReseVClear . . . . . . . . . . . . . . . . . . . . . . . B - 45
8.18.5 VHDL code for a DFF with a negative-edge clock and asynchronous dear .. . ... . .. . .. B - 46
8.18.6 DFF with Positive-Edge Clock and Synchronous Set ... . . . .... ... ... .. . . ... . .. ... B - 47
8.18.7 DFF with Positive-Edge Clock and Clock Enable . .. .. . .. .. . .. .. . .. .. ... ... .. . .. . B - 48
B.18.8 VHDL Code for JK Flip-Flop .. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . .. . . . B - 48

B. 12 VHDL Code for Registers ................................................................ B - 49


8.19.1 VHDL Code for a Four-bit Register ... ... . ...... . .. . ....... .. .. .. . . ... . .. .. . .. B-49
8.19.2 4-bit Register with Positive-Edge Clock, Asynchronous Set and Clock Enable . . . . . . . . . B - 50
8.19.3 VHDL Code for an N-bit Register . .. . ... . .. . .. . ... . .. . ...... . . .... ... . ... . . .. B - 51
8.19.4 VHDL Code for a Shift Register. . ... . ... .. . .. . ........ . ....... .. . . .. . . .. 8 - 52
B.19.4.1 Using Sequential Statements . . . . . .
B-52
B.19.4.2 Hierarchical Code for a 4-bit Shift Register . . . . . . . . . .

B-53

B.19.4.3 VHDL Code for an n-bit Left-to-Right Shift Register. . . . . . .

B-54

B.19.4.4 VHDL Code for a Left-to-Right Shift Register with an Enable Input.
B - 55
8.19.5 VHDL Code for a 4-bit Parallel Access Shift Register ... . . . . . . . ............ . .. . ... B - 55
B.19.5.1 Using Sequential Statements . . . . . . . . . . . .
B - 55
B.19.5.2 Hierarchical Code for a 4-bit Parallel Access Shift Register. . . . . . . . . . . B - 57
8.19.6 8-bit Shift-Left Register with Positive-Edge Clock.
Asynchronous Parallel Load, SeriallN, and Serial OUT . .. . . . . .. . .. . . . . . . . . . . . . . . . B - 60
B.19.7 8-bit Shift-Left Registe:r with Positive-Edge Clock.
Synchronous Parallel Load, Serial IN. and Serial OUT . .. .. .. . .. .. ...... . . ..... ... B - 61
8.19.8 8-bit Shift-Left/Shift-Right Register with Positive-Edge Clock, Serial IN, and Parallel OUT B - 62

B.20 VHDL Code for a Counter ............................................................... B - 62


B.20.1 VHDL Code for a Four-bit Up Counter . . . .. .. .. . .. . ..... . ...... .. .. ... .. .. B - 62
8.20.2 VHDL Code for a 4-bit Up Counter using Integer Signals . .. . . . ... .. ..... .. . ... B - 63
B.20.3 VHDL Code for a 4-bit Down Counter ...... . .. .. . . .. . .. .. . . ... .......... .. ... . B - 64
8.20.4 VHDL Code for a 3-bit Asynchronous Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - 65
B.20.5 VHDL Code for Asynchronous Counter with GLITCH . ...... . ..... . .. . .. .. . .. .. .. . 8 - 66
B.20.6 VHDL Code for Synchronous mod-6 Counter . . .. .. . ... . . .... ... ... . .. ...... .. .. B - 67
B.20.7 4-bit Unsigned Up Counter with Asynchronous Load from Primary Input . B- 68
B.20.8 4-bit Unsigned Up Counter with Synchronous Load with a Constant . . . . B - 69

B 21 VHDL Code for State Machines

.. ... .. .. ........................... B - 70

B.21.1 VHDL Code for Mealy-type State Machines .. . .. . . . .. .... .. .. . . . .. . ... . . . . ... . . B - 72

Copyrighted material

B.21.1.1 VHDL Code ror a Serial Adder. . . . . .


. . . . . . . . . . . . . B - 74
B.21.2 VHDL Code for Moore-type State Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B - 78

B.22 VHDL Code for Guessing Game ... ....... ........... .. ........... ....... ............ B - 80
8.23 VHDL Code for Traffic Light Controller ........................................... B - 85
B.24 More Examples ................................................. .... ........ .................. B - 89
3.25 VHDL Code to Display Hex Key Input on the LCD Display ........... B - 107
B.26 VHDL Code to Display Message on the LCD Display .. ......... ........ B - 114
B.27 VHDL Code to Display Key Input on the LED Display .................. B - 120
B.28 VHDL Code to Display Message on the Multiplexed LED Display B - 122
B.29 VHDL Code for Stepper Motor Interfacing ...... ..... .............. ... ..... ... B - 124

iRPJ'O&It~IY
~~fiiw~~~<~~g-1
C.1 Gate Level Modeling .......... ................................................................. C - 1
C.2 Data Flow Modeling ........ ... .......... ........................................... ........ .... C - 6
C.3 Behavioral Modeling .... .......................................... ............. ................ C - 7
C.4 Description of D-Latch .... ........ ........... ................... .............................. C - 8
C.5 Description of Flip-Flops ......... ................... ......... ................................ C - 8
C.6 Description of Sequential Circuits ..................................................... C - 11
C.6.1 Description of Mealy Circuit .. . .. .. .. . ... ..... ... .. .. .. .. .. . . . . . . . ... C - 11
C.6.2 Description of Moore Circuit .. . . . .. . .. . .......... . ..... ... .............. .... . C - 13

C.7 HDL for Registers and Counters ...... ......... ........................................ C - 15


C.7 .1 Descriptions or Registers in Verilog HDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C - 16
C. 7.2 !::ascriptions of Counters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C - 20

C.8 Verilog Code for Generating Waveforms using DAC ........................ C - 25


C.9 Verilog Code for Elevator Controller .................................. ............... C - 31

Copyrighted material

Programming (using VHDL and Verilog)


I. Write HDL code to realize all the logic ~ates : Refer Section C. l and listing 2.1

2. Write a HDL program for the following combinational designs.


a. 2 to 4 decoder : Refer Section B. l . C.2 and listing 4.12.
b. 8 to 3 (encoder without priority and with priority) : Refer Section B.2 and Listing 3.7.
c. 8 to I multiplexer : Refer Se.ction B.4, C. I and listing. 2.3, 2.4.
d. 4 bit binary to gray converter : Refer Section B. I 5.
e. Multiplexer, de-multiplexer, comparator. : Refer Section B.4, B.6. B.12 and Listing 2.7, 4.20.
3 . Write a HDL code to describe the functions of a Full
Refer Section 1.6 and Listing 1.2, 1.3. !.4. 1.5, 1.9 and 1.10.

Adder using three modelling styles. :

4. Write a model for ALU. : Refer Section B.8 and Listing C.6.
5 . Develop the HDL code for the following
listing 3.2. 3.3, 3.4, 3.5. 4.16, 4 .18 and 4.19.

flip-flops, SR, D , JK, T . : Refer Section B.18, C.4. C.S and

6. Design 4-bit binary, BCD counters (Synchronous reset and Asynchronous reset) and "any
sequence" counters. : Refer Section B.20, C.6, C.7 and Listing 3.6, 4.24, 4.26, 6.8. 7.8, 7.9.

7. Write HDL code to display messages on the given seven segment display and LCD and
accepting Hex key pad input data. : Refer Section B.25, B.26, B.27, B.28.
8.

Write HDL code to control speed, direction of Stepper motor. : Refer Section B.29.

9. Write HDL code to generate different waveforms (Sine, Square, Triangle, Ramp etc.,) using
DAC change the frequency and amplitude. : Refer Section C.8.
I 0.

Write HDL code to simulate Elevator operations. : Refer Section C.9.

Copyngh1ed f"'ater al

Listing 1.1 : Description of circuil using basic gates ......................................... ..................... 1 - 9


Listing 1.2 : Example of VHDL behoviorol description ......................................................... l - 30
Listing 1.3 : Example o f Verilog b ehavioral description ............................. .. ........................ 1 - 31
l isting 1.4 : Exomple of VHDL dote-flow description ........................................................... 1 - 3 1
Listing 1.5 : Example of Verilog dole-flow description ..................... .. .................................. 1 - 3 1
Lisling 1.6 : VHDL swilch-level description ........................................................................... I - 33
Lisling 1.7: Veri log switch -level description ................................................ ........................ 1 - 34
Listing 1.8 : Exomple of VHDL mixed -type descriplion ................................... ..................... 1 - 34
Lisling 1.9 : Example o f Verilog mixed-type descriplion ...................................................... 1 - 35
Li sling 1. 10 : Example of mixed language type descriplion .................................................. 1 - 35

Listing 2 .1 : HDL code for AND-OR circuit - VHDL and Verilog ...... ..... .................................. 2 - 1
Listing 2 .2 : HDL code for holf-odder-VHDL and Verilog ................ ........... . ......................... 2 6
Listing 2.3 : HDL code of o 2 x 1 mulliplexer VHDL ond Verilog . ......................................... 2 - 7
Listing 2.4 : HDL code of o 4 x l mvlliplexer - VHDL and Verilog ... ..................................... 2 - 10
Lisling 2.5 : HDL code for o 2 x 2 unsigned combinational array m ultiplier
VHDL and Verilog. ........................................................................................ 2 13
Lisling 2 .6 : HDL code for a D-lolch.VHDL and Veri log . ...................................................... 2 - 15
Lisling 2.7 : HDL code of o 2 x 2 magnitude comparator - VHDL and Verilog ....................... 2 - 19
Listing 2 .8 : 4-bit ripple-corry odder case slvdy - VHDL ond Verilog ..................................... 2 - 20
Listing 2 .9 : 4-bil cony-lookahead odder - VHDL and Verilog . ............................................. 2 - 23

Listing 3 .1 : Example of on HDL behoviorol description- VHDL and Verilog ............ ................ 3 - 2
Listing 3.2 : VHDL code for behavioral description o f D-Lolch using va riable - assignment
statements - .................................................................................................. 3 - 10
Listing 3.3 : VHDL code for behaviora l description of D-Lotch using signal-assignment
stotemenls .. .. .. .. . .. .. .. . .. .. .. .. .. . .. . .. .. .. .. .. . ... .. .. . .. . . .. .. . .. . .. .. . .. .. . .. . .. .. . .. .. .. .. ..

. 3 - 11

Listing 3 .4 : Verilog code for behoviorol description of o D-Lotch ......................................... 3 - 11

~~~twtft~m fi!m:;nwt~~iih'i&iWli$ii.5W
Gopyngh' !Cl rr

M
rial

Listing 3 .5 : HDL code for o positive edge-triggered JK fl ip-flop using the case
stotement-VHDL end Verilog .........................................................................

3 . 16

Listing 3.6 : HDL code for a 3-bit binary counter using the cose statement................ ..... ....... 3 . 18
Listing 3. 7 : Verilog description for o 4-bit priority encoder .................................................. 3 21
l isting 3.8 : HDL code for colculoting the foctoriol of positive integers-VHDL end Verilog .... 3 26
listing 3.9 : 4x4-bit booth algorithm- VHDL and Verilog .................................................... 3 - 33

Listing 4 .1 : HDL structurol description- VHDL ond Verilog ................................................... 4 2


Listing 4.2 : HDL code of hell adder-VHDL end Veri log ............... .......... ........................... .. 4 3
Listing 4. 3 : Binding between entity ond architecture ............................................................. 4 5
Listing 4.4 : Binding between entity ond component............................ .................................. 4 5
listing 4 .5 : Binding between library and module in VHDL. ............. ....................................... 4 6
Listing 4 .6 : Binding between o library ond component in VHDL.. ........................................... 4 7
Listing 4.7 : Binding between two modules in Verilog . ................................... ........................ 4 8
Listing 4 .8: VHDL code for inverter, AND, OR, NOR, NANO XOR gates .......... ... ................... 4 . 9
listing 4 .9: HDL description of o 2x1 multiplexer with active low enable. ............................. 4 11
Listing 4 .10 : HDL description of o 2x4 decoder with enable input....................................... 4 . 14
Listing 4.11 : VHDL behovioro l description of o tri-stote buffer..... ........................................ 4 . 16
Listing 4. 12 : HDl. description of o 2x4 decoder with tri -stote output.................................... 4 17
Listing 4.13 : VHDL code for the holf odder. ...................................................................... 4 . 19
Listing 4.14 : HDL description of o lull odder - VHDL ond Verilog ........................... ........ .... 4 20
Listing 4.1 5 : HDL description of on SR latch with NOR gates.............................................. 4 23
listing 4.16: HDL description of o D lotch-VHDL ond Verilog ......................................... 4 - 24
listing 4 .17: HDL description of o SR-Flip-Flop-VHDL ond Verilog ....................................... .4 - 26
l isting 4.18: HDL description of a D flip-flop-VHDl ond Verilog .......................................... 4 28
listing 4.19 : HDL description of JK flip-flop .................... .................................................. 4 29
listing 4.20 : HDL description of o 3-bit compo rotor using adders....................................... 4 32
listing 4 .Ll : HDL description of SRAM memory cell. ..................... ..................................... 4 34
Listing 4.22 : HDL description for given sequential circuit............................... .................... 4 - 46
Listing 4 .23 : HDL description for given sequential circuit using VHDL and Verilog ............. 4 49
Listing 4 .24 : HDL description for 3-bit synchronous binary counter ..................................... 4 - 52
listing 4 .25 : HDL description of N-bit magnitude comparator using generate statement ........ 4 - 56
Listing 4.26 : HDL description of on N -bit asynchronous down counter using generate statement

.... ............ 4. 58

Copyrighted material

listing 4.27 : .HDl d escription o f N-bit memory word using genero te .... ..................... ........... 4 60
listing 4 .28 : HDl descrip""n o f N-bit reg ister using VHDl ond Verilog . ............................ 4 61
listing 4.29 : HDl description o f N-bit left shift register ........................................... ............ 4 62

listing 5.1 : HD l description of o full odder using procedure ond tosk-VH Dl ond Verilog ...... 5 - 4
l isting 5.2 : HD l description of on N-bit ripple corry odder using procedure ond toskVHDl ond Verilog ........................................................................................... 5 - 6
listing 5.3 : HDl code for converting on unsigned binary to on intege r using procedu re ond tosk

....................................................................................................... 5 - 8
listing 5.4 : HDl code for converting o fraction binary to reol using procedure ond tosk ........ 5 - 10
listing 5.5 : VHDl code for converting on unsigned integ er to binary using p rocedure ........... 5 - 12
listing 5.6 : VHDL code for converting o signed b inary to integer using procedure ................ 5 - 14
listing 5.7 : VHDL code for converting on intege r to signed binory using procedure ............... 5 - 15
listing 5.8 : HDl code for signed vector multip lication using procedure ond tosk .................. 5 - 17
listing 5.9 : HDL function to find the greater of two signed numbers .................................... 5 24
listing 5.10: VHDL functio n to describe the edge trigger D flip-flop .......... ........................... 5 26
listing 5.11 : Verilog function thot calcula tes loctoriol of o number .......................... ............ 5 27
l isting 5.12 : VHDL code for reading ond processing a text file containing integer numbers . .. 5 33
listing 5.13 : VHDL code for reading ond processing o text file containing reol numbers ........ 5 35
listing 5.14 : VHDL code for reading o string of chorocters into on orroy .............................. 5 - 36
l isting 5.1 5 : HDl code for writing integer numbers too file ........... .................................... . 5 - 37
listing 5. 16 : VHDl code for finding the percentage morks for o porticulor student. ............... 5 . 38
listing 5. 17: Verilog code for storing y = x

+ 10 in lodd.txt .......................... ....... ............... 5 40

listing 6.1 : Pockoge declorotion ....................................................................................... . 6 2


listing 6.2 : Package body ........................................... ...................................................... 6 - 3
listing 6.3 : HDl code for finding the largest e lement of on orray ..................... ... .................. 6 5
listing 6.4 : Mu ltiplication of two signed N-element vectors-VHDL and Verilog
listing 6.5: VHDL Description for addition of two (5 x 5] matrices.

.................. 6 - 7

. .................................. 6 11

listing 6.6 : HDL description of on Al U-VHDL ond Verilog ................................................ 6 . 13


listing 6.7: HDL descriptio n of 32x 8 SRAM-VHDl ond Verilog . . .................................... 6. 17
listing 6.8 : HDL code for the sta te machine in figure - VHDL ond Verilag

..................... 6 . 20

Copyrighted material

Listing 7.1 : M ixed-language description of o full odder ................................. ...................... 7 . 2


listing 7.2 : Mixed-language description of on or gate ........................................ ................. 7. 3
listing 7.3: Mixed -language description of o 12 -b it odder ... .......... .......... ............................ 7 - 4
Listing 7.4 : Mixed -language description of o 4-bit odder with o zero flog .............................. 7. 6
Listing 7 .5 : Mixed-language description of o master-slave D fl ip-flop ................................... 7 . 8
Listing 7.6 : Mixed-language description of o 4x4 comparator .............................................. 7. 9
Listing 7. 7 : Mixed-language description of o JK flip-flop ........................................ ........... 7 11
Listing 7 .8 : M ixed-language description of 3-bit counter with clear .................................... 7 12
Listing 7.9 : Mixed -la nguag e description of on N-bit asynchronous counter ......... ............. ... 7 15

Listing 8. 1 : VHDL code for entily system 1 ............................................................................ 8 3


Listing 8 .2 : VHDL code for entily system2 .. ............................................................ ........ ...... 8 3
Listing 8.3 : VHDL code for entity system3 .................................................... ..... ................... 8 3
Listing 8. 4 : VHDL code for entity system4 .................................................... ..... ................... 8 4
Listing 8 .5 : VHDL code for entily systems ............................................... ..... ............. ........... 8 . 4
listing 8.6 : VHDL code for entily system6 ..... ...... ........................................ .......... ........... ... 8 4
Listing 8.7 : VHDL code for entity system? .......... ........ ......................................... ................. 8 5
Listing 8. 8 : VHDL code for entity ALU .......... ..................................................... ................. 8 5
listing 8. 9 : VHDL code for entity orroy 1 ....... ................... ................................................... 8 6
listing 8. 10 : VHDL code for entity weekly activity ............................................................ .... 8 7
Listing 8. 11 : VHDL code for entity seguentiol circuit .............. ... .............................. ............. 8 9
Listing 8 .12 : Verilog code for module system 1 ......................... ........................ ........ ... ....... 8 9
Listing 8 .13 : Verilo g code for module system2 ......................... ..... .............. ...................... 8 l 0
Listing 8 .14 : Verilo g code for module system3 .............................. .................................... 8 10
Listing 8.15 : Verilog code for module orroy 1 ........ ........................ ....... ............................. 8 1 1
listing 8. 16 : VHDL code for o signal-assignment statement, 6 = A ..................................... 8 1 1
Listing 8 .17 : VHDL code for o signal-assignment statement, 6 = 3 A

4 ......................... 8 13

Listing 8 .1 8 : Struclurol Veri log code for the logic diagram in Fig . 8 .1 5 (b) . ..... .................... 8 14
Listing 8 .19 : VHDL voriobie-ossignment statement ........................ .................... ................. 8 15
Listing 8 .20 : Mopping logical opera tors In HDL ............................................... ...... ,.......... 8 17
Listing 8.21 : Example of if-else statement... ...................................................................... 8 19
Listing 8 .22 : Example of if-else statement ........................................................ ................. 8 19
Listing 8 .23 : Example of comparison using if-else sta tement ...................................... ........ 8 20

Copyrighted material

Listing 8.24 : Example of elseil and else-ii. ......................................................................... 8 22


Listing 8.25 : Example al ii statement with storage .......................... .................................... 8 24
Listing 8.26 : Else-ii statement with gate-level logic ....................................................... ..... 8 26
Listing 8.27 : Example of case mopping ............................................................................ 8 31
Listing 8.28 : Example of case mopping .............................. ............................................. . 8 32
Listing 8.29 : Verila"g cosex ............................................................................................... 8 32
listing 8.30 : Example of case with storage ................................. ..................................... .. 8 3 4
Listing 8.31 : A for-loop statement. ................................................................................. 8 37
Listing 8.32 : A Veri log example of task ............................................................ ................. 8 38
Listing 8.33 : Verilog example of a lundion ....... ................. ...................... ............. ............ 8 40
Listing 8.34 : Example of function synthesis .............................................................. ... ....... 8 40

Copyrighted material

Introduction
1.1 Why HDL?
We are familiar with the design of a digital system. The basic steps involved in
this process are,
a. Specify the desired behaviour of the circuit.
b. Synthesize the circuit.
c. Implement the circuit.
d. Test the circuit to check whether the desired specifications meet.
But as the size and complexity of digital systems increase, they can not be
designed manually; their design becomes highly complex. At their most detailed level,
they may consists of millions of elements, i.e. transistors or logic gates. So Computer
Aided Design (CAD) tools are used in the design of such systems. One such a tool is
a Hardware Description Language (HDL).
HDL describes the hardware of digital systems. This description is in textual form.
The Boolean expressions, logic diagrams and digital circuits (simple and complex) can
be represented using HDL.

The HDL provides the digital designer with a means of describing a digital
system at a wide range of levels of abstraction and at the same time,
provides access to computer-aided design tools to aid in the design process
at these levels.

The HDL, represents digital systems in the form of documentation which can
be understood by human as well as computers.

It allows hardware designers to express their design with behavioral


constructs. An abstract representation helps the designer explore architectural
alternatives through simulations and to detect design bottlenecks before
detailed design begins.

The HDL makes it easy to exchange the ideas between the designers.
(1 - 1)

Copyrighted material

Fundamentals of HDL

1-2

Introduction

It resembles a programming language, but the orientation of the HDL is


specifically towards describing hardware structures and behavior. The
storage, retrieval and processing of programs written using HDL can be
performed easily and efficiently.

HDLs are used to describe hardware for the purpose of simuJation,


modelling, testing, design and documentation.

1.2 A Brief History of HDL


The most prominent modern HDLs in industry are Verilog and VHDL. Verilog is
one of the two major Hardware Description Languages (HDLs) used by hardware
designers in industry and academia. Of course, VHDL is the other one. The industry
is currently split on which is better. Many feel that Verilog is easier to learn and use
than VHDL. Verilog is very C-like and liked by electrical and computer engineers as
most learn the C language in college. VHDL is very Ada-like and most engineers have
no experien ce with Ada. Let us take an overview of the brief history of both the
languages.

1.2.1 A Brief History of VHDL


VHDL is an acronym for "VHSIC Hardware Description Language" while VHSIC
is an acronym for "Very High Speed Integrated Circuits". VHDL is a hardware
description language that can be used to model a digital system at many levels of
abstraction, ranging from the algorithmic level to the gate level.
In 1981, in United States many companies were involved in designing the VHSIC
chips for Department of Defence. At that time, most of the companies were using
different hardware description languages to describe and develop their integrated
circuits. As a result, different vendors could not effectively exchange designs with one
another. Thus a need for standardized hardware description language for the designs,
documentation, and verification of the digital systems was generated. A team of three
companies, IBM, Texas instruments, and Intermetrics developed first version of VHDL.
To make this language an industry wide standard, the language transferred to IEEE
for standardization in 1986.
The standardization of VHDL began in February 1986 with adaptation of the
VHDL version 7.2. In 1987, the IEEE completed their mission and added several
enhancements to the language. These efforts introduced the IEEE Standard 1076-1987
version of VHDL, which was also recognized by American National Standards
Institute (ANSI). In 1993, some more features are added to VHDL to give the updated
version IEEE Standard 1076-1993. Later on many packages, for example, std_logic_l164
are added with the addition of several logic levels to the existing two logic levels.

Copyrighted material

Fundamentals of HDL

1.3

Introduction

1.2.2 A Brief History of Verilog HDL


Verilog was introduced in 1985 by Gateway Design System Corporation, now a
part of Cadence Design Systems, Inc's Systems Division. Until May, 1990, with the
formation of Open Verilog International (OVI), Verilog HDL was a proprietary
language of Cadence. It is the top HDL used by over 10,000 designers at such
hardware vendors as Sun Microsystems, Apple Computer and Motorola. Industrial
designers like Verilog. It provides the d igital designer with a means of describing a
digital system at a wide range of levels of abstraction, and at the same time, provides
access to computer-aided design tools to aid in the design process at these levels. Jt
allows hardware designers to express their design with behavioral constructs,
deterring the details of implementation to a latter stage of design in the design. An
abstract representation helps the designer to explore architectural alternatives through
simulations and to detect design bottlenecks before detailed design begins.
Verilog HDL allows a hardware designer to describe designs at a high level of
abstraction such as at the architectural or behavioral level as well as the lower
implementation levels (i.e. gate and switch levels) leading to Very Large Scale
Integration (VLSI) Integrated Circuits (IC) layouts and chip fabrication. A primary use
of HDLs is the simulation of designs before the designer must commit to fabrication.

1.3 Structure of the HDL Module


HDL contains the features of conventional programming languages such as Pascal
or C, logic description languages such as ABEL-HDL, an~. netlist languages such as
EDlF. The HDL module follows the general structure of software languages such as C
It has a source code that is written in high-level language style using text editors
provided by the HDL package, or it can be written using external text editors and
imported to the HDL package by copy and paste.
Verilog HDL, simply referred to as Verilog has different structure than the VHDL.
Let us discuss the structure of both the HDLs.

1.3.1 Structure of the VHDL Module


The main components of a VHDL description consists of following kinds of
declarations :

Package (optional)

Entity

Architecture

Configuration (optional)

The Fig. 1.1 shows the relationship of these basic blocks of VHDL program. A
design may include any number of package, entity, architecture and configuration
Copyrighted material

14

Fundamental s of HDL

Introduction

declarations. It is important to note that the entity and archit~ture blocks are
compulsorily required; however, the package and configuration blocks are optional.
Package

Configuration
Fig. 1.1 Relationship of VHDL design units
1.3.1.1 Package

There are some declarations which are common across many design units. A
package is a convenient mechanism to store and share such declarations. It is an
optional design unit. A set of declarations contained in a package declaration may be
shared by many design units. It defines items that can be made visible to other design
units. A package is represented by :

Package declaration

Package body (optional)

Package declaration

It defines the interface to the package. The syntax of a package declaration is given
below.
PACKAGE package_name IS

type
subtype
constant
signal
variable
subprogram
file
alise
component
attribute

declarations
declarations
declarations
d eclarations
declarations
declarations
declarations
declarations
declarations
declarations

Copyrighted material

15

Fundamentals of HDL

Introduction

attribute
specifications
disconnection specifications
use clauses
END package_name;

The items declared in a package declaration can be accessed by other design units
by. using the 'library' and 'use' clauses. This is explained in the further section. The
example of package declaration is given below.
package MUX 4-to-l_package is
component MUX 4-to-1

pon (MO, Ml, M2, M3

IN STD_LOGIC;

IN STD_LOGIC_VECTOR (1downto 0)

OUT STD_LOGIC;

and component;
and MUX 4-to-l_package;
Fig. 1.2 Package declaration for 4-to-1 multiplexer
Package body

It contains the details of a package, that is the behavior of the subprograms and
the values of the deferred constants which are declared in a package declaration. The
package body may contain other declarations. The syntax of it is as given below.
package body package_name is

subprogram bodies
complete constant declarations
subprogram declarations
type and subtype declarations
file and alias declarations
use clauses
and package_name;

The name of the package must be same as the name of its corresponding package
declaration. If the package declaration does not have any subprogram or deferred
constant declarations, a package body is not necessary.
1.3.1.2 Entity

It gives the specification of input/ output signals to external circuitry. An entity is

modelled using an entity de<;laration and atleast one architecture body. An entity X,
when used in another entity Y, becomes a component for the entity Y. Entity gives
interfacing between device and the other peripherals. An entity usually has one or
more ports, which are analogous to the pins on a schematic symbol. All information

Copyrighted material

1-6

Fundamentals of HDL

Introduction

must flow into and out of the entity through the ports. Each port must contain name,
data flow direction and type.
The syntax of a VHDL entity declaration is as shown below.
entity entity_name is
port (

signal_names : mode signal_type;


signal_names: mode signal_type;

signal_names : mode signal_type);


end entity_ name ;

The following section describes the different elements of entity declaration.


entity_name

It is an identifier selected by the user to name the entity.

signal_names

It is a List of user selected identifiers to name external interface


signals.

mode

The ports can be declared in four types which specify the signal
direction.

in

This mode is used for a signal that is an input to an entity (value is


read not written).

out

It is used for a signal that is an output from an entity. The value of


such a signal can not be read inside the entity's architecture. But it
can be read by other entities those use it.

inout

It is used for a signal that is both, an input to an entity and an


output from the entity.

buffer

The signal is an output from the entity and its value can also be
read inside the entity's architecture.

slgnal_type : It is a built-in or user defined signal type.

For example, there is a system having its inputs and outputs like rd, wr, ADD,
x, y, z, ad, al. The entity for this can be written as shown below.
entity gate_logic is
port (

wr
rd

: in std_logic;
: In std_logic;

ad
ADD

: inout std_logic_vector (7 downto 0);


: in std_logic_vector (0 to 3);

x,y,z

: out std_logic;

Copyrighted material

Fundamentals of HDL
al

1-7

Introduction

: buffer std_logic_vector (7 downto 0)

);

end gate_logic ;

Here rd, wr are inputs to the system so they are input ports. The ad is also input
signal but it is 8 bit so it is defined as vector (7 downto 0). It means 7 is assigned to
MSB of your signal and 0 is assigned to LSB of your signal. Similarly x, y, z are
output signals so they are defined as output ports. The al is coming out and is
defined as buffer signal, so that you can also read this signal.
1.3.1.3 Architecture

Architecture specifies behavior, functionality, interconnections or relationship


between inputs and outputs. It is the actual description of the design. An architecture
consists of two portions : architecture declaration and architecture body. An
architecture body specifies the internal details of an entity.

As a set of concurrent assignment statements (to represent dataflow)

As a set of interconnected components (to represent structure)

As a set of sequential assignment statement (to represent behavior)

As any combination of above three.

The syntax for architecture is given below


architecture architecture_ name of entity_name is

Declarations
begin

concurrent statements;
sequential statements;
end architecture_name;

To design any system, first we have to write the entity. In the architecture, we
write architecture_name for that entity. In declaration part, types, signals, constants,
function definitions, procedure definitions, component definitions etc. can be declared.
The variables can also be declared here. VHDL variables are similar to signals, except
that they usually do not have physical significance in a circuit. A variable declaration
is similar to a signal declaration, except that the 'variable' keyword is used as shown
below.
variable variable_names : variables_type;

Copyrighted material

1. 8

Fundamentals of HDL

Introduction

Example:

architectu re gate of or_gate Is


begin
Architecture
Process
statement

process (a,b)
begin

if a 'O' an d b
c< = o:
else
Sequential --+-- + ---t
c < = '1';
statements
end if:
end process;
end gate;

='O' the n

1.3.1.4 Co nfiguration

Configuration declarations may be used to associate particular design entities to


comp onent instances (unique references to lower-level components) in a hierarchical
design, or to associate a particular architecture to an entity. As their name implies,
configuration declarations are used to provide configuration management and project
organization for a large design.
Important points to remember while representing any module us!ng VHDL

1. Each statement in VHDL is terminated with a semicolon (;).

2. The language is case insensitive. Le. the uppercase an d lowercase letters are
considered as same.
3. The name should start with an alphabet letter and can include the special
char::.crer underscore LJ.
4. The name of the ports must be followed by a colon (:).
5. The architecture body starts with the predefined word begin, followed by
statements that detail the relationship between the outputs and inputs.
6. The comment should begin with two hyphens (--).
7. Leaving the blank spaces between two words or at the beginning of the line
are allowed.
8. Leaving the blank line(s) is allowed in the module.

Copyrighted material

Fundamentals of HDL

1-9

Introduction

1.3.2 Structure of the Verilog Module


The Verilog HDL describes a digital system as a set of modules. Each of these
modules has an interface to other modules to describe how they are interconnected.
Each module consists of a declaration and a body. In the declaration, name, inputs
and outputs of the module are listed. The body shows the relationship between the
inpu ts and the outputs. Usually, we place one module per file but that is not a
requirement. The mod ules may run concurrently, but usually we have one top level
module which specifies a closed system con taining both test data . and hardware
models.
A module is a basic building block of Verilog HDL. Modules can represent pieces
of hardware ranging from simple gate to complete systems. e.g. a microprocessor. The
struture of module is,
module <mod ule name> <port list>;
< declares >
< module items>
endmodule

The <module name> is an identifier that uniquely names the module. The module
name is user selected . It should start with alphabetical letter and it can include the
special character underscore (j. In contrast to VHDL, Verilog is a case sensitive. The
<port list> is a list of input, inout and output ports which are used to connect to other
modules. The <declares> section specifies data objects as registers, memories and wires
as wells as procedural constructs such as functions and tasks.
The Listing. 1.1 shows the example Verilog code. This code is the description for
the logic circuit shown in the Fig. 1.3.
....

Listing 1.1: Description of circuit using basic gates


module BG_circuit (P, Q , R, Y);
input P, Q, R;
output Y;
wires, t;
assign s = -P;
assign t = s & O;
assign Y = t

I R;

endmodule

Fig. 1.3 Circuit using basic gates

Copyrighted material

Fundamentals of HDL

Introduction

1 -10

1n contrast to VHDL, in Verilog, input and output port signal types are implicitly
declared. We can declare more than one input or output on the same line using a
comma (,) to separate each input as shown in the Listing 1.1.
Important points to remember while representing any module using Verilog HDL.

1. Each statement

in Verilog HDL except comment and last statement


(endmodule) is terminated with a semicolon (;).

2. The blank lines are allowed in the module and also spaces between the words
or at the begi1ming of the line are allowed.
3. The language is case sensitive. i.!?. the uppercase and lowercase letters are
considered as different.
4. The function of a circuit is indicated by the text between two slashes (I/) and
the end of the line which is interpreted as a comment.
5. Verilog uses about 100 keywords. All must be given in lowercase.
6. Identifiers are the names given to variables. With these names, they can be
referred in the design. They consist of alphanumeric characters and underscore
(-). They can not start with a number.
7. The input and output keywords are used for declaring inputs and outputs.
The keyword inout is used for a signal that is both, an input and an output.
8. Internal connections within the circuit are declared with the keyword wire.
Note :

The ke}"vords are highlighted by printing them in bold. But it is not the
requirement of Verilog HDL.

1.4 Operators
U$

HDL has an extensive list of operators to perform a wide variety of functions. Let
:.ee the operators in VHDL and Verilog HDL.

1.4.1 Operators in VHDL


VHDL includes the following kinds of operators :

Logical

Relational

Arithmetic

Shift and Rotate

Copyrighted material

Fundamentals of HDL

Introduction

1 - 11

1.4.1.1 Logical Operators

Logical operators, when combined with signals and/or variables, are used to
create combinational logic. VHDL provides the logical operators as shown in the
Table 1.1.
Operator

AND

OR

NANO

NOR

XOR

XNOR

NOT

Equivalent Logic

=V=C>=D-

=D=lD-=)[>--I>--

Operand Type

Result Type

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Table 1.1 VHDL logical operators

These operators are defined for the types bit:' std_logic and Boolean, and for
one-dimensi011al arrays of these types (for example, an array of type bit_vector or
std_logic_vector).
The effects of the logical operators are defined in the follow ing tables. The symbol
T represents TRUE for type BOOLEAN, '1' for type BIT; the symbol F represents
FALSE for type BOOLEAN, 'O' for type BIT.

Copyrighted material

Fundamentals of

HDL

1 12

Introduction

A and B

A or B

A xor B

Anand B

A nor B

not A

1.4.1.2 Relational Operators

Relational operators are used to create equality or magnitude comparison


functions. VHDL provides the relational operators as shown in the Table 1.2.
Operator

Description

Operand Type

Result Type

Equality

Any type

Boolean

I=

Inequality

Any type

Boolean

<

Less than

Scalar or discrete array type

Boolean

<=

Less than or equal

Scalar or discrete array type

Boolean

Greater than

Scalar or discrete array type

Boolean

Greater than or equal

Scalar or discrete array type

Boolean

>
>=

Table 1.2

The following statement demonstrates the use of some of the above relational
operators :
if (A/= B) then ...

A is compared to B. If A is equal to B, then the value of the expression (A/= B) is


false (O}; otherwise it is true (1 ).
if (A> B) then ...

If A is greater than B, the value of the expression (A > B) is true (1); otherwise it
is false (0).

Note : The operands of each relational operator must be of the same type. The
result type of each relational operator is the predefined type Boolean.

Copyrighted material

Fundamentals of HDL

1 -13

Introduction

1.4.1.3 Arithmetic Operators

Arithmetic operators are used to create arithmetic functions. Arithmetic operators


provided by VHDL are listed in Table 1.3.
Operator

Operation

Operands (A or
B) Type

Result Type

Addition
A+B

A numeric
B numeric

numeric

Subtraction
A-B

A numeric
B numeric

numeric

Multiplication
AxB

A integer or real
B integer or real

Same as A

Multiplication
A xB

A physical
B integer or real

Same as A

Multiplication
A xB

A integer or real
B physical

Same as B

Division
A +B

A integer or real
B integer or real

Same as A

Division
A +B

A integer or real
B physical

Same as B

Division
A +B

A physical
B integer or real

Same as A

mod

Modulus
A mod B

A only integer
B only integer

integer

rem

Remainder
A rem B

A only integer
B only integer

integer

abs

Absolute
abs (A)

A numeric

.
.

&

..

Concatenation
(A & B)

positive numeric

A numeric or

array
B numeric or
array

Exponent

A B

A real or integer
B only integer

Same as A

Same as A

Table 1.3 Arithmetic operators in VHDL

Copyrighted material

Fundamentals of HDL

1 -14

Introduction

1.4.1.4 Shift and Rotate Operators

These operators shift or rotate the bits of the operand right or left by some
specified number of bit positions. There are two types of shift operators : Logic shift
operator and arithmetic shift operator. When logical shift operator is used, the vacant
positions created due to shift operation are filled with zeros. On the other hand, when
arithmetic right shift operator is used the vacant positions created due to shift
operation are filled with MSB (sign bit). The arithmetic left shift is same as the logical
left shift.
The Table 1.4 shows the shift and rotate operators supported in VHDL. To
understand the function of these operators, assume that operand A is the 4-bit vector
with value 1101.
Operator

Operation

Description

Operand A
Operand A after
before operation
operation

sll

A sll 1

Shift A one position left


logical

110 1

10 10

Sil

A sll 2

Shift A two positions left


logical

110 1

0 100

srl

A Sri 1

Shift A one position


right logical

110 1

0 110

srl

A Sri 2

Shift A two positions


right logical

110 1

0 0 11

sla

A sla 1

Shift A one position left


arithmetic

110 1

10 10

sra

A sra 1

Shift A one position


right arithmetic

1 10 1

1 110

rol

A rol 1

Rotate A one posttion


left

110 1

10 11

ror

A ror 1

Rotate A one position


right

110 1

1 110

Table 1.4 Shift and rotate operators in VHDL

Note:

Shift left by 1 bit performs multiplication by two while shift right by 1 bit
performs division by two.

With rotate operation we can restore the original contents after one complete
cyclic rotation. This is not the case with shift operation.

1.4.1 .5 Operator Precedence

The precedence of operators is shown in Table 1.5. The operators belongs to same
row have the same precedence level. Operators are listed in order of decreasing
precedence.
Copyrighted material

Fundamentals of HDL

1 -15

Type

Introduction
Operators

-. abs

Miscellaneous operators

not (Highest precedence)

Multiplying operators

I mod rem

Sign

Adding operators

- &

Relational operators

= I= < <= > >=

Logical operators

and

or nand nor

xor xnor (Lowest precedence)

Table 1.5

Operators of higher precedence are associated with their operands before operators
of lower precedence. For a sequence of operators wi~ the same precedence level, the
operators are associated with their operands in textual order, from left to right. The
precedence of an operator is fixed and may not be changed by the user, but
parentheses can be used to control the association of operators and operands.

1.4.2 Operators in Verilog HDL


Verilog HDL includes following kinds of operators :

Boolean Logical

Unary Reduction Logical

Bitwise logical
Relational
Binary Arithmetic
Unary Arithm etic
Other

1.4.2.1 Boolean Logical Operators

Logical operators operate on logical operands and return a logical value, i.e.,
TRUE(!) or FALSE(O). Used typically in if and while statements. Do not confuse
logical operators with the bitwise Boolean operators. For example, 1 is a logical NOT
and - is a bitwise NOT. The first negates, e.g. !(5 == 6) is TRUE. The second
complements the bits, e.g. -{l,0,1,1) is 0100.
Operator
!

Name
Logical negation

&&

Logical AND

11

Logical OR

Copyrighted material

Fundamentals of HDL.

1 -16

Introduction

1.4.2.2 Unary Reduction Logical Operators

Unary reduction operators operate on a single operand. They produce a single bit
result from applying the operator to all of the bits of the operand. For example, in
statement B =&A, if A. = 1101, then B = (1 & 1 & 0 & 1) = 0.
Operator

Name

&

ANO reduction

OR reduction

XOR reduction

-&

NANO reduction

-1

NOR reduction

XNOR reduction

1.4.2.3 Bitwise Logical Operators

Bitwise operators operate on the bits of the operand or operands. The result of A
& B is the AND of each corresponding bit of A with B. For example, if A = 1011 and
B = 0101, then C= A & B gives C = 0001. Except for bitwise .negation, these operators
operate on a two operands.
Operator

Operation

Bitwise negation

&

Bitwise ANO

Bitwise OR

Bitwise XOR

-&

Bitwise NANO

- 1

Bitwise NOR

_11.

or"'-

Equivalence bitwise NOT XOR

1.4.2.4 Relational Operators

Relational operators compare two operands and return a logical value, i.e. TRUE(l)
or FALSE(O). For example, if A = 0100 and B = 0100, then statement if (A== B) results
True(l). If any bit is unknown, the relation is ambiguous and the result is
unknown(X).

Copyrighted material

Fundamentals of HDL

Introduction

1 - 17
Ope rator

Operatio n

>

Greater than

>=

Greater than or equal

<

Less than

<=

Less than or equal

--

Logical equality

!=

Logical inequality

1.4.2.5 Binary Arithmetic Operators

Binary arithmetic operators operate on two operands. Register and net, i.e. wire,
operands are treated as unsigned. However, real and integer operands may be signed.
U any bit of an operand is unknown ('x') then the result is unknown.
Operator

Ope ration

Add ition

Subtraction

Multiplication

Division

Modulus

Comments

Divide by zero produces an x. i.e. unknown.

1.4.2.6 Unary Arithmetic Operators


Operator

Operatio n

Comments

Unary minus

Changes sign of its operand.

1.4.2.7 Other Operators


The conditional operator operates much like in the language C.
O pe rator

O peratio n

Comm ents

---

Case equality

The bitwise comparison includes comparison of x and z values. All


bits must match for equality. Returns TRUE or FALSE.

!==

Case inequality

'

The bitwise comparison includes comparison of x and z values.


Ally bit difference produces inequality. Returns TRUE or FALSE.
Concatenation joins bits together with 2 or more comma-separated
expressions. e.g. (A{O], 0(1:7]} concatenates the zero bit of A to
bits 1 to 7 of B.

Copyrighted material

Fundamentals of HDL
<<

1 -18

Introduction

Shift left

Vacated bit positions are filled with zeros, e.g. A


two bits to left with zero fill.

Shift right

Vacated bit positions are filled with zeros.

?:

Conditional

=A < 2; //shifts A

Assigns one of two values depending on the conditional expression


e.g . A C>D ? B+3 : B-2 means
if C greater than D, the value of A is B+3 otherwise B - 2.

1.4.2.8 Operator Precedence


The precedence of operators is shown in Table 1.6. The top of the table is the
highest precedence and the bottom is the lowest. Operators on the same line have the
same precedence and associate left to right in an expression. Parentheses can be used
to change the precedence or clarify the situation. We strongly urge you to use
parentheses to improve readability.
Operators

Type

Unary operators

Multiplying operators

.. I o/o

Sign operators

Relational operators

<< >>

& -&

I -I

'

_, + - (Highest precedence)

< <=

> >=

== != === -==
Logical operators

& -&

I- I

&&
II
Conditional operators

?: (Lowest precedence)

Table 1.6 Operator precedence in Verilog HDL

1.5 Data Types


To match the need for the hardware, the HDL supports variety of data types. For
example, if we are describing a signal, we need to specify its type (i.e. the values that
the signal can take), such as type bit, which means that the signal can have values
either 0 or 1; or type std_logic, in which the signal can have eight values that include
0, 1 and high impedance.
In this section, we discuss the data types supported by VHDL and Verilog HDL.
Copyrighted material

Fundamental s of HDL

1 -19

Introduction

1.5.1 VHDL Data Types


VHDL supports a variety of data types. The type of a variable, signal, or constant
determines the operators that are predefined for that object as well as the range of
values that it can take on. The VHDL data types can be broadly classified into
following five data types :

Scalar types : The scalar types include numeric data types and enumerated
data types. The numeric types consist of integer, floating point (real) and
physical types. Bit, Boolean and character are all enumerated types.

Composite types : Array and record types are composite da ta types. The
values of these types are collection of their elements.

Access types : They are pointers; they provide access to objects of a given
data type.

File type : They provide access to object tha t contain a sequence of values of
a given type.

Other types : They include the data types provided by the several external
libraries.

1.5.1 .1 Scalar Types

We have seen that, the scalar types consist of enumeration types, integer types,
physical types, and floating point types. Enumeration, d ata types and integer types are
called discrete types. On the other hand, in teger types, floating point types and
physical types are called numeric types.
Integer type

As the name indicates, it covers all integer values, the values can be positive or
negative. The defau lt range of Integer is -2147483647 to +21 47483647. However, user
can specify a shorter range by using the pre-defined word ran ge. The shorter range
may require less bits to represent the number when binary encoded. We can define
the subtype of base type whose range must be wholly contained within the bounds of
the range of base type.
Examples:

type num is integer;


type long is range -32768 to 32768;

-- 16 bit b inary encoding.

type short is range 0 to 255;

-- 8 bit binary encoding.

sub typ e shorter is short range 0 to 31; -- 5 bit binary encod ing.
sub type shortest is short range 0 to 15; -- 4 bit binary encoding.

Copyrighted material

Fundamentals of HDL

1 20

Introduction

Note : The encoding of integers in a binary format means that all ranges are rounded
up to the nearest power of two. This means that if shorter had been declared
as:
subtype shorter is short range 0 to 15;

Then the object is synthesized into 4 wires. Objects declared type of type integer
without a range constraint will be synthesized into 32 wires.
Real (floating point) type

Floating point type definition defines both a type and subtype of that types. The
default range of floating point is -1E38 to + IE38. Like integer type, here also we can
specify the shorter range by using the predefined word range.
Examples :
type Real_data is real;
type Voltage is range to -12.0 to +12.0;
Subtype min voltage is range - 5.0 to +5.0;

Enumerated types
Bit, Boolean, Character and severity_level are the enumerated types. These are
defined in a library such as std or ieee.
Bit data type allows only two values 0 or 1. It is used to describe a signal that
takes only l(High) or O(Low). The type Boolean has two values, True(l) or False(O).
Both True and False are predefined words.
The type character constitutes the 128 characters of the ASCII character set. These
character values are called character literals and are always written between two
single quotes (' '). For example, 'A', '_', ' 3 ' and so on.
An object with type severity can take one of four values : note, warning, error or
failure. This type is typically used in assertion statements.

Copynqhted material

1 - 21

Fundamentals of HDL

Introduction

Examples :
type Bit is ('O', '1');
type Switch_level is ('O', ' 1', 'x');

Physical type

Values of a physical type represent measurements of some quantity. Any value of


a physical type is an integral multiple of the base unit of measurement for that type.
For example, time (e.g. second, millisecond, microsecond, etc.) and voltage (e.g., volt,
millivolt, microvolt, etc.)
A physical type definition defines both a type and a subtype of that type. Each
unit declaration (either the base unit declaration or a secondary unit declaration)
defines a unit name. Unit name declared in secondary unit declaration must be
directly or indirectly defined in terms of integral multiples of the base unit of the type
declaration in which they appear.
Examples :
type time is range -1E18 to 1E18
units
fs;

ps = 1000 fs;
ns = 1000 ps;
us = 1000 ns;
ms= 1000 us;

-- femtosecond
picosecond
nanosecond
-- microsecond

-- millisecond
sec
1000 ms; -- second
min = 60 sec; -- minute
end units;
type distance is range 0 to 1E16
units
-- base unit :
A''
-- angstrom
-- metric lengths;
nm
10A;
nanometer
um
= 1000 run;
micrometer (or micron)
mm = 1000 um;
-- millimeter
cm= 10 mm;
-- centimeter

Copynqhted material

Fundamentals of HDL
m = 1000 mm;
km= 1000 m;
-- English lengths :
mil= 254000 A;
inch = 1000 mil;
ft = 12 inch;

yd= 3 ft;
fin = 6 ft;

Introduction

-meter
kilometer
.. mil

-- inch
foot
yard
fathom

mi= 5280 ft;


lg = 3 mi;
end units;
x : distance;

1 - 22

-- mile

league

y : time; z : integer:

x := SA + 13 ft - 27 inch; arithmetic operations


y := 3ns + 5 min;
on physical data type
z := ns/ps;
x := z* mi;

y := y/10;

The arithmetic operations are predefined for all physical types. It is an error if the
execution of such an operation cannot deliver the correct result (that is, if the value
corresponding to the mathematical result is not a value of the physical type).
User-defined types

The user can define a type by using the predefined word type.
Example :

type Multi_leveUogic is (low, high, rising, falling);


type arith_op is (add, sub, mul, div);
Here, multi_level_logic and arith_op are the user defined types. The variables
declared using such data types can take values mentioned in the data type definition.
For example,
Variable operation : arith_op := sub;
Variable level : Multi_level_logic := high;
1.5.1.2 Composite Types

Composite types are used to define collection of values. These include both arrays
of values (collection of values of a single type) and records of values (collection of
values of the same or different types).

Copyrighted material

Fundamentals of HDL

1 - 23

Introduction

An object of a composite type represents a collection of objects, one for each


element of the composite object. A composite type may only contain elements that are
of scalar, composite, or access types; elements of file types are not allowed in a
composite type. Thus, an object of a composite type ultimately represents a collection
of objects of scalar or access types, one for each non-composite subelement of the
composite object.
Array types

An array object is a composite object consisting of elements that have the same
subtype. The name for an element of an array uses one or more index values
belonging to specified discrete types. The value of an array object is a composite value
consisting of the values of its elements.
An array object is characterized by the number of indices (the dimensionality of
the array), the type, position and range of each index and the type and possible
constraints of the elements. The order of the indices is significant.
A one-dimensional array has a distinct element for each possible index value. A
multidimensional array has a distinct element for each possible sequence of index
values that can be formed by selecting one value for each index (in the given order).
The possible values for a given index are all the values that belong to the
corresponding range; this range of values is called the index ran ge.
Example:

type num is integer ;


type numarr is array (7 d ownto 0) of num;
-- numarr is an array of 8 integer numbers
type my_word is array (0 to 31) of BIT;
-- a memory word type with an ascending range

type data_in is array (7 downto 0) of five_level_logic;


-- an input port type with a descending range

-- Example of unconstrained array declarations


type memory is array (integer range <>) of my_word;
-- a memory array type

Copyrighted material

Fundamentals of HDL

1 24

Introduction

string and bit_vector are the predefined array types, which are defined in
package std.
The values of the predefined type string are one-dimensional arrays of the
predefined type character, indexed by values of the predefined subtype positive;
subtype pos!tive is integer range 1 to integerhigh;
type string is array (positive range <>) of character;
The values of the predefined type bit_vector are one-dimensional arrays of the
predefined type BIT, indexed by values of the predefined subtype natural:
subtyp e natu ral is integer range 0 to integerhigh;
type bit_vector is array (natural range <>) of bit;

Record type
A recod type is a composite type, objects of which consist of named elements.
The value of a record object is a composite value consisting of the values of its
~iements. The record type is analogous to the record datatype in pascal and the struct
decl:uation in C.
record type definition creates a record types; it consists of the element
declarations, in the order in which they appear in the type definition.
A

Example :
type DATE is
record
DAY

: INTEGER range 1 to 31

MONTH : MONTH_NAME;
YEAR

: INTEGER range 0 to 4000;

end record;

Copynght8d maten:il

Fundamentals of HDL

1 - 25

Introduction

1.5.1.3 Access Ty pes

Values belonging to an access type are pointers to a dynamically allocated object


of some other type. These are similar to pointers in pascal or C languages.
Example:
type ptr is access date;
ptr is an access type w h ose values are
-- addresses that point to object of type date.
1.5.1.4 File Type

File types are used to define objects representing files in the host system
environment. The value of a file object is the sequence of values contained in the host
system file.
type_file _type_name Is file of type_name;

The type mark in a file type definition defines the subtype of the values contained
in the file. The type mark may denote either a constrained or an unconstrained
subtype. The base type of this subtype must not be a fi le type or an access type. If the
base type is a composite type, it must not contain a subelement of an access type. If
the base type is an array type, it must be a one-dimensional array type.
Examples :
file of string

-- Defines a file type that can contain

file of natural

-- an indefinite number of strings


Defines a file type that can contain
- only non-negative integer values

Three operations are provided for objects of a file type. Given the following file
type declaration :
type FT is file of TM :

Where type mark TM denotes a scalar type, a record type, or a constrained array
subtype, the following operations are implicitly declared immediately following the
file type declaration :
procedure read (F : in FT; valu e : out TM);
proced ure write (F : out FT; value: in TM);
function endfile (F: in FT) return b oolean;

Procedure read retrieves the next value from a file. Procedure write appends a
value to a file. Function endfile returns False if a subsequent read operation on an
input file can retrieve another value from the file; otherwise it returns true. Function
endfile always returns true for an output file.

Copyrighted material

1 - 26

Fundamentals of HDL

Introduction

1.5.1.5 Other Types


There are several other types provided by external library, IEEE. This library
contains a std_logic_l 164 package which supports more types. Let us discuss them.
std_Logic type

std_logic is a data type defined by IEEE standard 1164, and defined in the file
ieee.vhd.std_logic is an enumerated type. This logic has nine v'llues as listed in
Table. 1.7.
Value

Definition

- Uninitialized

- Forcing unknown

- Forcing 0

- Forcing 1

z
w

- High impedance
- Weak unknown

- Weak 0

- Weak 1

- Don't care

Table 1.7

The std_logic data type is very important for both simulation and synthesis.
Std_logic includes values that allow us to accurately simulate such circuit conditions
as unknowns and high-impedance stages. For synthesis purposes, the high-impedance
and don't -care values provide a convenient and easily recognizable way to represent
three-state enables and don't-care logic. For synthesis, only the values 0, 1, z and have meaning and are supported.
std_lugic_vector type

The type std_logic_vector represents an array of bits whose type is std_logic.


Example:
Port (I : in std_logic_vector (7 downto O);
0: out bit);

In the above example, port I is declared as type std_logic_vector which has 8 bits.
Signed

The type signed is a numeric type. It is declared in the external package


numeric_std and represents signed integer data in the form of an array. The left most

Copyrighted material

1 - 27

Fundamentals of HDL

Introduction

bit of objects of signed type represents sign and such objects are represented in 2's
complement form. let us see the object definition.

In the above definition, the variable difference is declared as signed type and has
5 bits with initial value 10011, or - 13.
Unsigned

The type unsigned represents integer data in the form of an array of std_logic and
it is declared in the external package numeric_std. Let us see the object definition
variable num : unsigned (4 downto 0) := 10011; In the above definition, the variable
num is declared as unsigned type and has 5 bits with initial value 10011, or 19.

1.5.2 Verilog Data Type


The set of Verilog HDL data types is designed to represent the data storage and
transmission elements found in digital hardware. Since the purpose of Verilog HDL is
to model digital hardware, the primary data types are for modeling registers (reg)
and nets (wire ). The reg variables store the last value that was procedurally assigned
to them whereas the wire variables represent physical connections between structural
entities such as gates. A wire does not store a value; its value changes continuously
by the circuit that are driving it.
The Verilog HDL also supports several other data types including integers, real,
parameters and arrays.
1.5.2.1 Nets (Wire) and Registers

The reg and wire data objects may have the following possible values :
Value

Definition

logical zero or false

logical one or true

unknown logical value

high impedance of tristate gate

The reg variables are initialized to x (unknown logic value) at the start of the
simulation. Any wire variable not connected to something has the x value. We may
specify the size of a register or wire in the declaration. For example, the declarations
wire Dl;
wire DO = t 'bO;

reg flag;

Copyrighted material

Fundamentals of HDL

1. 28

Introduction

Specify wires 0 1 and DO to be single bit wide. The initial value of DO is l'bO,
which represents 1 bit with value 0.
When the size of the reg or wire is more than 1 bit then registers and wires are
declared as vectors. Vectors are declared by brackets. The bits in vectors can be
referenced by the notation (<start-bit>:<end-bit>]. For example, the declarations
reg (0:7( A, B;
wire 10:3) Dataout;
reg (7:0) C = 8'b10001010;
reg (7:0) D ~ 3'd138;
A = 8'b01011010
B = {A(0:3) I A(4:7(, 4'b0000};
Specify registers A and B to be 8-bit wide with the most significant bit the zeroth
bit, whereas the most significant bit of register C and register D is bit seven. The wire
Dataout is 4 bits wide. C holds a value of 10001010 (b stands for binary). D holds the
same value as C (10001010); however it is specified in decimal 138 (d stands for
decimal).
B is set to the first four bits of A bitwise or-ed with the last four bits of A and

then concatenated with 0000. B now holds a value of 11110000. The II brackets means
the bits of the two or more arguments separated by commas are concatenated
together.
An argument may be replicated by specifying a repetition number of the form :

Here are some examples :


c = {2{4'b1011}};
II C assigned the bit vector 8'b10111011
C = {{4{A(41} }, A[4:71};
11 first 4 bits are sign extension
vectors
of registers. For example, Mem is 1 K words
Memories are specified as
each 32-bits.
reg [31:0) Mem (0:1023);
The notation Mem(O) references the zeroth word of memory. The array index for
memory (register vector) may be a register. Notice that one can not refer a memory at
the bit-level in Verilog HDL. If we want a specific range of bits in a word of memory,
we must first transfer the data in the word to a temporary register.
1.5.2.2 Abstract Data Types : integer, real time

In addition to modeling hardware, there are other uses for variables in a hardware
model. For example, the designer might want to use an integer variable to count the
number of times an event occurs. For the convenience of the designer, Verilog HDL

Copyrighted material

Fundamentals of HDL

1 - 29

Introduction

has several data types which do not have a corresponding hardware realization. These
data types include integer, real and time. The data types integer and real behave
pretty much as in other languages, e.g. C. Be warned that a rag variable is unsigned
and that an integer variable is a signed 32-bit integer. This has important
consequences when we subtract.
time variables hold 64-bit quantities and are used in conjunction with the $time
system function. Arrays of integer and time variables (but not reals) are allowed.
Multiple dimensional arrays are not allowed in Verilog HDL.
Examples:

integer Count;
integer K(1:64J;
real cost;
time Start, Stop;

//simple signed 32-bit integer


//an array of 64 integers
// declares cost as real
// Two 64-bit time variables

1.5.2.3 Parameter

Parameter type is used to define global constants. We can declare global constants
by predefined word parameter.
Examples:

parameter N = 0;
parameter M = 7;
reg (M:NJ C = 8'b10001010;

//use of constants to define register width

1.6 Styles or Types of Descriptions


In a VHDL or Verilog program, architecture body (VHDL) or the module (Verilog)
contains a series of concurrent statements. All concurrent statements execute
simultaneously. HDL has several different concurrent statements. Also, it has a
mechanism which bundles a set of sequential statements which operate as a single
concurrent statement. The way in which these statements are used is called the
modeling style or types of descriptions". Thus these statements give rise to six
different modeling styles or types of descriptions a~,

Behavioral
Data flow
Structural
Switch-level
Mixed-Type
Mixed-Language

Copyrighted material

1 30

Fundamentals of HDL

Introduction

Let us see the HDL uescription of full adder shown in the Fig. 1.4

Fig. 1.4 Implementation of full-adder

1.6.1 Behavioral Descriptions


It is sometimes possible to directly describe the behavior or the functionality of a
circuit. Such a modeling style is called behavioral modeling which is very similar in
syntax and semantics to that of a high-level programming language (For example : C,
Pascal). A behavioral description models the system as to how the outputs behave
with the inputs.

In VHDL, the behavior of the entity is expressed using sequentially executed,


procedural code. The key mechanism used to model the behavior of the entity is, a
process statement.
)II-

Listing 1.2 : Example of VHDL behavioral description


entity full_ add is
port (A, B, Cin : in bit;

Sum, Cout : out bit);


end full_add;

architecture adder of full add is


begin
process (A, B, Cin)

begin

Sum < = A xor B xor Cin;


Cout < = (A and B) or (Cin and A) or (Cin and B);
end process;
end adder;

In Verilog, the key mechanism used to model the behavior is predefined words
always or initial.

Copyrighted material

Fundamentals of HDL
....

1 - 31

lntrQduction

Li sting 1.3 : Example of Verilog behavioral description


module full_ add (A, B, Cin, Cout, Sum);
input A, B, Cin;
output Sum, Cout;
r e g Sum, Cout;
always @(A, B, Cin)
begin

Sum = (A

B)

Cout = (A & B)

Cin;

I (Cin &

A)

I (Cin &

B);

end
endmodule

1.6.2 Dataflow Design Elements


Data flow describes how the circuit signals flow from the inputs to the outputs.
There are some concurrent statements which allow to describe the circuit in terms of
operations on signals and flow of signals in the circuit. When such concurrent
statements are used in a program, the style is called a 'dataflow design'. Concurrent
signal assignment statements are used in. this type of modeling style.
....

Li sting 1.4 : Example of VHDL data-flow description


entit y full_add is
port (A, B, Cin : in bit;
Sum, Cout : out b it);
e nd full_add;
architecture adder of full add is
begin

Sum < = A xor B xor Cin;


Cout <

= (A and B) or (Cin and A) or (Cin and B);

end adder;

In Verilog, predefined word assign is used to assign a value to the left-hand side
of a s igna l-ass ignme nt s ta te m ent.

....

Listing 1.5 : Exampl e of Verilog data-flow description


module full_add (A, B, Cin , Cout, Sum);
input A, B, Cin;
output Sum, Cout;
ass ign Sum

= (A

B)

a ssign Cout = (A & B)

Cin;

I (Cin &

A)

I (Cin &

B);

endmodule

Copyrighted material

Fundamentals of HDL

1 - 32

Introduction

The built in operators of VHDL (for example : AND, OR,"NOT) and Verilog (for
example & I ") are used in the expression.
Here, the data flow model for the full_add is described using a two concurrent
signal assignment. In a signal assignment statement, the symbol <= implies an
assignment of a value to a signal in VHDL. The value of the expression on the
right-hand-side of the statement is computed and is assigned to the signal on the
left-hand-side, called a target signal. In Verilog, predefined word assign is used to
assign a value to a signal. A concurrent signal assignment is executed only when any
signal in the expression on the right-hand-side has an event on it, that is, the value of
the signal changes.

1.6.3 Structural Design Elements


In structural design, a VHDL and Verilog uses components or gates to model the
system. The important features of VHDL structural type of architecture body are :

Design hierarchy

Components are used

Each component is simulated separately

In the structural modeling, an entity is described as a set of components connected


by signals, that is, as a netlist. The components used in an architecture may be from a
library or may be ones that were previously defined as part of a design.
entity full_add is
port (A, B, Cin : in bit;
Sum, Cout : out bit);
end full_add;
architecture adder of full add is
component xor3
port ( 11, 12, 13 : in bit;
01 : out bit );
end component;
component and2
port ( 11, 12 : in bit;
01 : out bit );
end component;
component or3
port ( I1. 12, 13 : in bit;
01 : out bit );
end component;
signal S1, S2, SJ : bit;

Copyrighted material

Fundamentals of HDL

1 - 33

Introduction

begin

Y1 : xor3 port map (A, B, Cin, Sum);


Xl : and2 port map (A, B, S1);
X2 : and2 port map (A, Cin, S2);
X3 : and2 port map (B, Cin, S3);
Y2 : or3 port map (Sl, S2, SJ, Cout);
end adder;
The name of the architecture body is adder. The entity declaration for full_add
specifies the interface ports for this architecture body. The architecture body is
composed of two parts : the declarative part (before the keyword begin) and the
statement parts (after the keyword begin). The components may either be predefined
components in a library or they may later be bound to other components in a. library.
The declared components are instantiated in the statement part of the architecture
body using component instantiation statement. Yl, Xl, X2, X3, Y2 are component
labels for this component instantiations. I1 is connected to signal A, 12 is connected to
signal B, 13 is connected to signal Cin, and 01 is connected to Sum in portmap xor3
gate. Similarly, port maps for and2 and or3 are defined. Note that in this case, the
signals in the port map of a component instantiation and the port signals in the
component declaration are associated by position. A component instantiation statement
is a concurrent statement.

1.6.4 Switch-Level Descriptions


In switch-level description the system is described using transistors which are
operated as switches. They are usually used to describe relatively small-scale digital
systems. The verilog uses keywords nmos, . pmos, cmos, tranifo, tran and tranifl to
describe the system. The VHDL does not have built-in .switch-level primitives;
however we can construct packages to include such primitives and attach them to the
VHDL module.
....

Listing 1.6 : VHDL switch-level description


library ieee ;

use ieee.std_logic_1164.all;
entity Inv la
port (X : in std_logic;

Y : out std_logic);
end Inv;
architecture Inverter of Inv la
component nmos
port (01
: out std_logic;
11, 12
: in std_logic);

Copyrighted material

1 . 34

Fundamentals of HDL

Introduction

en d component;
Component pmos
port (01
: out std_logic;
11, 12
: in std_logic);
en d component;
- pmos and nmos are keywords for switch level
for all : pmos use entity work.mos (pmos_behavioral);
for all: nmos use entity work.mos (nmos_behavioral);
-- above two statements refer the mos package.
constant vdd : std_ logic : = '1 ';
constant gnd: std_logic := 'O';
be gin
p : pmos port map (Y, vdd, X);
n : nmos port map (Y, gnd, X);
end inverter;

....

Listing 1.7 : Verilog switch-level description


module Inv (Y, X);
inputX;
output Y;
supply 1 vdd;
supply 0 gnd;
pmos p (Y, vdd, X);
nmos n(Y, gnd, X);
endmodule

1.6.5 Mixed-Type Descriptions


Mixed type or mixed-style descriptions use more than one type or style of the
basic styles discussed above. The listing 1.8 and 1.9 show an example of mixed type
description which uses data-flow and behavioral descriptions .
..,.

Listing 1.8 : Example of VHDL mixed-type description


entity full_ add is
port (A, B , Cin : in bit;
Sum, Cout : out bit);
end full_add;
architecture adder of full_add is
begin
-- d ata-flow description

Copyrighted material

Fundamentals of HDL

1 . 35

Introduction

Sum < = A xor B xor Cin;


p rocess (A, B, Cin)
begin

-- behavioral description
Cout < = (A and B) or (Cin and A) or (Cin and B);
end proce ss;
end adder;

...

Listing 1.9 : Example of Verilog mixed-type description


mod ule full_add (A, B, Cin, Cout, Sum);

-...

input A, B, Cin;
outpu t Sum, Cout;
re g Sum, Cout;
11 data-flow description

assign Sum = (A " B) " Cin;

11 behavioral description
always @(A, B, Cin)
begin

Cout = (A & B)

I (Cin &

A)

I (Cin &

B);

end
e n dmod ule

1.6.6 Mixed Language Descriptions


Mixed language descriptions is the latest tool for HDL description in which we
can write a module or entity in one language and invoke or import a modul~ or entity
written in the other language. The listing 1.10 shows verilog module for full-adder in
which we instantiate (import) the VHDL entity HA (Half-adder).
...

Listing 1.10 : Example of mixed language type description


module full_add (A, B, Cin, Cout, Sum);
input A, B, Cin;
ou tput Sum, Cout;
wire CO, Cl, SO;
Half_adder Hl (A, B, SO, CO);
Half_adder H2(SO, Cin, Sum, Cl);

II Description of Half-Add er (HA) is written in VHDL


assign Cout =CO

I Cl

endmodule

Copyrighted material

Fundamentals of HDL

1 . 36

Introduction

library ieee;

use ieee.std_logic_1164.all;
-- For correct mixing of two codes the entity name should be same, i.e., Half_adder
e ntity Half_ adder is
port ( X, Y : in std_logic;
S, C : out std_logic);
end Half_adder;
architecture add er of Half adder is
begin
S <= A x or B;
C <=A and B;
end adder;

1.7 Simulation and Synthesis


This section explains two main applications of hardware description languages,
namely synthesis and simulation. These two are complementary design processes.

1.7.1 Synthesis
The task of designing a digital system that implements a desired functional
behaviour is referred to as the "synthesis'. Simply we can say, synthesis is the process
of generating a logic circuit from a truth table. For performing this process
automatically, synthesis CAD tools are available.
Let us see, how HDL is useful for the synthesis of a digital circuit. A HDL
program is the input to a synthesis cotnpiler. When this HDL code is passed throngh
initial synthesis tool, a lower-level description of the circuit is generated as an output.
With this process, a set of logic expressions which describes the logic functions
required to realize the circuit is produced. After this, these expressions are
manipulated further by the synthesis tools. The design entry may be in the form of
schematic capture or truth table. The logic expressions produced by the synthesis tool
are not likely to be in an optimal form. It is the task of the synthesis tool to
manipulate the user's design to produce an equivalent but better circuit automatically.
This step of synthesis process is called 'logic synthesis' or 'logic optimization'. Still the
optimized circuit is in the form of logic equations. In the last step of synthesis, it is
determined exactly, how the circuit will be realized in a specific hardware technology.
For executing this task, according to the physical resources available, it is decided how
to implement each logic function given by an expression. In this process a list of
components and their interconnections is derived from the model of a digital system
described in HDL. This list is called a 'netlist'. An integrated circuit or a layout of a
printed circuit board can be obtained by using a gate-level netlist. Thus a logic
synthesis produces a database with instructions on how to fabricate a physical piece of
Copyrighted material

1. 37

Fundamentals of HDL

Introduction

digital hardware. Logic synthesis consists of that part of a digital system design that
can be automated with computer software.

1.7.2 Simulation
In any design process, there are the basic tasks which should be performed in a
sequence. The flow-chart shown in Fig. 1.5 gives this basic sequence of tasks.
START

Initial design

Simulation

Successful design

Fig. 1.5 Basic design steps

First, the initial design is generated manually by the designer according to his
views, skills and knowledge. After this, the simulation of the design is carried out
mostly with the help of CAD tools. For the successful simulation, it is necessary to
apply adequate input conditions to the design as well as to the final product which
has to be tested. The simulator checks the designed product under the original
product specifications. This is known that what should be achieved. So if there are
errors, then those are removed and redesigned product is again simulated. This loop is
repeated until the simulation gives problem-free/error-free product. Once the designed
product performs correctly all of its functions, we call it the 'successful design'.
The operation of a digital circuit can be verified fastly and accurately using logic
simulation. There are two types of verification techniques, functional and timing.
The simulation is referred to as 'functional simulation' when all the functions of
the circuit are verified. After completion of successful functional simulation, the

Copyrighted material

Fundamentals of HDL

Introduction

1 - 38

'physical design' step is carried out. Physical design includes the physical location of
each chip on the board and the needed wiring pattern. CAD tools are used for
performing this task automatically. After physical design, the functionality of the
circuit is checked. But, eventhough the functional behaviour is correct, the circuit may
operate more slowly than the desired. The physical wiring on board introduces
resistance and capacitance of electrical signals. The delays are introduced because of
logic circuits such as gates. This reduces the speed of operation of the circuit and thus
lead to inadequate performance. So timing behaviour of the circuit should also be
considered. The simulation which also considers the timing behavior of the circuit is
referred to as 'timing simulation'.
Thus in functional simulation, the circuit logical operation is studied by deriving
the truth table of the circuit independent of timing considerations. In timing
simulation, the circuit operation is studied by considering timing behaviour of the
circuit. For example, the waveforms at the output of the gate are observed when they
respond to a given input.

1.8 Brief Comparison of VHDL and Verilog


The Table 1.8 gives brief comparison between VHDL and Veriiog.
Parameter

VHOL

Verilog

Application

In general. VHDL is better for


describing complex systems since
multiple entity/architecture pair leads to
nexibilitv and ease in writinn code.

In general, verilog is better for


describing systems at the gate or
switch (transistor) level due to its use
of nredefined nrimttives at this level.

Data type

Supports more data types.

Supports less data type.

Supports user-defined data type which


enables more efficient and flexible
coding.

Does not support user-defined data


type.

Can handle objects with


multidimensional array types.

Does not support multidimensional array


type.

Supports physical data type

Does not support physical data type.

Easy of
learning

Hard to learn for beginners because of


tts riQid tvoe requirements.

Easy to learn; very similar to C


lanquaQe.

libraries and
packages

Supports
packages
and
libraries.
Package can include procedures and
functions and it can be made available
to any module. It allows reusability of
code.

Does not support libraries and


packages.

Does not support predefined unary


operators supports arithmetic shift and
rotate operators.

Supports predefined unary operators.


Does not support arithmetic shift and
rotate operators.

Operators

Copyrighted material

Fundamentals of HDL
Procedures
and Tasks

1 - 39

Introduction

Concurrent procedure calls are allowed.


Functions are allowed to be written Inside
the procedure's body.

Concurrent task (Procedure in VHDL) are


allowed. However, functions are not
allowed to be wrrtten inside the task's
body.

Case
sensitivity

Case insensitive

Case sensitive

Comment

Starts with -

Starts with II

Table 1.8 Comparison between VHDL and verilog

1.9 Summary of Operators in VHDL and Verilog


,

'

Arlthmetl1' opera~o.rs
Operation

Addition
Subtraction

Operator
VHDL

Veritog

..
-

..
-

Multiplication

Division

Modulus

mod

Exponent

..

Concatenation

(& )

., .

.,

..

{.}

''"'' ,
. , tR~l~!ion~I 9Ptra!ors
,

" '

;,

Operation

Operator
VHDL

Verilog

Equality

==

Inequality

f;

!:

Less than

<

<

Less than or equal

<=

<=

Greater than

>

>

Greater than or equal

>:

>:

Equality inclusive

none

---

Inequality inclusive

none

!=:

i..;opynghtE'd ni 1tenal

Introduction

1 -40

Fundamentals of HDL

Operator

Operation
VHDL

Verilog

AND

AND

&

OR

OR

NOT

NOT

NANO

NANO

-(&)

NOR

NOR

- (I)

XOR

XOR

XNOR

XNOR

...A

Operation

Operator

VHDL
Logicai left shift

sll

Verllog
<<

Logical right shift

Arithmetic 1et1 shift

Arithmetic right shift

Rotate left

Rotate right

Comment : Rotate two poo1tions

Table 1.9 Summary of operators in VHDL and Verilog

Copyrighted l'1 tenal

Fundamentals of HDL

1 - 41

Introduction

Review Questions
1. Explain the need of HDL.

2. Explain tire structure of VHDL program with the help of example.


3. Explain the structure of Vtrilog HDL program with tire help of example.

4. Explain various data types supported by VH DL.


.S. Explain 11ario11s data types supported by Verilog.

6. If A == 1011 and B = 1101, find the value of t/1e following cxpres$iOns :


a.

A AND B

b. A & B

c. A&&B
d. A AB

e. A _AB

A 2

g. B ror 1
7. What do you mean by modelling style ?

8. Write a VHDL and Verilog behavioral description for half-adder.


9. Write a VHDL and Verilog data flow description for lralf-subtractor.
10. Write a VHDL and Verilog structural descriptum for full subtractor.
11. Write a short note on switch-level description.

12. Explain the mixed-type description with the help of example.


13. Write a short note on mixed-langitage description.
14. Give the comparison between VHDL and Verilog.

DOD

Copyrighted material

(1 42)

Data-Flow Description
2.1 High Lights of Data-Flow Description

Data-flow is one modeling style of hardware description.

It simulates the system by showing how the circuit signal flow from the
inputs to the outputs.

It uses concurrent statements. Thus at any simulation time, all signal


assignment statements are executed concurrently.

2.2 Structure of the Data-Flow Description


The listing 2.1 shows the HDL code for the circuit shown in the Fig. 2.1. The
circuit is an AND-OR circuit in which signals A, B, C, D and E are input signals,
signal Y is an output signal and signals I1 and 12 are intermediate signals.
A

y
C ---r--....
0
E --1.-"

Fig. 2.1 AND-OR circu it


....

Listing 2.1 : HDL code for AND-OR circuit - VHDL and Verilog

VHDL AND-OR Circ uit De scription.


entity AND_OR is
port (A, B, C, D, E : in bit;
Y: out bit );
end;
architecture digital_ckt of AND-OR is
signal 11, 12;
begin

(2 - 1)

Copyrighted material

Fundamentals of HDL

22

Data-Flow Description

stl : 11 < = A and B after l Ons;


st2 : 12 < = C and D and E after 10ns;
st3 : Y < = 11 or 12 after 20ns;
end digital_ckt;

Verilog AND.OR Circuit Description.


module AND_OR (A, B, C, D, E, Y);
input A, B, C, D, E;
output Y;

wire 11, 12;


u1ign #10 11 = A & B;
assign #10 12 = C & D & E;
assign #10 Y = 11
endmodule

I 12;

2.2.1 Signal Declaration and Assignment Statement


VHDL : Here, input and output signals are declared in the entity as ports.
However, the intermediate signals (11 and 12 in the listing 2.1) are declared using the
predefined word signal in the architecture. A signal assignment operator <= is used in
VHDL to assign a value to the left-hand side of a signalassignment statement. The
left-hand side of the statement should be declared as a signaL The right-hand side can
be a signal, a variable or a constant.
Verilog : Here, input and output signals are declared in the module. However, the
intermediate signals are declared using the predefined word wire. 3y default, all ports
in Verilcg are assumed to be wires. The value of the wire is continuously changing
with changes in the device that is deriving it.
When it is necessary to store the object's value then reg type declaration is used in
Verilog. In Verilog, any object that is assigned a value in an always statement must be
declared as reg. (Refer listing 2.1).

2.2.2 Execution of Assignment Statement


The execution of assignment statement is done in two phases : calculation and
assignment. Consider the listing 2.1 and' the simulation waveform shown in the
Fig. 2.2.
Calculation : The value of 11 is calculated using the current values of A and B at
time TO. This value is (1 and 0) = 0 in VHDL or (1 & O) = 0 in Verilog.

Copyrighted material

Fundamentals of HDL

2-3

Data-Flow Description

----- o
B

I
I

------~ ------------~---------

'I

0
D

_ _......._ _ _ _ _ _.,__ _ _ _ __.______ 0

---------

ll

T0 T1

T2 T3

T4 T5

., .,

., .,

., .,

c"' "'
c

- "'0
0

<ll

"'c

c
0
0

"' "'"'

<ll

<ll

0
0

"'
M

Fig. 2.2 Simulation waveform for listing 2.1

Assignment : The calculated value is not immediately assigned to 11; however it is


assigned to 11 after a time delay of 10 ns. The delay time can be implicitly or
explicitly specified. In our case, we have assumed propagation delay of each gate as
10 ns and hence we have explicitly specified time delay equal to 10 ns.
In Veri!:.1g, we have written statement as : assign #IO I1 = A & B; In Verilog, time
units are not specified; the simulator assumes a delay in screen time units. Therefore,
in our case the calculated value is assigned to 11 after 10 screen time units.

The change in the 11 at T = 110 ns constitute an event in signal assignment


statement st3 and this causes execution of st3. For statement st3, at T = 110 ns, 12 = 0
and 11 = 0 and hence the calculated new value of Y at T = 110 ns is (11 or 12) = 0.
This change in value for Y from 1 to 0 is assigned to Y after 10 ns - that is, at
Tl =110 + 10 = 120 ns.

Copyrighted material

Fundamentals of HDL

2-4

Data-Flow Desc ription

Important points

To assign a delay time to a signal assignment statement, we use the


predefined word after (delay time) in VHDL or # (delay time) in Verilog.

In VHDL we specify delay in time units such as nsec, msec, sec etc. In
Verilog, delay time is specified in screen unit time.

2.2.3 Constant Declaration and Ass'i gnment Statement


A constant in HDL is same as constant in C language; its value is constant within
the segment of the program where it is visible. A constant in VHDL can be declared
using predefined word constant. For example,

~-~~;~~1~u~~~~a~JIB
In Yerilog, a constant can be declared by its type, such as time or integer.

In VHDL, we use the assignment operator := to assign a value to a constant. On


the other hand, we use the assignment operator = in Verilog to assign value to a

constant. For example,


delay :; 1Ons; - VHDL
delay = 1O:
Ii Verilog
It is possible to assign a value to the constant in the declaration statement itself.
This is shown in following examples.
constant delay : ilme := 1Ons; - VHOL
time. delay = 12;
'
If Verilog

m Example 2.1 : Data-Flow Description of a Half-Adder

Digital computers perform various arithmetic operations. The most basic operation,
no doubt, is the addition of two binary digits. This simple ad dition consists of four
possible elementary operations, namely,

0+ 0 = 0
O+l:ol
l+O :o l
l+l:ol02

The first three operations produce a sum whose length is one digit, but when the
last operation is performed sum is two digits. The higher significant bit of this result
is called a carry, and lower significant bit is called sum . The logic circuit which

Copynqhted material

Fundamentals of HDL

2-5

Data-Flow Description

performs this operation is called a half-adder. The circuit which performs addition of
three bits (two significant bits and a previous carry) is a full-adder.
The half-adder operation needs two binary inputs : augend and addend bits; and
two binary outputs : sum and Cout. The truth table shown in Table 2.1 gives the
relation between input and output variables for half-adder operation.
Inputs
A

Outputs
Cout

Sum

Cout

Half
adder

Inputs

Outputs
Sum

Fig. 2.3 Block schematic of half-adder

Table 2.1 Truth table for half-adder


K-map simplification for Cout and Sum

For Cout

For Sum

Cout =AB

Sum=AB +AB
=A(f)B

Fig. 2.4 Maps for half-adder

Fig. 2.5 Logic diagram for half-adder

Copyrighted material

Fundamentals of HDL

2-6

Data-Flow Description

Listing 2.2 : HDL code for half-adder-VHDL and Verilog.

VHDL Half Adder Description.


entity h aif_adde r Is
port (
A: in bit;
B : in bit;
Sum : out bit;
Gout : out bit);
end half_ adder;
architecture adder of h alf_a dder ls
begin
Sum < = A xor B;

-- signal assignment statement.

Gout < = A and B;

-- signal assignment statement.

end adder;

Verilog Half Adder Description.


module half_ adder (A, B, Sum, Gout);
input A;
Input B;
output Sum;
output Gout;
assign Sum = a " b;
assi!ill c = a & b ;

11
II
II
11
II

The d efault type of all inputs and outputs is a single bit.


signal assignment statement.

" is a b itwis e xor logical op erator.


signal a ssignment statement.
& is a bitwise logical "and" operator.

endmodule

11'*

Example 2.2 : Multiplexer with Active Low Enable.

The Fig. 2.6 shows 2 x 1 multiplexer. It has two 1-bit inputs : DO an d Dl, a 1-bit
select line S, a 1-bit output : Y and a 1-bit enable signal : En. The input signals DO and
01 are connected to the one input of AND gates : ANDl and AND2, respectively. If
enable signal (En) is low, the output is equal to one of the two inputs depending on

Copyrighted material

Fundamentals of HDL

Data-Flow Description

2-7

DO
D1
2x1

MUX

Enbar or En --!:---' 12

En-----'

(a) Logic diagram

(b) Logic symbol

Fig. 2.6 2 x 1 multiplexer

the status of select (S) signal. If S = 0, the output is equal to DO and if S = 1 the
output is equal to Dl. The Table 2.2 shows the the truth table for 2 x 1 multiplexer.
Input

Output

s
x

Enbar

DO

D1

Table 2.2 Truth table for a 2 x 1 multiplexer


....

Listing 2.3 : HDL code of a 2 x 1 multiplexer - VHDL and Verilog.

VHDL 2 x 1 Multiplexer Description.


library teee;
use teee.std_loglc_1164.all;
entity mux2x1 ts
port (DO, Dl, S, Enbar: ln std_logic;
Y : out std_logic);

end mux2x1;
architecture MUX of mux2x1 is
s ignal Il, 12, 13, 14 : std_logic;
begin

-- Assume 10 nanoseconds prop a gation d e lay


-- for all and, or, and not.

Copyrighted material

Fundamentals of HDL

2 -8

Data-Flow Description

I1 < = not S after 10 ns;


12 <= not Enbar after 10 ns;
13 < = DO and 11 and 12 after 10 ns;
14 < = D1 and S and 12 after 10 ns;
Y <= 13or14 after 10 ns;
endMUX;

Verilog Description : 2 x 1 Multiplexer. (Refer Fig. 2.7 on next page)


module mux2xl (DO, Dl, S, Enbar, Y);
Input DO, Dl, S, Enbar;
output Y;
wire 11, I2, 13, I4;

II Assume 10 time units delay for all and, or, not. In Verilog
II we cannot use specific time units, such as nanoseconds.
II The delay here is expressed in simulation screen units.
assign #10 Y

= I3 I I4;

assign #10 I3 = DO & I1 & I2;


assign #10 I4 = Dl & S & I2;
assign #10 I1 = - S;
assign #10 12 = - Enbar;
endmodule

2.3 Data Type - Vectors


We have already introduced the vector data type in chapter 1. The vector data
type declares an array of similar elements, rather than declaring each individual bit
separately. For example,
Individual bit declaration :
signal AO, Al. A2, A3 : bit ;

--VHDL

wire AO, Al, A2, A3 ;

II Verilog

Vector declaration :
signal A: bit_vector (3 downto 0); - VHDL
signal A : bit_vector (0 to 3) ;

-- VHDL

Copyrighted material

Fundamentals of HDL

2-9

Data-Flow Description

DO - - - .

01 _ _ _ _ _ _ ___.

S ---+--------'

Enbar

I
To

.,u
</)

lll

T1

T2

T3 T4

Ts

Te

.,u

.,u

.,u

.,u u.,

</)

c:.

c:

0
0

- -"'

Q)

"'
c:

</)

c:

- -"'

>

Q)

"'
c:

(')

"'
c:

0
<D

"'

"'c:

Tr

</)

c:

"' "'
Ol

Fig. 2.7 Simulation waveform for a 2 x 1 multiplexer


wire 13 : OJ A;

II Verilog

wire 10: 3) A ;

II Verilog

In VHDL, downto and to are predefined operators that describe the width of the
vector. Operator downto is used when zeroth element is the least significant element,
and operator to is used when zeroth element is the most significant element. For
example, if A has value 1100 and declaration is signal A : bit_vector (3 down to 0)
then the elements of vector A are :
A(3]

=1, A(2) = 1, A(l) = 0, A(O] = 0

On the other hand, if the declaration is


signal A : bit_vector (0 to 3) then the elements of vector A are :
A[O) = 1, A[l) = 1, A(2) = 0, A[3) = 0.
111 Example 2 .3 : 4 x 1 Multiplexe r.

The Fig. 2.8 shows 4 x 1 multiplexer. Each of the four lines, DO to D3, is applied to
one input of an AND gate. Selection lines are decoded to select a particular AND gate.

Copyrighted material

Fundamentals of HDL

2 -10

... '

00

Data-flow Description

14

01

.. '
..
'
..
'

15

,I

D2

......

16

,I

D3

DO
D1
02
D3

17

,I

.. 11

so

.....

S1

::.....

Enbar or EN

4x1

MUX

12
13

so ____

s1 _______.

Enbar - - - - - - - - '

(a) Logic diagram

(b) Logic symbol

Fig. 2.8 4 x 1 multiplexer


In.put

Output
Enbar

so
x

DO

D1

02

03

S1

Table 2.3 Truth table for 4 x 1 multiplexer

II>

Listing 2.4 : HDL code of a 4

1 multiplexer - VHDL and Verilog.

VHDL 4x1 Multiplexer Description.


library leee;

use leee.std_logic_1164.all;
entity mux4xl ls
port ( D : In std_logic_vector (3 downto O);
S, Enbar: ln std_logic;
Y : out std_logic);

Copyrighted material

2 -11

Fundamentals of HDL

Data-Flow Description

end mux4x1;
architecture MUX of mux4x1 ls
signal 11, 12, 13, 14, 15, 16, 17 : std_logic;
begin

-- Assume 10 nanoseconds propagation delay


-- for all and, or, and not.
11 < = not SO after 10 ns;
12 < = not S1 after 10 ns;
13 < = not Enbar after 10 ns;

14 < = DO and I1 and 12 and 13 after 10 ns;


15 <= Dl and SO and 12 and 13 after 10 ns;
16 < = D2 and Sl and 11 and 13 after 10 ns;
17 < = D3 and SO and S1 and 13 after 10 ns;
Y <=

14 or 15 or 16 or 17 after 10 ns;
endMUX;

Verilog Description : 4 x 1 Multiplexer.

module mux4x1 (D, S, Enbar, Y);


input (3 : 01 D;
input S, Enbar;
output Y;
wire 11, 12, 13, 14, 15, 16, 17;

II
II
II
11
assign #10 Y = 14

assign #10
assign #10
assign #10
assign #10

Assume 10 time units delay for all and, or, not. In


Verilog we cannot use specific time units, such as
nanoseconds. The delay here is expressed in simulation
screen units.

I 15 I 16 I 17;

14 = DO & 11 & 12 & 13;


15 = D1 & SO & 12 & 13;
16 = D2 & Sl & 11 & 13;
17 = D3 & SO & Sl & 13;

assign #10 11 = - SO;


assign #10 12 = - Sl;
assign #10 13 = - Enbar;
endmodule

Copyrighted material

Fundamentals of HDL

2 -12

Example 2.4 : 2

><

Data-Flow Description

2 Unsigned Combinational Array Multlpller.

Let .us generalize the multiplication process for a 2 >< 2 multiplier for two unsigned
2-bit numbers : multiplicand A = Al AO and multiplier B = Bl BO. The Fig..2.9 shows
how the multiplication process is carried out.
A1

AO

B1

BO

BOA1
+
B1 A1

P3

B1 AO

P2

I~ ,..'"'""

P1

PMOAO
= BOA1 + B1AO

P1

P2 = B1 A 1 + Carryout of P1

PO

P3 = Carryout of P2

Fig. 2.9 Multiplication process

The multiplication process involves multiplication (product) of 2-bit number and


addition of 2-bit number. The multiplication of 2-bits can be implemented using
2-input AND gate whereas addition of 2-bits can be implemented using half-adder.
Such an implementation of 2 >< 2 multiplier is shown in the Fig. 2.10.
B1 A1

B1 AO

BO A 1

BOAO

Half-adder

P3

P3

P1

PO

Fig. 2.10 2 >< 2 bit combinational array multiplier

Copyrighted material

Fundamentals of HDL
Ill>-

2 -13

Data-Flow Description

Listing 2.5 : HDL code for a 2 x 2 unsigned combinational array multiplier - VHDL
and Verilog.

VHDL 2 x 2 Unsigned Combinational Array Multiplier Description.


library ieee;

use ieee.std_logic_1164.all;
entity Arr_Mul is
p ort (A, B: in std_logic_vector (1downto 0);

P: out std_logic_vector (3 downto O));


end Arr_Mul;

architecture MULT of Arr Mul is


begin

-- For simplicity propagation delay times are not considered in this example.
P(O) < = B(O) and A(O);
P(l) < = (B(O) and A(1)) xor (B(l) and A(O));
P(2) < = (B(1) and A(1)) xor ((B(O) and A(1)) and (B(1) and A(O)));
P(3) < = (B(1) and A(1)) and ((B(O) and A(l)) a.nd (B(1) and A(O)));
endMULT;

Verilog 2 x 2 Unsigned Combinational Array Multiplier Description.


module Arr_Mul (A, B, P);
input [1:01 A, B;
output 13:01 P;

/* For simplicity, propagation delay times are not


considered in this ex ample.* I
assign P[OI = BIOi & AIOI;
assign P[11 = (B[OI & All))

(B[11 & AIOJ);

assign P[21 = (Bl11 & All))

((BIOi & All)) & (Bill & AIOI));

assign P131 = (All i & Bil)) & ((BIOi & Al l ))& (Bill & AIOI)):
endmodule

,,,.. Example 2.5 : D latch

Fig. 2.11 shows the D latch. The NANO gates 1, 2, 3 and 4 form the basic SR latch
with enable input. The fifth NANO gate is used to provide the complemented inputs.

Copyrighted material

2 - 14

Fundamentals of HDL

Data-Flow Description

EN

(a) D latch

(b) Logic symbol

Fig. 2.11

As shown in the Fig. 2.11, D input goes directly to the S input, and its
complement is applied to the R input, through gate 5. Therefore, only two input
conditions exist, either S =0 and R = 1 or S = 1 and R = 0. The truth table for D latch
is as shown in the Table 2.4.
EN

Qn

Qn+1

State

0
1

0
1

x
x
x

Reset

Qn

Set
No change (NC)

Table 2.4 Truth table for D latch

As shown in the truth table, the Q output follows the D input. For this reason D
latch is sometimes called transparent latch.
Looking ilt the truth table for D latch with enable input and s implifying Qn+J
functior1 by K-map we get the characteristic equation for D latch with enable input as
Qn<l = EN D +EN Qn. This is illustrated in Fig. 2.12.

Fig. 2.12 Characteristic equation

Copyrighted material

Fundamentals of HDL
~

2 -15

Data-Flow Description

Listing 2.6 : HDL code for a 0-latch-VHDL and Verilog.

VHDL D-Latch Description.

library ieee;
use ieee.std_logic_1164.all;
entity D_Latch ia
port (D, EN : in std_logic;
a. Obar: buffer std_logic);
-- a and Obar are declared as buffer because they act as
both input and output, they appear on the right and left
hand s ide of s ignal assignment statements. inout or
-- linkage could have been used instead of buffer.
end D_Latch;

architecture Latch of D Latch is


constant Delay_Nand: Time: = 10 ns:.
begin
a<=: Obar nand (D nand EN) after 2*Delay_Nand;
Obar< = a nand ((D nand D) nand EN) after 3*Delay_Nand;
end Latch;
Verilog D-Latch Description.

module D_latch (D , EN, Q, Obar);


input D, EN;
output a, Obar;
/* Verilog treats the ports as internal ports, so a and Obar are
not considered here as both input and output. U the port is
connected externally as bidirectional, then we should use
inout. */
time Delay_Nand = 10;

assign # 2*Delay_Nand Q = Obar-(&) (D -(&)EN);


assign# 3*Delay_Nand Obar = a - (&) ((D - (&) D) - (&)EN);
endmodule

Copyrighted material

Fundamentals of HDL

2 -16

Data-Flow Description

Example 2.6 : 2-bit Magnitude Comparator

A comparator is a special
combinational circuit designed
primarily to compare the relative
magnitude of two binary numbers.
Fig. 2.13 shows the block diagram
of an n-bit comparator. It receives
two n-bit numbers A and B as
inputs and the outputs are A > B,
A = B and A < B. Depending
upon the relative magnitudes of
the two numbers, one of the
outputs will be high.

Inputs

n-bit
comparator

A:>B

A=B

A<B

Outputs

Fig. 2.13 Block diagram of n-bit comparator

The Table 2.5 shows the truth


table for 2-bit comparator.

Inputs

Outputs

A> B

A= B

0
0

A< B

Table 2.5 Truth table for 2-bit comparator

Copyrighted material

Fundamentals of HDL

2 - 17

Data-Flow Description

K-map simplification
A >B
1 0

00

01

11

10

00

01

r1

11
10

-;-;;:

0
~t

---

l;
},-

1 J
{.. ~r.~Cl.

A< B
1 0

00

01

11

10

00

Cl

00

01

i@

01

11

~J

11

10

.r?"2)

10

rn

~~ ':

~\

00

,....01_
I

11
~ 1~

1~ ' ....:..JI

..

,,

10

...

;'

1E
1 _..:A;;

~-

ff

0
t~

Fig. 2.14

(A

= B) =

A 1 A0 8180 + A 1A0 B1B0


+ A 1A0 B1B0 + A 1A0 B1B0

A 1B1 (A0B0 + AoB0)


+ A1B1 (AoBo + AoBo)

= (Ao

(A< B)

0 B0) ( A10 B1)

A 1A0 B0 + A0 B1B0 + A 1B1

Copyrighted material

Fundamentals of HDL

218

Data-Flow Description

Logic Diagram

A,

A>B

A=B

A<B

Fig. 2.15

Copyn 1nt

11

Fuhdamentals of HDL
...

2 -19

Data-Flow Description

Listing 2.7 : HDL code of a 2 x 2 magnitude comparator - VHDL and Verilog.

VHDL 2x2 Magnitude Comparator Description.


library leee;
use ieee.std_logic_1164.all;
entity COMP_2 is
port (A, B : in std_logic_vector(l downto 0);
AgtB, AltB, AeqB: out std_logic ;
endCOMP_2;
architecture COMP of COMP 2 is
begin
AgtB < = (A(O) and not B(l) and not B(O)) or (A(l) and not B(l))
or A(l) and A(O) and not B(O));
AltB < = (not A(l) and not A(O) and B(O)) or (not A(O) and B(l) and B(O))
or (not A(l) and B(l));
AeqB < = (A(O) xnor B(O)) and (A(l) xnor B(l));
end COMP;

Verilog 2x2 Magnitude Comparator Description.


module cornpr_2 (A, B, AgtB, AltB, AeqB);
input 11:0) A, B;
output AgtB, AltB, AeqB;
assign AgtB = IAIOJ & -Bill & - BIO))

I All i &

I IA11J &

- Billi

AIOI & -BIO));

assign AltB = (-Alli & - A(OJ & BIO))

I (-AIO I &

Bill & BIO))

(-All) & Bi l JI);


assign AeqB = (A(O] BIO)) & (Al l i Bil));
endmodule

Example 2.7 : 4-bit Ripple-Carry and Carry-Lookahead Adder.

A single full-adder is capable of adding two one-bit numbers and an input carry.
In order to add binary numbers with more than one bit, additional full-adders can be
employed. A 4-bit, parallel adder can be constructed using number of full adder
circuits connected in parallel. Fig. 2.16 shows the block diagram of 4-bit parallel adder
using number of full-adder circuits connected in cascade, i.e. the carry output of each
adder is connected to the carry input of the next higher-order adder.

Copyrighted material

Fundamentals of HDL
83

Cout

2 -20

A'J

Full

adder

82

Sum3

81

A2

Full

C3

Data-Flow Description

Full

C2

BO

A1

adder

adder

Sum2

Sum1

C1

AO

Full

adder

Cin

Sumo

Fig. 2.16 4-bit parallel adder

It should be noted that either a half-adder can be used for the least significant
position or the carry input of a full-adder is made 0 because there is no carry into the
least significant bit position.
~

Listing 2.8 : 4-bit ripple-carry adder case study - VHDL and Verilog.

VHDL 4-Bit Ripple-Carry Adder Description.


library leee;
use ieee.std_logic_1164.all;
entity adder Is
port (A, B: in std_logic_vector (3 downto 0);
cin : in std_ logic;
sum : out std_logic_vector (3 downto 0);
cout : out std_logic);
end adder;
architecture RCany_adder of adder Is
--Assume 7.0-ns propagation delay for all gates.
signal cl, c2, c3 : std_logic;

constant delay_gt : time : = 7 ns;


begin
sum(O) < = (B(O) xor A(O)) xor cin after 2*delay_gt;
sum(l) < = (B(l) xor A(l)) xor cl after 2*delay_gt;
sum(2) < = (B(2) xor A(2)) xor c2 after 2 *delay_gt;
sum(3) <= (B(3) xor A(3)) xor c3 after 2* delay_gt;
cl < = (A(O) and B(O)) or (A(O) and cin) or (B(O) and cin) after 2*delay_gt;
c2 <= (A(l) and B(l)) or (A(l) and cl) or (B(l) and cl) after 2*delay_gt;
c3 < = (A(2) and B(2)) or (A(2) and c2) or (B(2) and c2) after 2*delay_gt;
cout < = (A(3) and B(3)) or (A(3) and c3) or (B(3) and c3) after 2*delay_gt;
end RCany_adder;

Copyrighted material

Fundamentals of HDL

2 - 21

Data-Flow Description

Verilog 4-Bit Ripple-Carry Adder Description.

module RCarry_adder (A, B, cin, sum, cout);


input 13:0) A, B;
input cin;
output 13:0) sum;
output cout;
wire c l , c2,c3;
time delay_gt = 7;

II Assume 7.0 ns propagation delay for all gates.


assign #(2 *delay_gt) sumlOJ = (BIO] " A(O)) " cin;
assign #(2 *delay_gt) sumlll = (B(l) " A( l )) " cl;
assign #(2*delay_gt) suml2 J = (Bl21 " A(2)) " c2;
assign #(2 delay_gt) suml3J = (Bl31 " A(3)) " c3;

I (AIOI & cin) I (B IOi & cin);


assign /1( 2' delay_gt) c2 = (Alli & Bil)) I (All i & cl) I (Bil l & cl);
assign 11(2*delay_gt) c3 = (A121 & Bl2)) I (A[2J & c2) I (Bl21 & c2);
assign #(2*delay_gt) Cout = (AIJJ & B[J)) I (A(JJ & cJ) I (8131 & cJ);
assign #(2 ' d elay_gt) cl = (AIOI & BIO))

endmodule
Carry Lookahead Adder

The 4-bit adder discussed is implemented using full-adder. In which the carry
output of each full-adder stage is connected to the carry input of the next higher-order
stage. Therefore, the sum and carry outpu ts of any stage cannot be produced until the
input carry occurs; this leads to a time delay in the addition process. This delay is
known as carry propagation delay, whid1 can be best explained by considering the
following addition.
0 1 0 1
+ 0 0 1 1

Addition of the LSB position produces a carry into the second position. This carry,
when added to the bits of the second position (stage), produces a carry into the third
position. The latter carry, when added to the bits of the third position, produces a
carry into the last position. The key thing to notice in this example is that the sum bit
generated in the last position (MSB) depends on the carry tha t was generated by the
addition in the previous positions. This means that, adder will not produce correct
resul t until LSB carry has propagated through the intermediate full-adders. This
represents a time delay that depends on the propagation delay produced in an each
full-adder. For example, if each full-adder is considered to have a propagation delay

Copyrighted material

Fundamentals of HDL

2 -22

Data-Flow Description

of 30 ns, then 53 will not reach its correct value until 90 ns after LSB carry is
generated. Therefore, total time required to perform addition is 90+30 = 120 ns.
Obviously, this situation becomes much worse if we extend the adder circuit to
add a greaier number of bits. If the adder were handling 16-bit numbers, the carry
propagation delay could be 480 ns.
One method of speeding up this process by eliminating inter stage carry delay is
called lookahead-carry addition. This method utilizes logic gates to look at the
lower-order bits of the augend and addend to see if a higher-order carry is to be
generated. It uses two functions: carry generate and carry propagate.
Consider the circuit of the full adder shown in Fig. 2.17. Here, we define two
functions : carry generate and carry propagate.
A;-~~\\

B; - -+--1

Fig. 2.17 Full adder circuit

P;

G;

=
=

A; EBB;

A; B;

The output sum and carry can be expressed as


S; = P; E9 C1

C; +I = G; + P; C;

G; is called a carry generate and it produces on carry when both A; and B; are
one, regardless of the input carry. P; is called a carry propagate because it is
associated with the propagation of the carry from C; to C;.i Now C;.1 can be
expressed as a sum of products function of the P and G outputs of all the preceding
stages. For example, the carriers in a four stage carry-lookahead adder are defined as
follows:
C1

=Go + Po C;n

C2 = G1 + P1 C1 = G1 + P1Go + P1 Po C;n
C3 = G2 + P2 C2 = G2 + P2 G1 + P2 P1 Go + P2 P1 Po C;n

~=~+~~=~+~G2+~~G1 +~~~~+~~~~~

Copyrighted material

2. 23

Fundamentals of HDL

Data-Flow Description

Fig. 2.18 shows the 4-bit carry-lookahead adder.

Carry lookahead generator

53

P3 G3

A3

93

52

A2

P2 G2

51

92

A1

P1 G1

91

AO

BO

Fig. 2.18 4bit carry lookahead generator

We can further simplify the design by noting that the sum equation of stage i.
Si
....

Ai xor Bi xor Ci as Si

= Pi xor Gi xor Ci

Li sting 2.9 : 4-bit carry-lookahead adder - VHDL and Verilog.

VHDL 4-Bit Carry-Lookahead Adder Description.

library ieee;
use ieee.std_logic_1164.all;
entity adder is

port (A, B: in std_logic_vector (3 downto 0);


Cin: in std_logic;
S: out std_logic_vector (3 downto 0);
C4 : out std_logic);
end adder;

architecture Carry-LA of adder is


-- Assume 7.0-ns propagation delay for all gates

signal Cl, C2, CJ : std_logic;


signal P, G: std_logic_vector (3 downto 0);
constant delay_gt: time := 7 ns;
begin

G(O) < = A(O) and B(O) after delay_gt;


G(l) <= A(l) and B(l) after delay_gt;
G(2) < = A(2) and B(2) after delay_gt;
G(J) < = A(J) and B(J) after delay_gt;

Copyrighted material

2 - 24

Fundamentals of HDL

Data-Flow Description

P(O) < = A(O) o r B(O) after delay_gt;


P(1) < = A(1) or B(1) after d elay_gt;
P(2) < = A(2) o r B(2) after d elay _gt;
P(3) < = A (3) or B(3) after delay_gt;
C1 < =

G(O) or (P(O) and Cin) after 2 ctelay_gt;

C2 <=

G(1) or (P(1) an d G(O)) or (P(1) and P(O) and C in) aft e r 2*de lay_gt;

C3 < =

G(2) or (P(2) and G(1)) or (P(2) and P(1) and G(O)) or (P(2) and P(1)
and P(1) and Cin) afte r 2*delay_gt;

C4 < =

G(3) or (P(3) and G(2)) or (P(3) and P(2) and G(1)) or (P(3) and P()
and P(1) and G(O)) or (P(3) and P(2) and P(1) and P(O) and Gin)
after 2ctelay_gt;

S(O) < = (P(O) xor G(O)) xor Gin after delay_gt;


S(1) < = (P(1) xor G(1)) xor C1 after d elay_gt ;
S(2) < = (P(2) xor G(2)) xor C2 afte r delay_gt;
S(3) < = (P(2) xor G(2)) xo r C3 after delay_gt;
end Carry-LA;

Verilog 4-Bit Carry-Lookahead Adder Description.


modu le Carry_LA (A, B, C in, S, C4);
input (3:0) A, B;
input Cin;
output (3:0) S;
output C4;

/* Assume 7.0 -ns propagation delay for all gates


including a 3-input xor. I
wire Ct, C2, C3;
wire 13:0) P , G;
time d elay_gt = 7;
assign #delay_gt G(O ) = A(O) & B(O);
assign #delay_gt G(1) = A (1 ) & B(1);
as si gn # delay_gt G (2 ) = A(2) & B(2 );
assi gn #delay_gt G (3) = A (3) & B(3);
assign # delay_gt P(O)

= A(O) I B(O);

assign # delay_gt P(1) = A (1)


assign # d elay_gt P(2) = A (2)

I B(1);
I B(2);

I B(3);
= G(O) I (P(OJ & Gin );
= G(1 ) I (P(l) & G(O)) I (P (1) &

assign # d elay_gt P(3) = A (3)


assign #(2 ctelay_gt) C1
assign #(2 ctelay_gt) C2

P(O) & Cin};


Copyrighted material

Fundament als of HDL

2 - 25

Dat a-Fl ow Description

I {P(21 & G(lll I (P(21 & P(ll & G(O))


I (P (2 1 & P il l & P(OI & Cin);
G(JI I (P (JJ & G(2)) I (P(JI & P(2] & G( lll
I (P (J I & Pi21 & Pi l l & GiO ll
I (PIJ I & P121 & P(1) & P(O) & Cin);

assign #(2*delay_gt) CJ = G(21


assign #(2*delay_gt) C4 =

assign #delay_gt S(O J = (P(OI " G(O)) " Cin;


assign #delay_gt Sill =(Pill " G(1)) " Cl;
assign #delay_gt Sl21 = (P(21 " G(2)) " C2;
assign #delay_gt S(JI = (P( JI " G(J)) " CJ;
endmodule

A _ _o_o_o_o_ _ _ _ _ _ _ _ _l.__
10_1_
1 _ _ _ __

0 _ _ _ __
0 _ _0_0_0_0_ _ _ _ _ _ _ _ _~!0_1_1_

Cin
Sum

0010

0000

Cout

i-

4 x 14 = 56 ns

(a) Ripple carry adder

0000

0000

!1011
I0110

Cin - - - - - - - - - - -- - '

0010

0000

>- 4

x 7 = 28 ns

(b) Carry - lookahead adder

Fig. 2.19 Simulation waveform f or 4-bit adder with a 7 ns gate delaYcopyrighted material

Fundamentals of HDL

2 . 26

Data-Flow Description

The Fig. 2.19 shows the simulation waveform for a 4-bit ripple carry and carry
lookahead adders. In both the cases gate delay is considered as 7 ns. To calculate the
worst delay, i.e., maximum delay, the values for the inputs A, B and Cin are taken as
A = 1011, B = 0110 and Cin = 1. These values cause a change in all the carry-out
signals. In Fig. 2.19 (a), the total delay is 56 ns. Since there are four one--bit adders,
and each has a worst delay of 14 ns (two XOR gates). Th.is total delay equals to the
number of 1-bit adders times the delay of one 1-bit adder.
In Fig. 2.19 (b), the total delay is 28 ns, which is 4 times the delay of a single gate
(7 ns). On increasing the number of input bits of the lookahead adder, the total worst
delay will remain same, i.e., 28 ns.

Review Questions
1. List tlte higlllights of data-flow description.

2. Explain the str11ct11re of the data-flow description with the help of example.

3. Explain the signal declarntion and assignment statements used in VHDL and Verilog.
4. Explain the steps in tlte execution of assignment statements.
5. Explain tlte constant declaration and assignment statement in VHDL and Verilog.
6. Write a VHDL and Verilog description of 4 "1 multiplexer.

7. Write a VHDL and Verilog description of 3 : 8 decoder wit/1 active low enable input.

8. Explain /row gate delays are included in the VHDL and Verilog description.
9. Compare lite worst case delays of 4-bit ripple carry adder and 4-bit carry-looka/1ead adder wit/1 tire
help of simulation waveform.

DOD

Copyrighted material

Behavioral Description
3.1 Behavioral Description Highlights

The behavioral system describes the system by showing how the outputs
behave according to changes in the inputs.

While describing in the behavioral style, it is not necessary to know the logic
diagram of the system; however, it is required to know how the output
behaves in response to change in the input.

In VHDL, process is the main behavioral description statement. In Verilog,


always and initial are the two main behavioral description statements.

In VHDL, the statements inside the process are sequential. In Verilog, all
statements are concurrent.

3.2 Structure of the HDL Behavioral Description


The listing 3.1 shows the behavioral description fur half-adder. Referring the
VHDL description we can see that, the entity half-adder has two input ports A and B,
and two output ports Cout and Sum. Here, ports are of type bit; this type is defined
in VHDL and hence it is not necessary to include IEEE library in the description. If
ports are of type std_Iogic then it is must to include IEEE library in the description.
We have already seen that the keyword in the behavioral description is process.
Every behavioral description has to include in the process body. The process (A, B) is
a concurrent statement; so its execution is initiated by the occurrence of an event. The
ports A and B included in the process (A, B) statement is called sensitivity list. Any
change in the state of any element of the sensitivity list is treated as an event. The
process is activated (initiated) only if an event occurs; otherwise process remains
inactive. If the process has no sensitivity list, the process is executed continuously.

(3 - 1)

Copyrighted material

Fundamentals of HDL

Ill-

3-2

Behavioral Description

Listing 3.1 : Example of an HDL behavioral description-VHDL and Verilog.

VHDL Behavioral Description of Half Adder


entity half_adder is
port ( A : in bit;
B : in bit;
Sum : out bit;
Cout : out bit);
end half_adder;
architecture adder of half_adder is
begin
process (A, B)
begin
Sum < = A xor B after 10 ns;
Cou t < = A and B after 10 ns;

-- signal-assignment statement 1
signal-assignment statement 2
w ith 10 nanoseconds delays.

end process;
end adder;
Verilog Behavioral Description of Half Adder
module half_adder (A, B, Sum , Cout);
input A;
input B;
output Sum;
output Cout;
reg Sum, Cout;
/* Since Sum and Cout are outputs and they are written
inside "always," they should be declared as reg *I

always @(A, B)
begin
#10 Sum = a
b;
A

#10 Cout = a & b ;

11
is a bitwise xor logical operator.
11 & is a bitwise logical "and" operator
/* The above two statements are p rocedural
(inside always) signal-assignment statements with
10 simulation screen units delay I
A

end
endmodule

Copyrighted material

Fundamentals of HDL

3-3

Behavioral Description

The statements included in the process body are executed sequentially : As


mentioned in the chapter two, that a signal assignment statement has two phases :
calculation and assignment. Here, the sequential execution means sequential
calculation. This means that the calculation of a statement is done after the calculation
of the previous statement; however the calculation of the statement wi ll not wait until
the previous statement is assigned.
The Fig. 3.1 shows the simulation waveform for ha lf-adder. Here at T = TO, A
changes from 0 to 1, while B stays at 1. This change constitute an event on A, which
in turn activates the process. The statement 1 is calculated as Sum = (A XOR B), i.e.
Sum = (1 XOR 1) = 0. This va lue of 0 is not assigned to Sum at TO, but rather at
TO+ lOns. Statement 2 is also calculated at T2 to give Cout = (A AND B) = (1 AND 1)
= 1. The value of 1 is assigned to Cout at TO + 10 ns.

A ------'

B ~--------------~
Sum - - - - - - - - -

Cout ~-------'

TO
~

"'c

0
0

r
T1
0

"'"'c

~
~

Fig. 3.1

Referring to Verilog description of half-adder we can see tha t keyword always is


used in the behavioral description. The always body includes concurrent statements,
the same as in the data-flow descrip tion. It is important to note that the signal wh ich
appears in the always body must be dedared as a register (reg).

Copyrighted material

3.4

Fundamentals of HDL

Behavioral Description

3.3 The VHDL Variable Assignment Statement


We can use variables inside the processes. This is illustrated by the following
statements :
process (X)
variable A, B : bit ;

variable declaration statement

begin

stl: A :=X;
st2: B := not A;
st3: 01 < = A;
end process ;

Variable assignment statement


Variable assignment statement
use < = assignment operator

Variable assignment statements, as in C language, are calculated and assigned


immediately with no delay time between calculation and assignment. The assignment
operator : = is used assigned values to the variables instead of assignment operator
<=.

One important thing to note that we can label any statement in the VHDL such as
stl, st2 and st3 in the previous description.

3.4 Sequential Statements


The various forms of sequential statements are associated with behavioral
description. These statements have to appear inside process in VHDL, or inside
always or initial in Verilog. These statements execute in the order in which they
appear. Let us study these sequential statements.
3.4.1 IF Statement
An IF st:il~ment selects a sequence of statements for execution based on the value
of a condition. The condition can be any expression that evaluates to a Boolean value.
VHDL Syntax :
if (Boolean Expression) then

statement 1;
statement 2;
else
statement x;
statement y;
end if;

Copyrighted material

3.5

Fundamentals of HDL

Behavioral Description

Example :
if (EN

= '1') then

Q := St;

else

Q:=S2;

end if;

Verilog Syntax :
if (Boolean Expression)
begin

statement 1;
statement 2;

I For only one statement, begin and end can be omitted I

end
else
begin

statement x ;
State ment y;

! For only one statement, begin and end can be omitted * I

end
Example:
if (EN== 1)

Q= Sl;

else
Q= S2;

In the above examples, if EN = 1 (high), then the value of Sl is assigned to Q;


otherwise, the value of 52 is assigned to Q.

11*

Example 3.1 : Execution of IF as a D latch

VHDL
if Clk = '1' then

Q: = D;

end if;

Copyrighted material

Fundamentals of HDL

3-6

Behavioral Description

Veri log
if (Clk == 1)
begin
O = D:

end

if Clk is J (high), then the va lue of D is assigned to ou tput Q. If Clk is not high, Q
retains its curren t value, th us simulating a latch.

Example 3.2 : Execution of IF as ELSE-IF

VHDL syntax :

If (Boolean Expression 1) then


statement 1 ; statement 2; ...
e lsif (Boolean Expression 2) then
statement x; statement y; ...
else
statement a ; statement b; .. .
end if;
Example:

process (a, b , en)


begin

if en ='00' then
c < = a;

elsif en='Ol' then


c <= b;

else

c < = 'O';
encl if;
enrl process;
Veri log Syntax :
if (Boolean Expression 1)

begin

statement 1; statement 2; . ..
end
else if (Boolean Expression 2)
begin
statemen t x: statement y; .. .

Copyrighted material

3-7

Fundamentals of HDL

Behavioral Description

end
else
begin
statement a ; statement b; .. .
end
Example
always @ (a, b , en)
begin
if (en == OJ
c = a;

else if (en = = 1}

c = b;
else
c = 0;
end
Here 'en' signal is in sensitivity list. If en = 00, signal 'a' is assigned to output 'c'.
Similarly if 'en'= '01' then 'b' is assigned to 'c' else 'O' value is assigned to 'c'.
111

Example 3.3 : Behavioral description of 2 x 1 multiplexer using IF ELSE

VHDL 2x1 Multiplexer Using IF-ELSE


library ieee;
use ieee.std_logic_l 164.all;
entity mux2 x 1 is
port (DO, Dl, S, Enbar: in std_logic;
Y : out std_ logic);
end mux2 x 1;
architecture MUX of mux2 x 1 is
begin
procesa iC, DO. Dl, Enbar)
.. S, DO, Dl and Enbar are the sensitivity list of the
process.
variable temp : std_logic;
.. It is common practice in behavioral description to
use variable(s) rather than signal(s). This is done
to avoid any timing errors that may arise due to
the sequential execution of s ig nal statements.

Copyrighted material

Fundamentals of HDL

3-8

Behavioral Description

begin
if Enbar = 'O' then

if S = '1' then

temp := Dl;

else
temp: = DO;
end if;
Y < = temp;

else
y <= 'Z';

end if;
end process;
endMUX;

Verilog 2x1 Multiplexer Using IF-ELSE


module mux2 x 1 {DO, D1, S, Enbar, Y);
input DO, D1, S, Enbar;
output Y;

reg Y;
always @ (S , DO, D1, Enbar)
begin
if (Enbar == 1)

= 1'bz;

else
begin
if {S)

= D1;
/* This is a procedural assignment. Procedural assignments
are used to assign values to variables declared as regs
(as Y here in this module). Proc,edural statements have to
appear inside always, blocks, initial, tasks, or functions I

else
Y = DO;

end
end
endmodule

Copyrighted material

Fundamentals of HDL

1..

3-9

Behavioral Description

Example 3.4 : Behavioral description of a 2x1 multiplexer using ELSE


IF-VHDL and Verilog

VHDL 2x1 Multiplexer Using ELSE-IF


lihmry ieee;

use leee.lltd_logic_1164.all;
entity mux2 x 1 is
port ( DO, D1, S, Enbar : In std_logic;

Y: out std_logic);
end mux2X1;
architecture MUX of mux2x1 hi
begin
process (S , DO, D1, Enbar)
-- S, DO, D1 and Enbar are the sensitivity list of the process.
variable temp: std_logic;
begin

If Enbar = 'O' and (S = '1' ) then

temp := D1;
elslf Enb ar = 'O' and (S

temp := DO;
else
temp := 'Z';

= 'O' ) the n

-- 'Z' represents High impedance state

end If;
Y <=temp ;
end process;
end MUX;

Verilog 2x1 Multiplexer Using ELSE-IF


module mux2x1 (DO, D1, S, Enbar, Y );
Input DO, D1, S, Enbar;
output Y;
reg Y;
always @ (S, DO, D1, Enbar)
begin
If (Enbar == O & S == 1)

begin
Y

DO;

end
else If (Enbar = = O & S = = 0)

Copyrighted material

3 -10

Fundamentals of HDL
y

Behavioral Description

= 01;

else

Y = l'bz;

II b represents binary and z represents high impedance state

end
endrnodule

3.4.2 Signal and Variable Assignment


There is a difference betwe~n the execution of signal assignment statement and
variable assignment statement. We know that signal assignment statement executes in
two phases : calculation and assignment. For signal, actual assignment of new value
is delayed by the propagation delay. On the other ha nd, when we use variable
assignment statements, variables acquire their new values instantaneously. Due to this
difference in two assignments, simulation result may be different if \..re use signals
instead of variables. This is illustrated in the example 3.5.

n-.

Example 3.5 : Behavioral description of a latch using variable and signal


assignment.

The Fig. 3.2 shows the logic symbol for D latch. It has input (D), output Q and
Qbar and active high enables input (En). When En is high, the output Q follows input
D and Qbar is always the invert of Q.
D

En

En
Fig. 3.2 D-latch

...

Listing 3.2 : VHDL code for behavioral description of D-Latch using variable
assignment statements entity DLatch_var is
port ( D, En: in bit;
Q,

Obar : out bit);

end DLatch_var;
architecture DL_Var of DLatch_var is
begin

VAR : process (D, En)


variable temp1, temp2 : bit;
begin

= '1' then
templ := D;
temp2 :=not templ;

if En

-- Variable assignment statement.


-- Variable assignment statement.

Copyrighted material

3 -11

Fundamentals of HDL

Behavioral Description

end if;
Q <= templ;

-- Value of templ is assigned to Q

Obar < = temp2;

-- Value of temp2 is assigned to Obar

end process VAR;


end DL_Var;
...

Listing 3.3 : VHDL code for behavioral description of D-Latch using


signal-assignment statements
entity DLatch_sig ls

port ( D, En : in bit;
Q : buffer bit;

Obar : out bit);


is declared as a buffer because it is an
input/output signal
it appears on both the left and right hand sides
of assignment statements.

-- Q

end DLatch_sig;
architecture DL_sig of DLatch_sig is
begin
process (D, En)
begin
if En

= '1' then

Q <= D;

signal assignment

Obar < = net Q;

signal assignment

end if;
end process;
end DL_sig;
...

Listing 3.4 : Verilog code for behavioral description of a D-Latch


module D _latch (D, En, Q, Obar);

input D, En;
output

a, Obar;

reg Q, Obar;
always @ (D, En)
begin

if (En == 1)
bt'gin

O = D;

Obar= - Q;
end
Copyrighted material

Fundamentals of HDL

Behavioral Description

3 -12

end
endmodule

The Table 3.1 gives the comparison between signal and variable.
Parameter

Signal

Variable

Assignment operator

<=

Utility

Represents circuit
interconnects (wires)

Represents local information

Scope

Can be global i.e. seen by


entire code

Local, i.e. it is visible only


inside the corresponding
process, function or
procedure .

Behavior

In sequential code, the value


is assignment after some
delay.

The value is assigned


immediately.

Usage

In a package, entity or
architecture. In an entity, all
ports are signals by default.

Only in sequential code, i.e.,


in process, function or
procedure .

Table 3.1 Comparison between signal and variable

The Fig. 3.3 shows the simulation waveform of D latch using variable assignment
statement. This waveform correctly describes D-latch. The Fig. 3.4 shows the
simulation waveform of D latch using signal assignment statement. As shown in the
Fig. 3.4, at T = 50 ns, En changes from 0 .to 1, and D is 1 at T = 50 ns. Therefore, new
value for Q is calculated as 1; however, it is assigned at T = 50 + ti. Since at T = 50
ns, value of Q is still 0, Qbar is calculated as 1 using old value of Q.

---ii

En

-:I

Obar

50

100

150

200

250

300

- - - limens

Fig. 3.3 Simulation waveform of D latch using variable assignment statement

Copyrighted material

Fundamentals of HDL

Behavioral Description

313

En
Q

Obar

50

100

150

200

250

300

- - Tlmens
Fig. 3.4 Simulation waveform of D latch using signal assignment statement

3.4.3 Case Statement


The case statement is a special multi-way decision statement that tests whether an
expression matches one of a number of other expressions, and branches accordingly. It
has following syntax :
VHDL

case (control-expression) is

when test value or expression 1 =>statements 1;


when test value or expression 2 => statement s 2;
when others => statements n;
end case;
Verilog

cas e (control-expression)

test value 1 : begin statements 1;


en d

test value 2 : begin statements 2;


end
default :

begin default statements;

end
endcase

The expression value may be expressed as single value, or as a range of values or


as a value of specified expression. The statement when others (VHDL) or de fault
(Verilog) can be used to guarantee that all conditions are covered. Use of multiple
when others or default statements in one case statement is illegal.

Copyrighted material

Fundamentals of HDL'

3 14

Behavioral Description

Example :
VHDL
case option is
when "00''. => temp: = a + b;
when "01" => temp := a - b;
w hen ' 10" => temp: = a b ;
when others =>temp : = a I b;
e n d case:
Ve rilog

.,

....

case option
2' bOO : temp = a + b;
= a - b;
. 2' bOl
.. : temp
.
2' b l O: temp = a* b;

d efault : temp = a I b;
endcase

In above example, the control is option. If option = 00, then temp = a + b; if


option = 01, then temp = a - b; if option = 10, then temp = a b; if option = 11
(others or default), then temp = a I b;

3.4.4 Comparison between CASE and IF Statement


IF statement produces priority encoded logic.
Example :
proce ss (sel, a, b, c , d)
begin
if sel = '00' then
op <= a ;
elsif sel = '01' then
op < =b;
elslf sel = '10' then
op < = c;
e lse
op < = d ;
end If; .
. ,;~md p rocess;

Here, .priority encoded logic means firstly the IF statement executes sequentially,
so depending on the first IF condition that particular input is connected to output.
Next depending on the second IF condition, the another input is passed to output.
Copyrighted material

Fundamentals of HDL

3 -15

Behavioral Description

According to this logic, for this example, three multiplexer are generated by tool. So in
this case hardware is more so the delay generated by logic gates is more; so the. speed
is reduced.
The case statement produces parallel logic. Here, in case statement depenping on
the value of "sel" one of the four inputs is passed to the output. So a single
multiplexer of 4 inputs with two select lines and one outp ut is generate_d by a tool. So
the generated hardware is less, so the delay by logic gates is less; -so the speed is high.
Example:
process (sel, a, b, c, d)
begin
case sel is
when '00' =>op<= a;
when '01' = >op < = b:
when '10' = >op < = c;
when others =>op<= d;
end case;

end process;
Example 3.6 : Behavioral description of a positive edge triggered JK
flip-flop using the case statement

The Fig. 3.5 shows the clocked JK


flip-flop, loi:;:c symbol and truth table for
clocked edge tr iggered or pulse triggered
JK flip-flop.
We know that, in case of pulse or
edge triggering the flip-flop changes
state either at the positive edge (rising
edge) or at the negative edge (Falling
edge) of the clock pulse and is-sensitive
to its inputs only at th,is trapsition of the
Fig. 3.5 (a) Clocked JK flip-flop

CP

On

On1

0
0
1
1
0
0
1
1

0
1
0
1

0
0

0
0
0
1
1
1
1

Fig. 3.5 (b) Logic symbol

0
1

0
1

On+1

On

1
1
1

0
1
0

1
. On

Fig 3.5 (c) Truth table


Copyrighted material

Fundamentals of HDL

316

Behavioral Description

clock. Fig. 3.6 shows the input and output waveforms for positive edge triggering JK
flip-flop.
CP

J -. ....
. ..

K_J

a--,. ._____.
Fig. 3.6 Input and output waveforms for positive edge triggered JK flip.flop

Looking at the truth table for JK flip-flop and simplifying Qn+I function by K-map
we get the characteristic equation for JK flip-flop as Qn+I "' JQ n + KQ n. This is
illustrated in Fig. 3.7.

Fig. 3.7 Characteristic equation for JK flip-flop


~

Li sting 3.5 : HDL code for a positive edge-triggered JK flip-flop using the case
:;tatement-VHDL and Verilog.

VHDL Positive Edge-Triggered JK Flip-Flop Using Case


library leee;

use leee.std_logic_1164.all;
entity JK_FF ls
port( JK : In bit_veetor (1 dow nto OJ;
elk : in std_logie;
a. Obar : out b it);
end JK_FF;
arctiltecture Flip_Flop of JK_FF ls
b e gin
Pl : proce ss (elk)

Copyrighted material

Fundamentals of HDL

3 -17

Behavioral Description

variable templ, temp2: bit;


begin
if rising_edge (elk) then

case JK Is
when ' 01" =>tempt:= 'O';
when 'tO" => templ := 't';
when oo = >tempt:= tempt;
when "11' =>tempt := not tempt;
end c.ase;
Q <= tempt;
temp2 := not tempt;
Obar < = temp2;
end if;
end proc.ess Pt;
end Flip_Flop;

Verilog Positive Edge-Triggered JK Flip-Flop Using Case


module JK_FF (JK, c.lk, Q , Obar);
input (t:O( JK;
input c.lk;
output Q, Obar;
reg Q , Obar;
always @ (posedge c.lk)
begin

c.ase (JK)
2'd0: Q = Q;
2'dt: Q = 0;
2'd2: Q = 1;
2'd3: Q = - Q;
endc.ase
Obar=- Q;
end
endmodule

n' * Example 3.7 : Behavioral description of a 3bit up counter

A counter is a register capable of arriving at its clock input. For up counters, the
next state is the increment of the present state. For example, if the present state is 010,
then the next state is 011. For down counters, the next state is the decrement of the
present state. A 3-bit up counter counts from 0 to 7, i.e., it is a mod 8 counter.
Copyrighted material

Fundamentals of HDL

Behavioral Description

3 -1 8

The Fig. 3.8 shows the logic symbol and excitation table for 3-bit counter. It has
two inputs : elk and Reset (active high). On the positive edge of the elk (Clock) input
counter increments only if Reset input is 0 (Low); otherwise counter output is reset to

000.
elk
(Clock)

Reset

Present
state

state

t
I
I
I
I
I
I

H
L
L
L
L
L
L
L
L

xxx
000
001
010
011
100
101
110
111

000
001
010
011
100
101
110
111
000

AO
A1

3 . bit

elk

A2

counter

Reset

(a) Logic symbol

Next

(b) Excitation table

Fig. 3.8
.,..

Listing 3.6 : HDL code for a 3-bit binary counter using the case statement.

VHDL 3-Bit Binary Counter Case

S~tement

Description

library ieee;
use ieee.std_logic_1164.all;
entity CT_Case is
port ( elk, Reset : in std_logic;
0: buffer std_logic_vector (2 downto O));

end CT_Case;
architecture Counter_3b of CT_case is
begin
counter : process(clk)
variable temp: std_logic_vector (2 downto 0) := "011";
-- 011 is the initial value, so the counter starts from 100
begin
if rising_ edge (elk) then
if Reset = 'O' then

case temp is
when "000" = >temp: = "001';
when "001" =>temp: = "010";
when "010" = >temp:= "011' ;

Copyrighted material

3 -19

Fundamentals of HDL

Behavioral Description

when '011" = > temp := ' 100";


when '100' = > temp:= ' 101";
when ' 101" =>temp := ' 110";
when '110" = >te mp := '111";
when "111" =>temp:= ' 000";
when others = > temp : = ' 000';
end case;
else
temp : = "000';
end if;
end if;

0 <=temp;
end process counter;
end c ounter_3b;
Verilog 3-Bit Binary Counter Case Statement De scription
module CT_Case (elk, Reset, Q);
input elk, Reset;
output (2:0) O;
reg (2:0) O;

initial
Q

The initia l procedure is to force the counter to start


from initial count q = 011 I

= 3'b010;

always @ (posedge elk)


begin
if (Reset = = 0)

begin

case (Q}
3'd0 : Q
3'd1: Q
3'd2 : Q
3'd3 : Q
3'd4 : 0
3'd5 : 0
3'd6 : Q

=
=
=
=
=
=
=

3'd1;
3'd 2;
3'd3;
3'd4;
3'd5;
3'd 6;
3'd7;

11 d represents decimal value

3'd 7 : Q = 3'd0;
endcase
end
else

Copyrighted material

Fundamentals of HDL

3-20

Behavioral Description

= 3'b000;

end
endmodule

3.4.4.1 Verilog Casex and Casez

Verilog has another two types of case : casex and casez. Casex ignores the don't
care (x) values of control expression w.hereas casez ignores the high impedance in
control expression values. For example, in
casex (I)
4bOXX1 :
4'b1XXO :

default :

0 = 1'b0;
0 = 1'b0;
0 = t'bz;

endcase;

All occurrences of X are ignored. Thus, output 0 is 0 when least significant bit of I
is 1 (high), the output 0 is 1 when most significant bit of I is 1 (high) and otherwiJ;e
output is in high impedance state.
Let us see the example of casez :
case z(l)
4'bzzz1 : 0

= 1' bl;

4'bzzz0 : 0

default : 0

= l'bz;

1' bO;

Here, 0 is 1 if, and only if the least significant bit of I is 1, 0 is 0 if and only if
the least significant bit of I is 0 and otherwise output 0 is in high impedance state.
,,._. Example 3.8 ; Verilog description of a priority encoder us ing casex.

A priority encoder is an encoder circuit that includes the priority function. In


priority encoder, if two or more inputs are equal to 1 at the same time, the input
hdving the highest priority will take precedence.
Table 3.2 shows truth table of 4-bit priority encoder.
Inputs

Outputs

Do

D1

D2

03

Y1

Yo

x
x
x

x
x

Table 3.2 Truth table of 4-bit priority encoder


Copyrighted material

Fundamentals of HDL

3 - 21

Behavioral Description

Table 3.2 shows 0 3 input with highest priority and 0 0 input with lowest priority.
When 0 3 input is high, regardless of other inputs output is 11. The 0 2 has the next
priority. Thus, when 0 3 = 0 and 0 2 = 1, regardless of other two lower priority input,
output is 10. The output for 0 1 is generated only if higher priority inputs are 0, and
so on. The output V (a valid output indicator) indicates, one or more of the inputs are
equal to 1. If all inputs are 0, V is equal to 0, and the other two outputs (Y1 and Y0) of
the circuit are not used .
._

Listing 3. 7 : Verilog description for a 4-bit priority encoder.


module Encoder (D. Y);

input (0:3) D;
output (1:0) Y;
reg (1:0) Y;
always @ (D)
begin
casex (D)
4'b1000 :

y=

2'b00;

v=

l 'bl

4'bx100: Y = 2'b01; V = 1'b1


4'bxxl0 : Y = 2'b10; V = 1'b1
4'bxxxl : Y = 2'b l 1; V = l 'bl
default : Y

2'bzz; V

= l'bO

II DO-D3 = 0000

endcase
end
endmodule

3.4.5 Loop Statement


Loop is a sequential statement. It includes a sequence of statements that is to be
executed repeatedly, zero or more times. The number of repetitions is controlled by
the range of an index parameter. The loop statement should be written inside process
in VHDL or inside always or initial in Verilog.
3.4.5.1 For-Loop Statement
VHDL for loop

The general syntax for a for-loop is :


For index (iteration scheme) loop
statementl; statement2; statement3;
end loop

Copyrighted material

3 22

Fundamentals o f HDL

Behavioral Description

Example;
For i in 1 to 10 loop
i_squared(i) := i i;
end loop;

This for loop executes 10 times whenever execution begins. Its functior;l is to
calculate the squares from 1 to 10 and insert them into the i_squ ared signal array. The
index variable i starts at the leftmost (lower) value (1) of the range and is incremented
until the rightmost (higher) value (10) of the range. In each iteration index is
incremented by 1. When the value of index is greater than the higher value, the loop
is terminated.
In some languages, the loop index (in this example, i) can be assigne9. a value
inside the loop to change its value. VHDL does not allow any assignment to the loop
index. VHDL locally declares the index; it is not necessary to declare variable i
explicitly in the process, function or procedure. If another variable of the same name
exists in the process, function or procedure, then these two variables are treated as
separate variables.
We can use downto cause to create a descending range. Here is the example :
for i in 10 downto 1 loop
i_squared (i) := 1 1;
e nd loop;

In this case, the iteration index (i) is decremented by l in each iteration.


Verilog for loop

The general syntax f9r a for-loop is :


for (initial_ assignment; condition; step-assignment)
beg'.:.~

statementl; statement2; statement3; ......


end

Note : for single statement in the for loop we can omit begin and end.
Example:
intege r i;
for (i = 1; i < = 10; i = 1

+ 1)

begin

i_squared Iii = i i;
end

In the above example, the initial_assignment (i = 1) specifies the initial value of the
loop index. The condition specifies the condition when loop must be terminated. As
long as the condition is true, the statements in the loop are executed. The
step-assignment (i = i + 1) specifies how to modify index; it can be incremented or
decremented.
Copyrighted material

Fundamentals of HDL

3 - 23

Behavioral Description

3.4.5.2 While-Loop Statement

The general syntax of while-loop in VHDL and Verilog is :


while (condition)
statementl; statement2; statement3; ...... .
end

This loop executes all the statement written in the while loop body as long as the
condition is true. When condition is false, program exits the loop.
VHDL while-loop

Count: = O;
Result := O;
While (Count < 10) loop
Count: = Count + 1;
Result : = Result + Count;
end loop;

- Executes loop till count is 9

Verilog While-Loop

Count= O;
Re sult = O;
While (Count < 10)

11 Executes loop till count is 9

begin

Count = Count + 1;
Result = Result + Count;
end

Note : Instead of direct value we can use variable to specify the termination
condition. For example, we can write, while (Count < x). In this case,

loop is executed till value of Count is less than value of x.


3.4.5. 3 Verilog Repeat

In Verilog, the repeat statement executes the loop for fixed number of times. It
cannot be used to loop on a general logical expression, i.e., no condition is allowed in
repeat.
Example :
i = O; Result = O;
repeat (10)
begin

Result
end

= Result +

i;

The above loop is executed 10 times.

Copyrighted material

Fundamentals of HDL

3. 24

Behav!oral Description

3.4.5.4 Ve rilog Fonive1


The syntax for forever-loop is:
Forever statement;
This loop statement continuosly executes the statement. It can be exited by use of
the disable statement. It is commonly used to generate clock signal.
Example :
initial
begin

clock = 1'bO;
forever # 10 clock = -clock;
end

In this example, clock first gets initialized to 0 and then toggles every 10 time
units.
3.4.5.5 VHDL Next and Exit
The VHDL supports, two sequential statements next and exit associated with the
loop. The exit causes program to exit the loop whereas next causes the program to
jump to the end of the loop, skipping all statements written between next and end
loop. The index is incremented and if its value is still within the range of the loop, the
loop is repeated, otherwise the program exits the loop.
process (A, B}
constant max_limit: inte ger := 100;
begin

for i in 0 to max_limit loop


If (done(i) = true} then

next;
else
done(i} :

= true;

end if;

mul(i) < = A(i) B(i);


end loop;
end process;

In the above example, the for loop multiplies the numbers in arrays A and B and
puts the results in array mu!. This behavior continues whenever the flag is in array
done is not true. If the done flag is already set for this value of index i, then the next
statement is executed. It skips the further statements and goto next iteration. If value
of i is still within the range of loop i.e. less than max_limit. The loop is repeated.

Copyrighted material

Fundamentals of HDL

3 -25

Behavioral Description

,,_. Example 3.9 : Behavioral description of ones counter


This is behaviorai description of the circuit which counts the number of 'l's in a
binary vector.
VHDL ones counter description
llbrary i eee;
use ieee.std_logic_ 1164.all;

entity count_ones is
port (Din : in std_logic_vector (7 downto 0);
ones : out integer range 0 to 8);
end count_ones;
arehltecture count of count ones ls
begin

process (Din)
variable temp : integer range 0 to 8;
begin

temp:= O;

for i in O t o 7 loop
if(Din(i) = '1 ') then
temp: = temp+ 1;

end if;
end loop;
ones < = temp;

end process;
end count;
Verilog ones counter description
module count_ones (Din, Ones)
input (7 : OJ Din;
output (2 : OJ ones;
reg 12 : OJ ones;
integer i;
initial

ones = 3'b000;
always @ (Din)
begin
for (i

= O; i

< 8; i

= i + 1)

begin

if (Din [iJ = = 1)
Copyrighted material

Fundamentals of HDL

3 - 26

Behavioral Description

begin

ones = ones
end
end
end
endmodule

1;

n1 Example 3.10 : Factorial using behavioral description


A factorial of a given number is calculated as
N! = N(N - 1) (N - 2) (N - 3) ..... 1.
For example, 5! = 5 x 4 x 3 x 2 x 1 = 120
In this N and result of factorial are the positive integers thus we can declare them
as natural.

Listing 3.8 : HDL code for calculating the factorial of positive


Veri log

integers~VHDL

and

VHDL : Calculating the Factorial of Positive Integers


entity factorial is
port( N : in natural;
Y : out natural);
end factorial;

archit ecture fact of factorial is


begin
process (N)
variable i, j : natural;
begin
i := 1;
j := 1;

while (j < = N) loop


i : = i j;
j :=

i+

1;

end loop;
y <= i;
end proce11;
end fact;

Copyrighted material

Fundamentals of HDL

3 - 27

Behavioral Description

Verilog : Calculating the Factor ial of Positive Integers


m odule factorial (N, Y);
input [5:0) N;
output [15:0) Y;
reg [15:0) Y;
/* Since Y is an output, and it will appear inside "always," then
Y has to be declared "reg" *I
integ er i;
always@ (N)
begin
y = l;

II Y can be written as 16'b0000000000000001or 16'd l.


i = l;

while (i < = N)
begin

Y = i Y;
i

= i + l;

end
end
endmod ule
Case study : Booth Algorithm

A powerful algorithm for signed-number multiplication is a Booth's algorithm,


which generates a 2n-bit product and treats both positive and negative numbers
uniformly.
This algorithm suggest that we can reduce the number of operations required for
multiplication by representing multiplier as a difference between two numbers.
For example, multiplier 0 0 1 1 1 0 (14) can be represented as follows.

0 1 0 0 0 0 (16)
- 0 0 0 0 1 0 (2)

0 0 1 1 1 0 (14)

Therefore, the product can be computed by adding 2 4 times the multiplicand to


the 2's complement of 2 1 times the multipliGand. In simple notations, we can describe
the sequence of required operations by recoding the preceding multiplier as
0+100 - 10

Copyrighted material

Fundamentals of HDL

Behavioral Description

3-28

In general, for Booth's algorithm recoding scheme can be given as :

-1 times the shifted multiplicand is selected when moving from 0 to 1, +1 times the
shifted multiplicand is selected when moving from 1 to 0, and 0 times the shifted multiplicand
is selected for none of the above case, as multiplier is scanned from right to left.
We have to assume an implied 0 to right of the multiplier LSB. This is illustrated
in the following examples.
Example : Recode the multiplier 1 0 1 1 0 0 for Booth's multiplication.
Solution :

0 1

1 0 0

- 1+1 0-1

~ltiplier

0 0

Recoded multiplier

Example : Recode the multiplier O 1 1 O O 1 for Booth's multiplication.


Solution :
0
+ 1

1 0 0 1 .r-:ultiplier

0 -1 0 +1 -1

Recoded multiplier

The Fig. 3.9 shows the Booth's multiplication. As shown in the Fig. 3.9, whenever
multiplicand is multiplied by - 1, its 2's complement is taken as a partial result.
Multiplier : O O 1 1 O O

Multiplicand : O 1 O O 11.

Recoded multiplier : 0 + 1 0 - 1 0 0
Multiplication :
0

+1

-1

()'

f-

2's complement of the


multiplicand

0
0

Fig. 3.9 Booth's multiplication


The same algorithm can be ,used for negative multiplier. This is illustrated in the
following example.

Copyrighted material

Fundamentals of HDL

Behavioral Description

3 - 29

Example : Multiply 0 1 1 1 0 (+14) and 1 1 O 1 1(-5).


Solution :
0
1
0

0
1
-1

-1

(+14)
(- 5)

Multiplicand
Multiplier
Recoded Multiplier

Multiplication :
0
0

-1

+1

0
-1
O 2's complement of the multiplicand

(-70)

The same algorithm also can be used for negative multiplier and negative
multiplicand. This is illustrated in the following example.
Example : Explain the following pair of signed 2's complement numbers.

Multiplicand : 1 1 0 0 1 1 (-13)
Multiplier

: 1 0 1 1 0 0 (-20)

Solution :
0
+1

- 1

-1

Multiplier

Recoded Multiplier

Multiplication :

- 1

+1

-1

Multiplicand
0

Recoded Multiplier

~~~~~~~~~~~~~~~~~~~~~~~~~-

0
0

<-

2"s complement of the


multiplicand

2"s complement of the


multiplicand

(260)

Copyrighted material

3 - 30

Fundamental s of HDL

Behavioral Description

Hardware Implementation

The Booth's algorithm can be implemented as shown in the Fig. 3.10. The circuit is
similar to circuit for positive number multiplication. It consists of n-bit adder, shift,
add subtract control logic and four registers, A, B, Q and Q_1. As shown in the
Fig. 3.10 multiplier and multiplicand are loaded into register Q and register B,
respectively, and register A and Q _1 are initially set to 0.

- - - n-bit bus
n

Add I Sub

Shift, Add
and subtract
Control Logic
L____....,.__.!;E;!!n~ab~le;_J-,___-;;:ddj~;t,;;:ctl
Add/subtract
Enable
.___....,..._ __,
Shift Right
n-Bit Adder

,,

Initial settings : A -

, , r----------------

o and 0_1 = O

Fig. 3.10 Hardware implementation of signed binary multiplication

The n-bit adder performs addition of two inputs. One input is the A register and
other input is multiplicand. In case of addition, Add/sub line is 0, therefore Cin,;. 0
and multiplicand is directly applied as a second input to the n-bit adder. In case of
subtraction, Add/sub line is 1, therefore Cin =1 and multiplicand is complemented
and then applied to the n-bit adder. As a result, the 2's complement of multiplicand is
added in the A register.
The shift, add and subtract control logic scans bits Q 0 and Q_ 1 one at a time and
generates the control signals as shown in the table 3.3. If the two bits are same
(1 - 1 or 0 - 0), then all of the bits of the A, Q, and Q _ 1 registers are shifted to right
1 bit without addition or subtraction (Add/subtract Enable = 0). If the two bits are
differ, then the multiplicand ( B-register) is added to or subtracted from the A register,
depending on the status of bits. If bits are Q 0 = 0 and Q_1 = 1 then multiplicand is
added and if bits are Q 0 = 1 and Q . 1 = 0 then multiplicand is subtracted. After
addition or subtraction right shift occurs such that the leftmost bit of A ~An -I) is not

Copyrighted material

Fundamentals of HDL

3 - 31

Behavioral

De~cription

only shifted into A n-l, but also remains in A n-t This is required to pres.erve the sign
of the number in A and Q. It is known as an arithmetic shift, since it preserves the sign
bit.

Qi

Q.1

-Add/sub

Add/Subtract Enable

Shift .

Table 3.3 Truth table for shift, add and subtract control logic

The sequence of events in Booth's algorithm can be explained with the help of
flowchart shown in Fig. 3.11.

- o

0 .1 -

B -

Multiplicand
Q Multiplier
Count n

= 10

= 01

= 11
= 00

A -A- B

A - A +B

Arithmetic Shift
Right: A,
0_ 1
Count Count - 1

a.

No

Fig. 3.11 Booth's algorithm for signed multiplication


Copyrighted material

3 . 32

Fundamentals of HDL

Behavioral Description

Let us see the multiplication of 4-bit numbers, 5 and 4 with all possible
combinations.
CASE 1 : Both Positive ( 5x 4)

(5)

Multiplier (Q) +- 0 1 0 O (4)

Q..1

Operation

0 0 0 0

0 1 0 0

Initial

Step 1 :

0 0 0 0

0 0 1 0

Arithmetic shift right

Step 2 :

0 0 0 0

0 0 0 1

Arithmetic shift right

Step 3 :

1 0 1 1

0 0 0 1

A +- A-8

1 1 0 1

1 0 0 0

Arithmetic shift right

0 0 1 0

1 0 0 0

A +-A+ 8

0 0 0 1

0 1 0 0

Arithmetic shift right

Multiplicand (8) +- 0 1 0 1
Steps

Step 4 :

Result

0 0 0 1

0 1 0 0

= + 20

CASE 2 : Negative Multlplier ( 5 x - 4 )


Multiplicand(8) ... 0 1 0 1 (5)

Multiplier (Q)

...

11 0 0 (- 4)

Q_I

Operation

0 0 0 0

1 1 0 0

Initial

Step 1 :

0 0 0 0

0 1 1 0

Arithmetic shift right

Step 2:

0 0 0 0

0 0 1 1

Arithmetic shift right

Step 3:

1 0 1 1

0 0 1 1

1 1 0 1

1 0 0 1

Arithmetic shift right

1 1 1 0

1 1 0 0

Arithmetic shift right

Steps

Step 4 :
Result :

1 1 1 0

1 1 0 0

=-

A +-A -

20 (2's complement of 20)

Copyrighted material

Fundamentals of HDL

Behavioral Description

3 - 33

CASE 3 : Negative Multiplicand ( - 5 x 4 )


+- 1 0 1 1 (- 5)

Multiplier(Q)

Q..,

Operation

0 0 0 0

0 1 0 0

Initial

Step 1 :

0 0 0 0

0 0 1 0

Arithmetic shift right

Step 2 :

0 0 0 0

0 0 0 1

Arithmetic shift right

Step 3:

0 1 0 1

0 0 0 1

A.-A-B

0 0 1 0

1 0 0 0

Arithmetic shift right

1 1 0 1

1 0 0 0

A <- A+B

1 1 1 0

1 1 0 0

Arithmetic shift right

Multiplicand(B)
Steps

Step 4 :

Result:

1 1 1 0

1 1 0 0

<-

0 1 0 0 (4)

- 20

CASE 4 : Both Negative ( - 5 x - 4 )


Multiplicand(B) <-

Multiplier(Q)

<- 1 1 0 0 (- 4)

Q_,

Operation

0 0 0 0

1 1 0 0

Initial

Step 1 :

0 0 0 0

0 1 1 0

Arithmetic shift right

Step 2 :

0 0 0 0

0 0 1 1

Arithmetic shift right

Step 3 :

0 1 0 1

0 0 1 1

A <- A-B

0 0 1 0

1 0 0 1

Arithmetic shift right

Step 4 :

0 0 0 1

0 1 0 0

Arithmetic shift right

Result :

0 0 0 1

Steps

....

1 0 1 1 (-5)

0 1 0 0

= + 20

Listing 3.9 : 4x4-bit booth algorithm-VHDL and Verilog.

VHDL 4 x 4-Bit Booth Algorithm


library leee;
use ieee.std_logic_l 164.all;
use leee.numeric_std.all;
entity Booth is

Copyrighted material

Fundamentals of HDL

3. 34

Behavioral Description

port ( B, O : in signed (3 downto O);


Result : buffer signed (7 downto 0));
end Booth;

-- B : Multiplicand 0 : MUitiplier

architecture Mul Booth of Booth is


begin

process (B, 0)
variable 001 : signed (1 downto O);
variable A : signed (3 downto O);
variable 0_1 : unsigned (0 downto O);
begin

A:= "0000"; 0 _1 := "O;


for i in 0 to 3 loop
001 := 0(0) & 0_1;

case temp is
when "1 0" = >A := A-B;
when "01'' =>A :=A + B;
when others = > null;
end case;
0 _1 := 0(0);
0 : = 0 srl 1; -- logical shift 0 of one position to the right
0(3) := A(O);

A := A sra 1; -- arithmetic shift A of one position to the right

end loop;
Result< = A & O;
end process;
end Mul_Booth;

Verilog 4x4-Bit Booth Algorithm


module bo'Jth (B, 0, Result);
input signed (3:0] B, O;
output signed [7:0) Result;
reg signed [7:0] Result;
reg signed (3:0) A;
reg (1:0] 001; .
reg 0_1;
integer i;
always @ (B, 0)
begin

A= 4'b0000;

Copyrighted material

Fundamentals of HDL

3 - 35

Behavioral Description

0 _1 = 1'b0;

for (i = O; i < 4; i = i

+ 1)

be gin

11 concatenation

001 "' {0(0], 0 _1 };

case (001)

2'd2 : A = A - B;
2'd1 : A = A +B;

default : begin end


endcase
0 _1

= O(OJ;

0:=0>>1;

11 log ical shift 0 of one position to the right

0(3] = A(O J;

A = A >> l ;

11 arithmetic shift A of on e p osition to the right

A [7[ = A [6];

/* The above two statements perform arithmetic shift


in w hich the sign of the number is preserved after

th e shift. *I
e nd
Result = {A, O}

11 concatenation

end
endrnodule

Review Questions
1. List tlte l1ighligltts of behavioral description.

2. Explain the structure of VHDL beliaviora/ description.


3. Explain tlte structure of Verilog bel1avioral description.
4. What is sensitivity list ?
5. Write a VHDL and Verilog behavioral description for full-adder.
6. Write a VHDL and Verilog bl!haviora/ description for 4 xl 11111/tiplexer using if-else.
7. Give the comparison between signal and variable assignment in VHDL.

ODO

Copyrighted material

(3 - 36)

Co y1 Jht

rn

1I

Structural Description
4.1 Highlights of Structural Description

When information about the hardware components of the digital system is


known we can use structural description.

It simulates the digital system by describing its logical components such as


gates, registers and even processor.

It is more design specific. For example, if we want to implement the adder,


we can specify the type of adder such as ripple adder or carry look ahead
adder. This is not the case with behavioral description. In which we can
specify the add operation by writing the statement C. = A+ B.

All the statements in structural description are concurrent. At any simulation


time all statements that have an event are executed simultaneously. This
means that execution of statements depend on events, not on the order that
the statements are placed in the module.

Basic Verilog package recognizes the gates; however basic VHDL package
does not recognize gates. In VHDL, we have include one or more libraries,
packages or modules that have the gate description.

4.2 Organization of the Structural Description


The listing shows the VHDL and Verilog structural description for half-adder. In
the VHDL description, the entity part is same as that of behavioral description.
However, architecture part has two components : declaration and instantiation.
In declaration part all different components used in the system description are

declared. For example, following description declares AND gate component.


component and2
port ( 11, 12 : In std_logic;
01 : out std_logic);
end component;

(4 - 1)

Copyrighted material

Fundamentals of HDL

4-2

Structural Description

The and2 components has two inputs : 11 and 12 and one output 01. Once the
component is declared we can use the same component one or more times in the
system description.
The instantiation part of the code maps the generic inputs/outputs to the actual
inputs / outputs of the system. For example, the statement and2 port map (A, B, Cout);
maps A to input I1 of and2, input B to input 12 pf and2, and output Cout to output
01 of and2. This mapping means that the logic relationship 'between A . B and Cout is
the same as between Il, 12 and 01.
....

Listing 4.1 : HDL structural description- VHDL and Verilug

VHDL Structu ral Description


library ieee;
use ieee.std_logic_1164 .all;
entity half_adder is
port (A, B : in std_logic;
Sum, Cout: ou t std_logic);
end half_add;
architecture adder of half adder Is
-- Component Declaration
component xor2
port ( 11, 12 : in std_logic;
01 : ou t std_logic):

end component;
component and2
p ort ( 11, 12 : in s td_!ogic;
01 : out std_logic);

end component ;

begin
Statements instantiation
Xl : xor2 port map (A, B, Sum);
A1 : and2 port map (A, B, Cout );
end adder;

Verilog Structural Description


module system (a, b , Sum, Cout);
input a, b;
output Sum, Cout:
xor X1 (Sum, A , B );
11 X1 is an ide::itifier. It is optional it can be omitted.
an d Al (Cout, a , b);
11 A 1 is optional identifier; it can be omitted.
e n dmodule

Copyrighted material

Fundamentals of HDL

4-3

Structural Description

The VHDL part of listing 4.1., does not give the complete code for half_adder. It
does not specify the function of the component::' and2 and xor2. To specify and2 as an
AND gate or xor2 as an XOR gate, we have to link the entity having the same name
as component which specifies the relationship between 11, 12 and 01 as AND gate or
XOR gate, respectively. This is illustrated in Listing 4.2.
~

Listing 4.2 : HDL code of half adder-VHDL and V(rilog

VHDL half_adder description


library ieee;
use ieee.std_logic_1164.all;
entity xor2 is
port( I1, 12 : in std_logic;
01 : out std_logic);
end xor2;
architecture xor_gate of xor2 is
begin
0 1 < = 11xor12;
end xor_gate;
library ieee;
use ieee.std_logic_1164.all;
entity and2 is
port (Il, 12 : in std_logic; 01 : out std_logic);
end and2;
architecture and_gate of and2 is
begin
01 < = 11and12;
end and_gate;
library iee!!;
use ieee.std_logic_1164.all;
entity half_adder is
port (A, B : in std_logic;
Sum, Cout: out std_logic);
end half_adder;
architecture adder of half_adder is
component xor2
port ( Il, 12 : in std_logic;
01 : out std_logic);
Copyrighted material

4.4

Fundamentals of HDL

Structural Description

end component;
component and2
port ( 11, 12 : ID std_logic;
01 : out std_logic);

end component;
begin

Xl : xor2 port map (a, b, S);

Al : and2 port map (a, b, C);


end adder;

As mentioned earlier, basic Verilog recognizes logic gates. The Fig. 4.1 ~hows all
the gates recognized by the Verilog. Like VHDL, the statements in the structural
Verilog are concurrent; they are event driven and their order of appearance in the
module is irrelevant.

--t>Ibuf

=D- =D- =lDor

-I>-

=[>--

not

nor

xor

and

=D-

:=)~

nand

xnor

Fig. 4.1 Built-in gates in Verilog

4.3 Binding
Binding is nothing but the linking of entity to architecture and .coml?onent to
entity in the VHDL. In Verilog, the binding means linking of one module to another
module.

4.3.1 Binding between Entity and Architecture in VHDL


Refer the listing 4.3. Here the architecture archl is linked (bounded) to entity ent
through the predefined word of. Similarly, architecture arch2 is also bounded to entity
ent through the predefined word of. As archl and arch2 are linked with entity ent,
we can use signals Il, l2 and 01 in both the architectures.
It is important to note that eventhough the architectures archl and arch2 are
linked with entity ent; they are not linked (bounded) themselves. Therefore, signal (X)
defined in archl is not recognized in arch2 a.n d similarly, the signal (Y) defined in
arch2 is not recognized in archl.

Copyrighted material

Fundamentals of HDL
....

4.5

Structural Description

Listing 4.3 : Binding between entity and architecture.


entity ent is
port (11, 12 : in std_logic ;
01 : out s td_logic);
end e nt;
architecture arch1 of ent la
signa l X : std_logic;
end archl;
architecture arch2 of e nt 11
signal Y : std_logic;
end arch2;

4.3.2 Binding between Entity and Component in VHDL


The listing 4.4 shows the binding between entity and component. The entity and
component can be bounded by their names. U the names of entity and component are
same, the component is automatically bounded to the corresponding entity. Here, the
component andgate is bounded to the entity andgate because their names are same.
Architecture gate is bounded to entity andgate by the of.
Since component andgate is bounded to entity andgate and entity andgate is
bounded to architecture gate, the r~lationship between 11, 12 and 01 defined in the
architecture gate is visible to the component andgate .
..,.

Listing 4.4 : Binding between entity and component.


entity andgate ii
port (11, 12 : in std_logic;
01 : out std_logic);
end andgate;
architecture g ate of andgate ii
begin
0 1< = 11 and12 ;

end gate;
entity ent la
port (A, B : in std_logic;
sum, cout : out std_logic);
end ent;
architecture arch of eht la
component andg ate

Copyrighted material

Fundamentals of HDL

4.5

Structural Description

port (11, 12 : in sto_l0gic;


01 : out std_logic);

end component;
b egin
andgate p ort map (A, B, Cout);

end arch;

4.3.3 Binding between Library and Module in VHDL


The listing 4.5 shows the binding between the library ieee to the module in VHDL.
Library is a predefined word, ieee is the name of the library, use is a predefined
word, and ieee.std_logic_l164.all refers to the part of the library to be bound. This
part of the library provides the definition for the standard_logic type.
IJJJ>

Listing 4.5 : Binding' tiJtwe'en Jibraty


library ieee;

a'rfo

moaule in VHDL.

use ieee.std_l ogic_11'64 .all;

entity' ent is

port (11. 12 : 1n std_logic;


01 : out std_logic);

en d ent;
architeeture arch of ent is

end arch;

The HDL simulator generates a library named work every time it compiles HDL
code. We can bound this library to another module by including following statement
in the module.

Here, the entity to be bound to the module is andgate; andgate has an architecture
by the name of gate, and aU information in this architecture is visible to the module in
which the above use statement is written.

In listing 4.6, the statement :

*
binds the architecture xor2_7 of the entity ent to the component 'XOr.2. Because of
this binding, component xor2 behaves as a two-input XOR gate with a propagative
delay of 7ns. Similarly, the statement :
Lopynghtcd material

Fundamentals of HDL

4.7

Structural Description

binds the architecture and 2_4 of the entity ent of the component and2. Because of
this binding, component and2 behaves as a two-input AND gate with a propagative
delay of 4ns.
In listing 4.6, it is assumed that entities ent and half_adder are stored in the same
directory, i.e., their path is same. In case of different paths we have to specify the path
of the library work in the for all statement.
.,...

Listing 4.6 : Binding between a library and component in VHDL


- code to be bound to module half adder
library leee;
use leee.std_logic_1164.all;
entity ent is
port ( Il, 12 : in std_logic;
01 : out std_logic);
end ent;
architecture xor2_7 of ent is
begin

01<=11xor12;
end xor2_7;
architecture and2 4 of ent is
begin
01 < = 11 and 12 after 4 ns;
end and2_4;
compile the above code and store it in a known location.
module half_adder
library leee;
use leee.std_logic_1164.all;
entity half_adder is
port (A, B: in std_logic;
Sum, Cout : out std_logic);
end half_adder;
architecture adder of half_adder ii
component xor2
port ( 11, 12 : in std_logic;
01 : out std_logic);

Copyrighted material

fundamentals of HDL

4-8

Structural Description

end component;
component and2
port ( I1, 12 : in std_logic;
01 : out std_logic);
end component;
for all : xor2 use entity work.ant (xor2_7);
for all: and2 use entity work.ent (and2_4);
begin

Xl : xor2 port map (A, B, Sum);

Al : and2 port map (A, B, Cout);


end adder;

4.3.4 Binding between Two Modules in Verilog


The listing 4.7 shows the binding between two modules in Verilog. Here, the
statement:
Second MO (Sum[O], Cout[O(, A[O), B(O));
Written in the first module binds secon d module to first module. Accordingly, the
relationship between Sum, Cout, A and B is as follows :

)Ill>

Sum[O] is the output of the two input XOR gate with A[O) and B[O] as the
inputs.

Cout[O] is the output of the two input AND gate with A[O] and B[O] as the
inputs.

Listing 4.7 : Binding between two modules in Verilog.

m odule first (Sum, Cout, A, B);


input (1:0) A;
input [1:0) B;
output [1:0) Sum, Cout;
second MO (Sum[O). Cout[O], AIOJ, B[O));
second Ml (Sum(l). Cout[1). A[l ), B(l));
endmodule
m odule second (S, C, Al, Bl);
input Al;
input Bl;
output S, C;
xor (S, A, B);
and (C, A, B);
endmodule

Copyrighted material

Fundamentals of HDL

u
....

4-9

Structural Description

Example 4.1 : VHDL code for inverter, AND, OR, XOR, NOR and NANO
gates.
Listing 4.8 : VHDL code for inverter, AND, OR, NOR, NANO XOR gates
-- one input gates ------------------------- ---------------------------------------------- ------------library ieee;
use ieee.std_logic_1164.all;
entity one_input is
port ( 11 : in std_logic;
01 : out std_logic);
end one_input;
architecture inv_4 of one_input is
begin

01 < = not 11 after 4ns;

-- inverter with 4-ns delay

end inv_4;
architecture inv_7 of one_input is
begin
01 < = not 11 after 7 ns;

-- inverter with a 7-ns delay

end inv_7;
-- two input gates -----------------------------------------------------------------------------------library ieee;
use ieee.atd_logic_1164.all;
entity two_input is
port ( I1, 12 : in std_logic;
01 : out std_logic);
end two_input;
architecture xor2_4 of two_input is
begin
01 < = I1 xor 12 after 4ns.; -- 2-input exclusive-or with 4-ns delay
end xor2_4;
architecture and2_4 of two_input is
begin
01 < = I1 and 12 after 4ns;
end and2_4;
architecture and2_7 of two_input is
begin
01 < = I1 and 12 after 7 ns;

-- 2-input and gate with 4-ns delay

-- 2-input and gate with 7-ns delay.

end and2_7;

Copyrighted material

Fundamentals of HDL

4 -10

Structural Description

architecture or2_4 of two_input la


begin

01 < = 11 or 12 after 4ns;

-- 2-input or gate with 4-ns delay

end or2_4;
architecture or2_7 of two_ input is
begin
01 < = 11 or 12 after 7 ns; -- 2-input or gate with 7-ns delay.
end or2_7;
architecture nor2_7 of two_input la
begin
01 < = 11 nor 12 after 7 ns; -- 2-input nor gate with 7-ns delay.
end nor2_7;
architecture nand2_7 of two_input is
begin

01 <= 11nand12 after 7 ns; -- 2-input nand gate with 7-ns delay.
end nand2_7;
-- three input gates --------------------------------------------------------------~---------------library ieee;
use ieee.std_logic_1164.all;
entity three_input Is
port ( 11, 12, 13 : in std_logic;
01 : out std_logic);
end three_input;
architecture and3_ 4 of three_input Is
begin

01 < = 11 and 12 and 13 after 4ns;


end and3_4;
architecture and3 _7 of three_ input is

-- 3-input and gate with 4-ns delay.

begin

01 < = 11 and 12 and 13 after 7ns;

-- 3-input and gate with 7-ns delay.

end and3_7;
architecture or3_ 4 of three_ input Is
begin

01 < = 11 or 12 or 13 after 4ns;


end or3_4;
architecture or3_7 of three_input la

-- 3-input or gate with 4-ns delay.

begin
Copyrighted material

4. 11

Fundamentals of HDL
01 <

= I1 or 12 or 13 after 7 ns;

Structural Descriptio n

-- 3-input or gate with 7-ns delay.

end or3_7;
four input gates ------------------------------------------------------------- ------------- ------library iee e ;
u se ieee.std_logic_1164.all;
entity four_input is
port ( 11, 12, 13, 14 : in std_logic;
01 : out std_logic);
emi"four_input;
architecture or4_4 of four_input is
begin

01 < = I1 or 12 or 13 or 14 after 4ns; -- 4-input and gate with 4-ns delay.


end or4_4 ;

lJJ. .

Example 4.2 : Structural description of a 2 x 1 multiplexer with active low


enable.
We have seen the behavioral description of 2x1 multiplexer in example 2.2. The
same 2x 1 multiplexer is redrawn here for convenience.

2x 1

MUX

Enbar or En _ __,..___... 12

En----~

(b) Logic symbol

(a) Logic diagram

Fig. 4.2 2 x 1 multiplexer

....

Listing 4.9 : HDL description of a 2x1 multiplexer with active low enable.
library leee;
use ieee.std_Jogic_1164.all;
entity mux2 x 1 is
port (DO, Dl, S, Enbar: 1n st d_logic;
Y : out std_!ogic);

Copyrighted material

4 -12

Fundamentals of HDL

Structural Description

endmux2 x 1;
architecture MUX of mux2 x 1 is
-- Components declaration
component and3
port ( Il, 12, 13: In std_logic;
01 : out std_logic);

end component;
Only different types of components need be declared.
Since the multiplexer has two identical AND gates,
only one is declared.
component or2
port ( Il, 12 : in std:...logic;
01 : out std_logic);
end component;
component inv
port ( I1 : in std_logic;
01 : out std_logic);

end component;
signal 11, 12, 13, 14 : std_logic;
for all : and3 use entity work.three_input (and3_7);
for all : inv use entity work.one_input (inv_7);
for all: or2 use entity work.two_input (or2_7);
be~

-- instantiation
Al : and3 port map (DO, 11, 12, 13);
A2 : and3 port map (Dl, S, 12, 14);
lVl : inv port map (S, Il);
lV2 : inv port map (Enbar, 12);
OR : or2 port map (13, 14, Y);
endMUX;

Verilog 2 x 1 Multiplexer with Active Low Enable


module mux2 x 1 (DO, Dl, S, Enbar, Y);
Input DO, Dl, S, Enbar;
output Y;
and #7 (13, DO, 11, 12);
or #7 (Y, 13, 14);
and #7 (14, Dl, S, 12);
not #7 (Il, S);

Copyrighted material

Fundamentals of HDL

Structural Desc ription

4 -13

not #7 (12, Enbar);


endmodule
u

Example 4.3 : Structural description of a 2 x 4 decoder with enable input.

A decoder is a multiple-input,
multiple-output logic circuit which
n-dala
converts coded inputs into coded
inputs
outputs,
where the input and output
n
Possible
n:2
n
codes are different. The input code
2 outputs
Decoder
generally has fewer bits than the output
Enable
code. Each input code word produces a
inputs
different output code word, i.e., there is
one-to-one mapping from input code
Fig. 4.3 General structure of decoder
words into output code words. This
one-to-one mapping can be expressed in a truth table.
The Fig. 4.3 shows the general structure of the decoder circuit. As shown in the
Fig. 4.3, the encoded information is presented as n inputs producing 2" possible
outputs. The 2" output values are from 0 through 2" - 1. Sometimes an n-bit binary
code is truncated to represent fewer output values than 2". For example, in the BCD
code, the 4-bit combinations 0000 through 1001 represent the decimal digits 0-9, and
combinations 1010 through 1111 are. not used. Usually, a decoder is provided with
enable inputs to activate decoded output based on data inputs. When any one enable
input is unasserted, all outputs of decoder are disabled.
A

Abar

Bbar

Y0 Abar Bbar

Enable (EN)

Fig. 4.4 2-to-4 line decoder


Copyrighted material

Fundamentals of HDL

4 -14

Structural Description

A decoder which has an n-bit binary input code and a one activated output
out-of-2" output code is called bin ary decoder. A binary decoder is used when it is
necessary to activate exactly one of 2 outputs based on an n-bit input value.
Fig. 4.4 shows 2 to 4 decoder. Here, 2 inputs are decoded into four outputs, each
output representing one of the minterms of the 2 input variables. The two inverters
provide the complement of the inputs, and each one of four AND gates generates one
of the minterms.
The Table 4.1 shows the truth table for a 2-to-4 decoder. As shown in the truth
table, if enable input is 1 (EN = 1), one, and only one, of the outputs Y0 to Y3, is
active for a given input. The output Y0 is active, i.e. Y0 = 1 when inputs A = B = 0,
the output Y1 is active when inputs A = 0 and B = l. If enable input is 0, i.e. EN = 0,
then all the ou tputs are 0.
Inputs

Outputs

EN

Y3

Y2

Y1

Yo

0
0

Table 4.1 Truth table for a 2-to-4 decoder


Listing 4.10 : HDL description of a 2x4 decoder with enable Input.
....

VHDL 2 x 4 Decoder with Enable Input


library ieee;
u s e ieee.std_logic_1164.all;

entity decoder2 x 4 is
port ( A, B, En : in std_logic;
Y : out std_logic_vector (3 downto 0));
end decoder2 x 4;
architectu re decotjer of decoder2x4 hi
component inv
port ( 11 : in std_logic;
01 : out std_logic);
end component;
component and3
port ( 11, 12, 13 : in std_logic;
01 : out std_logic);

Copyrighted material

Fundamentals of HDL

4-15

Structural Description

end component;
for all : inv use entity work.one_input (inv_ 4);
for all: and3 use entit y work.three_input (and3_4);
-- Signal Declaration
signal Abar, Bbar : std_logic;
begin

IVO : inv port map (A, Abar);


!Vl : inv port m ap (B, Bb ar);
AO : and2 port map (Abar, Bba r, En, YO);
Al : and2 port map (Abar, B, En, Yl);
A2 : and2 port map (A, Bbar, En, Y2);
A3 : and2 port map (A, B, En, Y3);
end decoder;
Verilog 2 x 4 Decoder with Enable Input
module decoder2 x 4 (A, B, En, Y);
input A, B;
input En;
output (3:0] Y;
wire Abar, Bbar;

not (Abar, A);


not (Bbar, B);
and (YO, Abar, Bbar, En);
and {Yl, Abar, B, En);
and (Y2, A, Bbar, En);
and (Y3, A, B, En);
Endmodule
n

Example 4.4 : Structural description of a 2 x 4 d eco der with tri-state output.

The Fig. 4.5 shows the 2x 4 decoder with tri-state output. For this decoder when
enable (En) input is low, the outputs are in high impedance state, i.e. tri-state.

Copyrighted material

4 -16

Fundamentals of HDL

Structural Description

Bbar

Abar

>---

Y1

>---

v2

En
Fig. 4.5 2x 4 decoder with tri-state output

The Table 4.2 shows the truth table for a 2x4 decoder with tri-state output.
Inputs

Outputs

En

Y3

Y2

Y1

YO

.1

Table ~. i futh table for 2x 4 decoder with trl-state output

Iii>

Listing 4.11 : VHDL behavioral description of a tri-state buffer.


entity two_input ls

port ( 11, 12 : in std_logic:


01
: out std_logic);
end two_input;
architecture bufifl of two_input is

Copyrighted material

Fundamentals of HDL

4-17

Structural Description

begin

buffer : process (11, 12)


variable temp: std_Jogic;
begin
If (12 = '1') then

temp:= 11;
else
temp := 'Z';
end if;
01 <=temp;

end process buffer;


end bufifl;
....

Listing 4.12 : HDL description of a 2x4 decoder with tri-state output.

VHDL 2 " 4 Decoder with Tri-State Output


library ieee;
use leee.std_logic_1164.all;
entity decoder2 x 4 is
port (A, B : in std_Jogic;
En: in std_logic;
Y: out std_logic_vector (3 downto 0));
end decoder2 x 4;
architecture deco9,er of decoder2 x 4 is
component bufifl
port (11, 12 : in std_logic; 01 : out std_logic);
end component;
component inv
port ( 11 : in std_logic;
01 : out std_logic);
end component;
component and2
port ( 11, 12 : in std_logic;
01 : out std_logic);
end component;
for all : bufif1 use entity work.two_input (bufif1);

for all: inv use entity work.one_input (inv_4);

Copyrighted material

4 - 18

Fundamentals of HDL

Structural Description

for all : and2 use entity work.bind2 (and2_4);


-- Signal Declaration
signal IO, 11, I2, I3: std_logic;
signal Abar, Bbar: std_logic;
begin
BO : bufifl port map (IO, En, Y(O));
B1 : bufif1 port map (11, En, Y(1));
B2 : bufifl port map (I2, En, Y(2));
B3 : bufifl port map (13, En, Y(3));
IVO : inv port map (A, Abar);
IVl : inv port map (B, Bbar);
AO : and2 port map (Abar, Bbar, IO);
Al: and2 port map (Abar, B, 11);
A2 : and2 port map (A, Bbar, I2);
A3 : and2 port map (A, B, I3);
end decoder;

In VHDL, we have to write a description of. the tri-state buffer gate. However,
Verilog has built-in buffers. The Fig. 4.6 shows the buffers supported by Verilog.
in

buff1:

---1>-~

Enable

notif1 :

in~ out
Enable

in

out

--t:;.- out
~

buffO:
Enable

notito :

in - - - { >.

__J

out

Enable

Fig. 4.6 Built-in buffers in Verilog


Verilog 2 x 4 Decoder with Tri-State Output
module decoder2 x 4 (A, B, En, Y);
Input A, B;
Input En;
output (3:0) Y;

wire Abar, Bbar;


buflfl (Y(O), IO, En);
buflfl (Y(l). 11, En);
buflfl (Y(2), I2, En);
buflfl (Y(3J. I3, En):

Copyrighted material

Fundamentals of HDL

4 -19

Structural Description

not (Abar, A);


n ot (Bbar, B);
and (IO, Abar, Bbar);
and (11 , Abar, B);
and (12, A, Bb ar);
and (13, A, B);
endmodule

Example 4.5 : Structural description of a full-adder.


The Fig. 4.7 the imp lementation of a full-adder with two half-adders and OR gate.
The listing 4.13 shows the HDL code for this full-adder.
First Half-Adder
A

Second Half-Adder

--t,....,_,,..,"'""

B _.;.:..+;..,_.....,fl

Fig. 4.7 Implementation of a full-adder with two half-adders and an OR gate


.,.

Listing 4.13 : VHDL code for the half adder.


library ieee;
use ieee.ltd_logic_1164.all;
entity 12_02 is
port ( 11, 12 : ln std_ logic;
0 1, 02 : out std_logic);
end 12_02;
architecture HA of 12_02 is
component xor2
port ( 11, 12 : ln s td_logic;
01 : out std_logic);
end component;
component and 2
port ( 11, 12 : ln std_logic ;
01 : out std_logic);
and compone nt;

Copyrighted material

Fundamentals of HDL

4-20

Structural Descriptli:m

for Al: and2 use entiW work.two_input (and2_4);


for Xl: xor2 use entity work.two_input (xor2_4);
begin

Xl : xor2 port map (11, 12, 01);


Al : and2 port map (11, 12, 02);
end HA;

...

Listing 4.14 : HDL description of a full adder -VHDL and Verilog

VHDL Full Adder Description


library leee;
use ieee.std_logic_1164.all;
entity full_ adder is
port (A, B, Cin: in std_logic;
Sum, Cout : out std_logic:.;
end full_adder;
architecture adder of full adder is
component HA
port ( Il, 12 : in std_logic;
0 1, 02; out. std_)ogic);
end component;
component or2
port ( I1, 12 : in std_ logic;
01 : out std_logic);
end component;
for all ; HA use entity work.12_02 (HA);
for all ; or2 use entity work.two_inout (or2_4);
signal SO, CO, Cl : std_logic;
begin

HA1 ; HA port map (A, B, SO, CO);


HA2 : HA port map (Cin, SO, Sum, Cl);
OR1 : or2 port map (CO, Cl, Cout);

end adder;

Veril6g Full Adder Description

module full_adder (A, B, Cin, Sum, Cout);


input A, B, Cin;

Copyrighted material

Fundamentals of HDL

Structural Description

4 -21

output Sum, Cout;


wire SO, CO, Cl;

II binding HA modules to module full_adder


HA Hl (A, B, SO, CO);
HA H2 (SO, Cin, Sum, Cl);

or (Cout, CO, Cl);


endmodule

II Half-Adder Module
module HA (A, B, S, C);
Input A, B;
output S, C;
xor (S, A, B);
and (C, A, B);
endmodule

n* Example 4.6 : Structural description of an SR-latch.


The simplest type of latch is the set-reset (SR) latch. It can be constructed from

either two NANO gates or two NOR gates.


SR latch using NOR gates

Fig. 4.8 shows the SR latch using two


NOR gates. As shown in the Fig. 4.8, the
two NOR gates ar.: cross coupled so that the
output of NOR gate 1 is connected to one of
the inputs of NOR gate 2 and ~ice versa.
The latch has two outputs Q and Q, and two
inputs, set and reset.

S (Set)

Before going to analyse the SR latch, we


recall that a logic 1 at any input of a NOR
gate forces its output to a logic 0. Let us
understand the operation of this circuit for various input/ output possibilities.
Fig. 4.8 SR latch using NOR gates

0 __,
R (Reset)-~

CASE 1 : S

=1 and R =0

In this case, S input of the_NOR gate 2 is


at logic 1, hence its output, Q is at logic 0.
Both inputs to NOR gate 1 are now at
logic 0. So that its output, Q is at logic 1.
S (Set)

Fig. 4.9 (a)


Copyrighted material

Fundamentals of HDL

4-22

Structural Description

R (Reset),- ---<

CASE 2 : S 0 and R ,. 1

In this case, R input of the NOR gate 1


is at logic 1, hence its output, Q is at logic 0.
Both inputs to NOR gate 2 are now at logic
0. So that its output, Qis at logic 1.

S (Set)

Fig. 4.9 (b)

= 0 and R =0
Initially, Q = 1 and Q= 0

CASE 3 : S

Let us a~ume that initially Q = 1 and


Q = 0 . With Q = 0, both inputs to NOR gate
_

S (Set)

Fig. 4.9 (c)

1 are at logic 0. So its output, Q is at logic l.


With Q = l, one input of NOR gate 2 is at
logic l, hence its output, Q is at logic 0. This
shows that when S and R both are low (at
logic 0) the output state does not change.
Initially, Q = 0 and

Q= 1

Let us make opposite assumption that


Q = 0 and Q= 1. With Q= l , one input of
NOR gate 1 is at logic 1, hence its output Q
is at logic 0. With Q = 0, both inputs_ to
NOR gate 2 are at logic O. So its output Q is
S (Set)

at logic l. In this case also there is no


change in the output state.
Fig. 4.9 (d)

CASE 4 : S = 1 and R

=1

When R and S both are at logic 1, they force the outputs of both NOR gates to the
low state. (Q=O and Q= O). So we call this an indeterminate or prohibited state, and
represent this condition in the truth table as an asterisk (). This condition also violates
the basic definition of a latch that requires Q to be the complement of Q. Thus in
normal operation this condition must be avoided by milking sure that l 's are not
applied to both the inputs simultaneously.
Fig. 4.10 shows the symbol and truth table for SR latch. Looking at Fig. 4.10 we
can summarize the operation of SR latch as follows :

Copyrighted material

Fundamentals of HDL

Structural Desc ription

With both inputs low, the output does not change and latch remains latched
in its last state. This condition is called inactive state because nothing
changes.

When R input is low and S input is high, the Q output of latch is set (at
logic 1).

When R input is high and S input is low, the Q output of latch is reset (at
logic 0).

When R and S inputs both are high, output is unpredictable. This is called
indeterminate condition.

(a) Symbol

.,..

4-23

Qn

Q n+1

x
x

State
No change(NC)

Reset

.Set

Indeterminate

(b) Truth table

Fig. 4.10
Listing 4.15 : HDL description of an SR latch with NOR gates.

VHDL SR Latch with NOR Gates


library ieee;
use ieee.std_logic_1164.all;
entity SR_Latch is
port ( R, S : in std_logic;
Q,

Q, Obar: buffer std_logic);


Obar are declared buffer because they behave as input and output.

end SR_Latch;
architecture Latch of SR Latch is
. Here

and Obar signals are declared as buffer; however these signals are

-- mapped with in and out signals. Some simulators may not allow such
-- mapping. In this case, change all in and out to buffer.

Copyrighted material

Fundamentals of HDL

4-24

Structural Description

component nor2
port ( 11, 12 : in std_logic;
01 : out std_logic);
end component;
for all : nor2 use entity work.two_input (nor2_7);
b egin
n l : nor2 port map (S, Q, Obar);

n2 : nor2 port map (R, Obar, Q);


end Latch ;
Verilog SR Latch with NOR Gates
module SR_Latch (R, S, Q, Obar);
input R, S;
output Q, Obar;
nor (Obar, S,Q);
nor (Q, R, Obar);
endmodule
,,_. Example 4.7 : Structural description of a D latch
We have already seen the data-flow description of D latch in example 2.5. The
Fig. 2.11 show the D latch.
....

Listing 4.16 : HDL description of a D latch-VHDL and Verilog

VHDL D latch Description


library leee;
use ieee.std_logic_1164.all;
entity D_Latch is
port ( D, En: in std_logic;
Q, Obar: buffer std_logic);
end D_Latch;
architecture Latch of D Latch is
Here Q and Obar signals are declared as buffer; however the se signals are
-- mapped with in and out signals. Some simulators may not allow such
-- mapping. In this case, change all in and out to buffer.
component nand2
port ( 11, 12 : in std_logic;
01 : out std_logic);

Copyrighted material

Fundamentals of HDL

4 25

Structural Description

end component;
for all: n and2 use entity work.two_input (nand2_7);
signal Sl, R, Rl : std_logic;
begin

NAl : nand2 port map {D, En, Sl);


NA2 : nand2 port map (R, En, Rl);
NA3 : nand2 port map (D, D, R); nand gate used as an inverter
NA4 : nand2 port map (Sl, Obar, Q);
NA5 : nand2 port map (0, Rl, Obar);
end Latch;

Verilog D latch Description


module D_latch (D, En, Q, Obar);
input D, En;
output 0, Obar;
wire Sl, Rl;

/I assume 7 ns delay for nand gate


nand #7 gatel (Sl, D, En);
nand #7 gate2 (0, Obar, Sl);
nand #7 gate3 (Rl, R, En);
nand #7 gate4 (Obar, 0 , Rl );
nand #7 gate5 (R, D, D);

II nand gate used as an inverter


II the names gatel, gate2 ... given are optional

endmodule

n' * Example 4.8 : Structural description of pulse triggered SR flip-flop.

The Fig. 4.11 shows the pulse triggered SR flip-flop.

$1

CP

R1

O (Q bar)

Fig. 4.11 Clocked SR flip-flop

Copyrighted material

Fundamentals of HDL

CP

Structural Description

4 - 26

CP

a.

Cn1

J1.
J1.
J1.
J1.
J1.
J1.
J1.
J1.

0
0

x
x

x
x

(a) Logic symbol

, ,
0

Stata
No cllange(NC)

Reset
Set

Indeterminate
No change(NC)

(b) Truth table for clocked SR flip-flop


Fig. 4.12

The Fig. 4.12 shows the logic symbol and truth table of clocked SR flip-flop.
Listing 4.17 : HDL description of a SR-Flip-Flop-VHDL and Verilog.
IJI>

VHDL SR-FF Description


library iaee;
use ieee.std_logic_1164.all;
entity SR_FF is
p ort (

S, R, CP : in std_logic;
Q,

Obar : buffer std_logic);

end SR_FF;
architecture FF of SR FF is
-- Here Q and Obar signals are declared as buffer; however these signals are
-- mapped with in an d out signals. Some simulators may not allow such
-- mapping . In this case, change all in and out to buffer.
component nand2
port (

11, 12 : in std_logic;

01 : out std_logic);
on d component;
for a ll : nand2 use e ntity work .two_input (nand2_7);
signal Sl, Rl : std_logic;
begin

NA1 : nand2 port map (Sl, Obar, Q);


NA2 : nand2 port map (Q, R1 , Obar);
NA3 : nand2 port map (S, CP, S1);
NA4 : nand2 port map (R, CP, Rl);
en d Latch;

Copyrighted material

Fundamentals of HDL

Structural Description

4 -27

Verllog SR-FF Description


module SR_FF (S. R. CP,

Q,

Obar);

input S, R. CP;
output

a. Obar;

wire Sl, Rl;

11 assume 7 ns delay for nand gate


nand # 7 gate1 (Q , Obar, S1);
nand #7 gate2 (Obar, Q , Rt );
nand # 7 gate 3 {St , S, CP);
nand #7 gate4 (Rt , R, CP);

II the names gatet, g at e2 ... given are optional


endmodule

Ill

Example 4.9 : Structural description of pulse triggered D flip-flop.

Like in D latch, in D flip-flop the basic SR flip-flop is used with complemented


inputs. The D flip-flop is similar to D-latch except clock pulse is used instead of
enable input. Fig. 4.13 shows logic symbol and truth table for D flip-flop and Fig. 4.14
shows the input and output waveforms.

CP

(a) Logic symbol

CP

Q n+1

.n.

I~

an

(b) Truth table of D flip-flop


Fig. 4.13

CP ~
1

lI

D~

1:

a~

Fig. 4.14 Input and output waveforms of clocked D flip-flop


Copyrighted material

Fundamentals of HDL
~

4 -28

Structural Description

Listing 4.18 : HDL description of a D flip-flop-VHDL and Verilog

VHDL D_FF Description


library leee;
use ieee.std_Joglc_1164.all;
entity D_FF is
port ( D, CP : in std_logic;
Q, Obar: buffer std_logic);
end D_FF;
architecture FF of D FF is
-- Here Q and Obar signals are declared as buffer; however these signals are
-- mapped with in and out signals. Some simulators may not allow such
-- mapping. In this case, change all in and out to buffer.
component nand2
port ( 11, 12 : in std_logic;
01 : out std_logic);
end component;

for all: nand2 use entity work.two_input (nand2_7);


signal S1, R, R1 : std_logic;
begin
NAl : nand2 port map (D, CP, Sl);
NA2 : nand2 port map (R, CP, R1);
NA3 : nand2 port map (D, D, R); -- nand gate used as an inverter
NA4 : nand2 port map (S1, Obar, Q);
NAS : nand2 port map (Q, R1, Obar);
end FF;
Verilog D_FF Description
module D_FF (D, CP, Q, Obar);
input D, CP;
output Q, Obar;
wire S1, Rl;

11 assume 7 ns delay for nand gate


nand #7 gate1 (Sl, D, CP);
nand #7 gate2 (Q, Obar, Sl);
nand #7 gate3 (Rl, R, CP);
nand #7 gate4 (Obar, Q, R1);

Copyrighted material

4-29

Fundamentals of HDL

Structural Description

11 nand gate used as an inverter

nand #7 gate5 (R, D, D);

II the names gate1 , g ate2 ... given are option al


endmodule

n' * Example 4.10 : Structural description of pulse triggered JK flip-flop.


The Fig. 4.15 (a) shows the pulse triggered JK flip-flop, and Fig. 4.15 (b) and (c)

shows the logic symbol and truth table for JK flip-flop.

Fig. 4.15 (a) Clocked JK flip-flop

CP

On

O n+1

0
0
0
0

0
0

0
0

1
1

1
1
1
1

0
0

1
1
1

1
1

1
1

Fig. 4.15 (b) Logic symbol


~

On+1

On

On

Fig 4.15 (c) Truth table

Listing 4.19 : HDL descri ption of JK flip-flop


VHDL JK Flip-Flop
library ieee:

use

leee.std_logi~_1164.all;

entity JK_FF Is
port ( J, K, CP : in std_logic;
Q, Obar : buffer std_logic);
-- Q , Obar are declared buffer b e cause they be h ave as input and output.

end JK_FF;

Copyrighted material

Fundamentals of HDL

4. 30

Structural Description

architecture FF of JK FF ill
-- Here 0 and Obar signals are declared as buffer; however these signals are
-- mapped with in and out signals. Some simulators may not allow such
-- mapping. In this case, change all in and out to buffer.
component nor2
port ( 11, 12 : in std_logic;
0 1 : out std_logic);
end component;

component and3
port ( 11, 12, 13 : in std_logic;
01 : out std_Jogic);

end component;
for all : nor2 use entity work.tw o_input (nor2_7);
for all : and3 use entity work.three_input (and3_7);
signal R, S
begin

Nl : nor2 port map (S, 0, Obar);


N2 : nor2 port map (R, Obar, 0);
Al: and3 port map (0 , K, CP, R);
A2 : and3 port map (Obar, J, CP, S);
end FF;

Verilog JK_FF
module JK_FF (J, K, CP, 0, Obar);
input J, K, CP;
output 0 , Obar;
nor (Obar, S, 0);
nor ( Q, R, Obar);
and (R, 0 , K, CP);
and (S, CP, J, Obar);
endmodule

,,_. Example 4.11 : Structural description of a 3-bit magnitude comparator


using a 3-bit adder.
We have seen 2-bit comparator in chapter 2. If the number of bits to be compared

is more than two bits, the truth tables and hence the circuit becomes more
complicated. Thus, we can implement 3-bit comparator with some different approach.
In this approach 3-bit adder is used to generate AeqB, AgtB and AltB signals.
Copyrighted material

Fundamentals of HDL

Structural Description

4 - 31

Consider, there are two numbers A and B, each of n bits. Let us assume A is greater
than B. This condition can be written as
A>B=>A - B >0

: B+ 1 is 2's complement of B

=> A+B + l>O


~ A+B>-1

We represent - 1, in n bit binary numbers as


1,, l,, _ 1 1 2 11 1 0

The above equation says that if A is greater than B, then the sum of_A and B
should be greater than ln ln - l 1 2 11 10 . If n adder is used to add A and B, and the
final carryout is 1 then we can say that A + B > ln 1" _ 1 12 11 10 , i.e. A > B.
If this condition is not satisfied, we can say that A
equality by checking the following equation.
A+ B = ln ln -

B. Now we can check of

12 11 lo

If A > B and A = B, both conditions are not true then we can say that A < B.

The Fig. 4.16 shows the circuit diagram of comparator for n = 3.


62

61

A2

BO

A1

AO

Bbar2

Full
Adder

AgtB

C2

Full
Adder

Sum2

Sum1

AltB

AeqB

C1

Full
Adder

Sumo

Fig. 4.16 3-bit comparator using 3-bit adder

Copyrighted material

Fundamentals of HDL

4-32

Str;uctural.Description

The listing 4.20 shows the HDL code for 3-bit comparator. The HDL code for a
full-adder has already written in example 4.5.
..,.

Listing 4.20 : HDL description of a 3-bit comparator using adders.

VHDL 3-Blt Comparator Using Adders


library leee;
use leee.std_loglc_1164.all;
entity compare3_bit ls
port ( A, B : in std_logic_vector (2 downto O);
AgtB, AltB, AeqB: buffer std_logic);
end compare3_bit;
architecture compare of compare3_bit ls
component full_ adder
port ( Il, 12, 13 : in std_logic;
01, 02 : out std_logic);
end component;
component inv
port ( I1 : in std_logic;
0 1 : out std_logic);
end component;
component nor2
port ( 11, 12 : in std_logic;
01 : out std_logic);
end cCJmponent;
component and3
port ( 11, 12, 13 : in std_logic;
01 : out std_logic);
end component;
for all : full_adder us e entity work.full_adder (adder);
for all : inv use entity work .one_input (inv_4);
for all : nor2 use entity work.two_input (nor2_4);
for all : and 3 use entity w ork.three_inp ut (and3_7);
signal Sum, Bbar: std_logic_vector (2 downto O);
signal C : std_logic_vector (2 downto 1);
begin

inl : inv port map (B(O), Bbar(O));


in2 : inv port map (B(l), Bbar(l));
Copyrighted material

4. 33

Fundamentals of HDL

Structural Description

in3 : inv port map {B(2), Bbar(2));


FO: full_adder port map (A(O), Bbar(O), 'O', Sum(O), C(l));
Fl : full_adder port map (A(l), Bbar(l), C(l), Sum(l), C(2));
F2: full_adder port map (A(2), Bbar(2), C(2), Sum(2), AgtB);
Al : and3 port map (Sum(O), Sum(l), Sum(2), AeqB);
Nl : nor2 port map (AeqB , AgtB, AltB);
end compare;

Verilog 3-Bit Comparator Using Adders.


module compare3_bit (A, B, AgtB, AltB, AeqB);
Input (2:0( A, B;
output AgtB, AltB, AeqB;
wire (2:1( C;
wire [2:0) Sum, Bbar;
not (Bbar [O), B[O();
not (Bbar(l), Bill);
not (Bbar(2(, B(2();
full_adder MO (A(O), Bbar(O). l'bO, Sum(O). C(l();
full_ adder Ml (A(l ), Bbar(l). C(l). Sum(l). C(2();
full_adder M2 (A(2(, Bbar(2). C(2], Sum(2). AgtB) ;
and # 7 (AeqB, Sum(O(, Sum(l(. Sum[2();
nor (AltB, AeqB, AgtB);
endmodule
111.. Example 4.12 : Structural Description of an SRAM Cell

A simple SRAM (static RAM) cell consists of a latch. It has a tri-state output. If the
Sel line of the cell is low, the output of the cell is in high, impedance state. The R/W
(Read/ Write) signal controls the operation of the cell. If RI W is high, the cell
performs read operation; otherwise it performs write operation. The Table 4.3 shows
the excitation -table for memory cell.

Sel

R/W

Din

En

en

Dout

Din

Din

Din

Table 4.3 Excitation table of SRAM cell

Copyrighted material

4 . 34

Fundamentals of HDL

Structural Description

K-map simplification
For En

ForD

0
:. 0 = Din . R/Vll

En = Sel. R/Vll

ForCn

RJW

SeI

Cn

Dout

Oout = Q (for Cn = 1)
Oout Z (for Cn 0)

= Sel. R/Vll

Fig. 4.17

The Fig. 4.17 shows the logic symbol and logic diagram of SRAM cell.

SRAM

Cell

Dout

Oout

R/Vll
(RWb ar)

Set
(a) Logic symbol

(b) Logic diagram

Fig. 4.18

The listing 4.21 shows the HDL code for SRAM cell. The code is linked with the
entity D-latch in example 4.7 by statement :
for all : D_Latch use entity work. D_Latch (Latch) ;

Listing 4.21 : HDL description of SRAM memory cell.

VHDL SRAM Memory Cell Description


library leee;
use leee.std_logic_1164.all;

Copyrighted material

Fundamentals of HDL

4-35

Structural Description

entity memory ls
port ( Sel, RW, Din: in std_logic;
Dout: buffer std_logic );
end memory;
architecture mem_cell of memory is
component and2
port ( 11, 12 : in std_ logic;
01 : out std_logic);
end component;
component inv
port ( 11 : in std_logic;
01 : out std_logic);
end component;
component bufifl
port ( 11, 12 : in std_logic;
01 : out std_logic);
end component;
component D_Latch
port ( Il, I2 : in std_logic;
01, 02: buffer std_logic);
end component;
for all: and2 use entity work.two_input (and2_4);
for all: inv use entity work.one_input (inv_4);
for all: or2 use entity work.two_input (or2_4);
for all: bufifl use entity work.two_input (bufifl);
for all : D_Latch use entity work.D_latch (Latch);
signal RWbar, D, En, Q : std_logic;
begin

INl : inv port map (RW, RWbar);


Al : and2 port map (Se!, RWbar, En);
A2: and2 port map (Sel, Din, D);
Dl: D_Latch port map (D, En,

a, open);

-- open is a predefined word; it indicates that the port is left open.


A3 : and2 port map (Se!, RW, Cn);
bufl : bufifl port map (Q,Cn, Dout);
end mem_cell;

Copyrighted material

4- 36

Fundamentals of HDL

Structural Description

Verilog SRAM Memory Csll Description


module memory (Sel, RW, Din, Dout );
input Sel, RW, Din;
output Dout;
wire RWbar, D, Q;

not (RWbar, RW);


and (En, Sel, RWbar);
and (D, RWbar, Din);

D_Latr..il

ul (D, En, Q, Obar);

and (Cn, Sel, RW );


buflfl (Dout, Q, Cn);
endmodule

4.4 State Machine


There are many applications in which digital outputs are required to be generated
in accordance with the sequence in which the input signals are received. This
requirement cannot be satisfied using a combinational logic system. These applications
require outputs to be generated that are not only dependent on the present input
conditions but they also depend upon the past history of these inputs. The past
history is provided by feedback from the output back to the input.
Fig. 4.19 shows the block diagram of sequential circuit/finite state machine (FSM).
As shown in the Fig. 4.19, memory elements are connected to the combinational circuit
as a feedback path.

lnp uts

Combinational
circuit

Outputs

(Combinational
componenl)

Memory
elements

Present state

(Sequential
component)

14-

Nexistale

Sequential circuit

Fig. 4.19 Block diagram of sequential circuit I FSM

j
Copyrighted material

Fundamentals of HDL

.37

Structural Description

The information stored in the memory elements at any given time defines the
present state of the sequential circuit. The present state and the external inputs
determine the outputs and the next state of the sequential circuit. Thus we can specify
the sequential circuit by a time sequence of external inputs, internal states (present
states and next states), and outputs.
Sr. No.

Comblnatlonal circuits

Sequential circuits

1.

In combinational circuits. the output variables


are at all times dependent on the
combination of input variables.

In sequential circuits, the output variables


depend not only on the present input
variables but they also depend upon the past
history of these input variables.

2.

Memory unit is not required in combinational


circuits.

Memory unit is required to store the past


history of input variables in the sequential
circuit.

3.

Combinational circuits are faster in speed


because the delay between input and output
is due to propagation delay of gates.

Sequential circuits are slower than the


combinational circuits.

4.

Combinational circuits are easy to design.

Sequential circuits are comparatively harder


to design.

5.

Parallel adder is a combinational circuit.

Serial adder is a sequential circuit.

Table 4.4 Comparison between combinational and sequential circuits

4.4.1 Types of Sequential Circuits


In synchronous or clocked sequential networks, clocked flip-flops are used as
memory elements, which change their individual states in synchronism with the
periodic clock signal. Therefore, the change in states of flip-flops and change in state
of the entire circuit occurs at the transition of the clock signal.
The synchronous or clocked sequential networks are represented by two models.

Moore model : The output depends only on the present state of the
flip-flops.

Mealy m1Jdel : The output depends on both the present state of the flip-flop(s)
and on the input(s).
4.4.1.1 Moore Model

As mentioned earlier, when the output of the sequential circuit depends only on
the present state of the flip-flop, the sequential circuit is referred to as Moore model.
Let us see one example of Moore model. Fig. 4.20 shows a sequential network which
consists of two JK flip-flops and AND gate. The network has one input X and one
output Y.

Copyrighted material

4. 38

Fundamentals of HDL

QA

JA

Structural Description

Je

CP
KA

Os

QA

Ka

QB
y

Fig. 4.20 Example of Moore model


As shown in the Fig. 4.21, input is used to determine the inputs of the flip-flops. It
is not used to determine the output. The output is derived using only present states of
the flip-flops or combination of it (in this case Y = QAQ 9 ).

In general form the Moore model can be represented with its block schematic as

shown in Fig. 4.21 (a) and (b).


In the Moore model, as output depends only on present state of flip-flops, it
appears only after the clock pulse is applied, i.e. it varies in synchronism with the
clock input.

Inputs

{:

Next
state
decoder

Memory
elements

I
Fig. 4.21 (a) Moore model

Inputs

{:
~

Next
state
decoder

Memory
elements

Output
decoder
(Combinational
circuit)

--. }~i---

Fig. 4.21 (b) Moore circuit model with an output decoder

Copyrighted material

Fundamentals of HDL

4-39

Structural Description

4.4.1.2 Mealy Model

When the output of the sequential network depends on both the present state of
flip-flop(s) and on the input(s), the sequential circuit is referred to as Mealy model.
Fig. 4.22 shows the sample Mealy model. As shown in the Fig. 4.22, the output of the
circuit is derived from the combination of present state of flip-flops and input(s) of the
circuit.

QA

JA

JB

CP

KA

Os

QA

Ke

Oe
y

Fig. 4.22 Example of Mealy model

Looking at Fig. 4.22, we can easily realise that, changes in the input within the
clock pulses cannot affect the state of the flip-flop. However, they can affect the
output of the circuit. Due to this, if the input variations are not synchronized with the
clock, the derived output will also not be synchronized with the clock and we get
false output (as it is a synchronous sequential network). The false outputs can be
eliminated by allowing input to change only at the active transition of the clock (in
our example HIGH-to-LOW).
In general form the Mealy model can be represented with its block schematic as
shown in Fig. 4.23.

r-Output
decoder

'"'""

Next
state
decoder

Outputs

Memory
elements

r--

Fig. 4.23 Mealy circuit model

Copyrighted material

Fundamentals of HDL

Structural Description

4-40

4.4.1.3 Moore Vs Mealy Circuit Models


Sr.
No.

Moore Model

Mealy Model

a)

Its output is a function of present state


only.

Its output is a function of present state


as well as present input.

b)

Input changes does not affect the


output.

Input changes may affect the output of


the circuit.

c)

Moore model requires more number of


states for implementing same function.

It requires less number of states for


implementing same function.

4.4.2 State Machine Notations


In the state machine, the Boolean variables have different names according to their

generation place.

Input variable : AU variables that originate outside the sequential machine


are called input variables.

Output variable : All variables that exit the sequential machine are called
output variables.

State variable : The output of flip-flops (memory) defines the state of a


sequential machine. Therefore, the state variables are the flip-flop outputs.

Excitation variable : Excitation variables are the inputs to the flip-flops


(memory). Excitation variables are generated by the input combinational logic
operating on the state variables and input variables.

For example, in the Mealy model shown in Fig. 4.22, X is an input variable, Y is
an output variable, QA and Q 8 are the state variables and variable XA which excites
flip-flop B is an excitation variable.
4.4.2.1 State and State Variable

We know that state is defined by the output of flip-flops (memory). In the state
machine, state variables and states are related by the expression
y

where

Number of state variables (e.g. flip-flops)

and

y = Maximum number of possible states

The 4 state variables can represent a maximum of 16 states.


4.4.2.2 Present State and Next State

In state machines, it is necessary to distinguish state variables before and after the
clock pulse. State variable A can be represented as A before the arrival of a clock and

Copyrighted material

Fundamentals of HDL

4 - 41

Structural Description

as A+ after the arrival of a synchronizing clock pulse. The idea of present state and
next state is illustrated in Fig. 4.24.
Clock

I,.._ \

I
I

I
I

I
I

State ==>k:

\,__--fI

t+1

t- 1

A-

>K
I
I
I
I
I
I

I
I

>K

A+

I
I
I
I
I
I

Fig. 4.24 Illustrating present state and next state


Present state

The status- of all state variables, at some time, t, before the next clock edge,
represents condition called present state.
Next state

The status of all state variables, at some time, t + 1, represents a condition called
next state.
4.4.2.3 State Transition Diagram

State diagram is a
pictorial representation of a
behaviour of a sequential
circuit. Fig. 4.25 shows a
state diagram. The state is
represented by the circle,
and the transition between
sta tes is indicated by
directed lines connecting
the circles. A directed line
connecting a circle with
itself indicates that next
state is same as present
state. The binary number
inside each circle identifies
the state represented by the
Fig. 4.25 State diagram for Mealy circuit
circle. The directed lines
are labelled with two binary numbers separated by a symbol '/'. The input value that
causes the state transition is labelled first and the output value during the present
state is labelled after the symbol '/'.
Copyrighted material

Fundamentals of HDL

4 -42

Structural Description

In case of Moore circuit, the


directed lines are labelled with
only
one
binary
number
representing the state of the
input that causes the state
transition. The output state is
indicated within the circle,
below the present state because
output state depends only on
present state and not on the
input. Fig. 4.26 shows the state
diagram for Moore circuit.

Fig. 4.26 State diagram for Moore circuit


4.4.2.4 State Table

Although the state diagram provides a description of the behaviour of a sequential


circuit that is easy to understand, to proceed with the implementation of the circuit, it
is convenient to translate the information contained in the state diagram into a tabular
form. Table 4.S(a) shows the state table for the state diagram shown in Fig. 4.25. It
represents relationship between input, output and flip-flop states. It consists of three
sections labelled present state, next state, and output. The present state designates the
state of flip-flops before the occurrence of a clock pulse. The next state is state of the
flip-flop after the application of a clock pulse, and the output section gives the values
of the output variables during the present state. Both the next state and output
sections have two columns representing two possible input conditions: X = 0 and X=l.
Present state

Next state

Output

x"' 0

X=1

X=O

X=1

AB

AB

AB

c
a
c

Table 4.5 (a)

In case of Moore circuit the output section has only one column since output does
not depend on input. The Table 4.5 (b) shows the state table for Moore circuit whose
state diagram is shown in Fig. 4.26.
Copyrighted material

Fundamentals of HDL

4-43

Present state

Structural Description

Next state

Output

X=O

x=1

AB

AB

AB

Table 4.5 (b)


4.4.2.5 Transition Table

A transition table takes the state table one step further. The state diagram and
state table represent state using symbols or names. Jn the transition table specific state
variable values are assigned to each state. Assignment of values to state variables is
called State assignment. Like state table transition table also represents relationship
between input, output and flip-flop states. The Fig. 4.27 shows the transition table.
Present state

Next state

Output

X=O

X=1

X=O

x= 1

AB

AB

00

10

11

00

1 0

0 1

00

10

Fig. 4.27 Transition table

Here, AB are the state variables. The AB = 00 represents one state, AB = 01


represents second state and so on.

4.5 Design Equations and Circuit Diagram


From the state assigned transition shown in Fig. 4.27, we can derive the logic
equations for the next state and output functions. But first we have to decide on the
type of flip-flops that will be used in the circuit. The most straightforward choice is to
use D flip-flops, because in this case the values of next state are simply clocked into
the flip-flops to become the new values of present state. For other types of flip-flops,
such as JK, T and RS the relationship between the next-state variable and inputs to a
flip-flop is not as straightforward as D flip-flop. For other types of flip-flops we have
to refer excitation table of flip-flop to find flip-flop inputs. This is illustrated in the
following example.

Copyrighted material

Fundamentals of HDL

4-44

Structural Description

Example 4 .13 : A sequential circuit has one input and one output. The state
diagram is shown in Fig. 4.28. Design the sequential circuit with a) D flip-flops
b) T flip-flops c) RS flip-flops and d) JK- flip-flops.

1/1

Fig. 4.28

The transition table for the state diagram shown in Fig. 4.28 is as given in

Solution :

Table 4.6.
Present state

Next state

Output

X=O

X =1

X= O

x .. 1

AB

AB

00

10

1 1

00

1 0

01

00

10

Table 4.6

As seen from the transition table there are no equivalent states. Therefore, no
reduction is the state diagram. The transition table shows that circuit goes through
four states, therefore we require 2 flip-flops (number of states = 2"', where m =
number of flip-flops). Since two flip-flops are required first is denoted as A and
second is denoted as B.

As mentioned earlier, for D flip-flops next states are nothing but the new present
states. Thus, we can directly use next states to determine the flip-flop input with the
help of K-map simplification.

Copyrighted material

4 .45

Fundamentals of HDL

For flip - flop A

Structural Description

For flip - flop B

For output

00

01

11

1')]

10

l!l

AB

Fig. 4.29
K-map Simplification

DA = A BX + A B X + ABX + A B X

and

D8 = AB X + AB X
Y = ABX + AX
With these flip-flop inpu t functions and circuit output function we can draw the
logic diagram as follows.
i l -- r - ,
ii
>---.

x--....-"'

i i --r--....
B

;c--....-"

QA

A-_,..-,

A
ii

x- -....-"

A--r--,
ii

;c--1...-"'

i l --r--....
B

>--~

;c-....__..,
A-....r--....
ii

x--t...-"

-Os 9
CP

Fig. 4.30 Logic diagram of given sequential circuit using D flip-flop

Copyrighted material

Fundamentals of HDL
...

4-46

Structural Description

Listing 4.22 : HDL description for given sequential circuit.

VHDL for given sequential circu it


library leee;
use ieee.std_loglc_l 164.all;
entity s _circuit Is
port ( CP, X : in std_logic;
QA, QB, OAJ:>ar, OBbar: .b uffer std_logic;

Y : ou t std_logic);
end s _circuit;
architecture circuit_D of s _circuit Is
component and2
port ( 11, 12: in std_logic;
01 : out std_logic);
end component;
component and3
port ( 11, 12, !3 : in std_logic;
01 : out std_logic);
end compone nt ;
component or2
p ort ( 11, 12 : in std_ logic;
0 1 : out std_logic);
end component;
component or4
port ( 11, 12, 13, 14 : in std_logic:
01 : out std_logic);
end component ;
component inv
port ( 11 : in std_logic;
01 : out std_logic);
e nd component;
component D_FF
p ort ( 11, 12 : in std_logic;
0 1, 02 : buffer std_logic);
e n d component;
for all : and2 use entity work.two_input (and2_4);
for all : and3 use entity work.three_input (and2_4);

Copyrighted material

Fundamentals of HDL

4-47

Structural Description

for all: inv use entity work.one_input (inv_4);


for all: or2 use entity work.two_input (or2_4);
for all : or4 use entity work.four_input (or2_4);
for all : D_FF use entity work.D_FF (FF);
signal Xbar, DA, DB std_logic;
signal I: std_logic_vector (6 downto 1);
begin
INl : inv port map (X, Xbar);
Al : and3 port map (QA.bar, QBbar, X, 1(1));
A2 : and3 port map (QA.bar, QB, Xbar, 1(2));
A3 : and3 port map (QA, QB, X, 1(3));
A4 : and3 port map (QA, QBbar, Xbar, 1(4));
AS : and3 port map (QA, QBbar, X, 1(5));
A6 : and2 port map (QA, Xbar, 1(6));
01 : or4 port map (1(1), 1(2), 1(3), 1(4), DA);
02 : or2 port map (1(2), 1(5), DB);
02 : or2 port map (1(1), 1(6), Y);
Dl : D_FF port map (DA, CP, QA, QA.bar);
D2: D_FF port map (DB, CP, QB, QBbar);
end circuit_D;

II>-

Verllog for given sequential circuit


module circuit_D (CP, X, QA, QB, QA.bar, OBbar, Y);
input CP, X,;
output Y;
inout QA, QB, QA.bar, QBbar;
wire Xbar, DA, DB
wire (6:11 I;
not (Xbar, X);
and (1111, QA.bar, QBbar, X);
and (1(2). QAbar, OB, Xhar) ;

and (1(3), QA, QB, X );


and (1141. QA, QBbar, X):>ar);

and (1151, QA, QBbar, X);


and (1161, QA, Xbar);

or (DA, 1111, 1121. 1131. 1(4));


or (DB , 1121. 115));
or (Y, 1111. 1(6));
D_FF FFO (DA, CP, QA, QA.bar);

Copyrighted material

4 -48

Fundamentals of HDL

Structural Description

D_FF FF1 {DB, CP, QB, OBbar);


endmodule

Example 4.14 : Design the sequential circuit in example 4.13 using JK


flip-flop and write a structural description for the designed circuit.

Using the excitation table for JK flip-flop shown in Table 4.7 we can determine the
excitation table for the given circuit as shown in Table 4.8.
Qn

Qn + 1

x
x

Table 4.7 Excitation table for JK flip-flop


Present state

Input

Flip-flop Inputs

Next state

Output

JA

KA

Jo

Ka

x
x

0
0

x
x

x
x
x
x

'l

x
x

x
x

x
x
x
x

Table 4.8

The first row of circuit excitation table shows that there is no change in the state
for both flip-flops. The transition from 0 ~ 0 for JK filp-flop requires inputs J and K
to be 0 and X, respectively. Similarly, we can determine inputs for each flip-flop for
each row in the table by referring present statt:, next state and excitation table. Let us
use K-map simplification to determine the flip-flop input functions and circuit output
functions.

Copyrighted material

4 - 49

Fundamentals of HDL

Structural Descript ion

K-map sim plification


AB ..-............

00

00

01

01

11

11 !~
1.
10

(a) For J,.

(b) For KA

(c) For J 8

(d) For Ke

0
0

(e) For output

Fig. 4.31

Therefore, input function for

J.. = BX+ BX
KA = BX+

fo
KB

BX

AX
A+X

- --

Circuit output function = AX+ A BX

Output (Y)

Fig. 4.32 Logic diagram of given sequential cir cuit using J K flip-flop
....

Listing 4.23 : HDL description for given sequential circuit using - VHDL and Verilog.

VHDL for given sequential circuit


library ieee;
use ieee.std_logic_1164.all;
entity s_circuit is

port ( CP, X: in std_logic;


QA,

OB. OAbar. QBbar: buffer std_logic;

Copyrighted material

4. 50

Fundamentals of HDL

Structural Description

Y : out std_logic);
end s _circuit;
architecture circuit JK of s - circuit is

component and2
port ( I1, 12 : in std_ logic;
01 : out std_logic);
end component;
component and3
port ( 11, 12, 13 : in std_logic;
01 : out std_logic);
end component;
component or2
port ( 11, 12 : In std_logic;
01 : out std_logic);
end component;
component inv
port ( 11 : In std_logic;
01 : out std_logic);
end component;
component JK_FF
port ( 11, 12, 13 : in std_logic;
01, 02 : buffer std_logic);
end component;
for al!: and2 use entity work.two_input (and2_4);
for all : and3 use entity work.three_input (and2_4);
for all : inv use entity work.one input (inv 4);
'
for all: or2 use entity'work.two_input (or2_4);

for all : JK_FF use entity work.JK_FF (FF);


signal Xbar, JA, JB, KB std_logic;
signal l: std_logic_vector (4 downto 1);
begin

1N1 : inv port map (X, Xbar);


A1
A2
A3
A4

: and2
: and2
: and2
: and2

port map
port map
port map
port map

(QB, Xbar, 1(1));


(QBbar, X, 1(2));
(QA, X, JB);
(QA, Xbar, 1(3));

A5 : and3 port map (QAbar, QBbar, X, 1(4));

Copyrighted material

Fundamentals of HDL

Structural Description

4 - 51

01 : or2 port map (1(1), 1(2) JA);


02 : or2 port map (1(3), 1(4), Y);
02 : or2 port map (QA, X, KB);
JK1 : JK_FF port map (JA, JA, CP, QA, QAbar);

JK2 : JK_FF port map (JB, KB, CP, QB, OBbar);


end circuit_JK;

Verilog for given sequential circuit


module circuit_JK (CP, X, QA, OB, QAbar, OBbar, Y);
input CP, X, ;
output Y;
inout QA, OB, QAbar, OBbar;
wire Xbar, JA, JB, KB;
wire (4:1) I;
not (Xbar, X);
and (1(1). QB, Xbar);
and (1(2), OBbar, X);
and (JB , QA, X);
and (1(3), QA, Xbar);
and (1(4), QAbar, OBbar, X);
or (JA, 1(1), 1(21);
or (KB, QA, X);
or (Y, 1(3), 1(41);
JK_FF FFO (JA, JA, CP, QA, OAbar);
JK_FF FF1 (JB, KB, CP, QB, OBbar);
endmodule

,,,_. Example 4.15 : Structural description of 3-bit synchronous binary counter.

Fig. 4.33 (a) shows 3-bit synchronous binary counter and its timing diagram. The
state sequence for this counter is shown in Table 4.9.
HIGH

JO

-c I>

KO

01

J1

.--c >

K1

01

i..r>-

J2

K2

02

.....

CP

Fig. 4.33 (a) A three-bit synchronous binary counter

Copyrighted material

Fundamentals of HDL

4 -52

Structural Description

CP
QO

01 - - - - - '

Fig. 4.33 (b) Timing diagram for 3-bit synchronous binary counter

Table 4.9 State sequence for 3-bit binary counter

Looking at Fig. 4.33 (b), we can see that QO changes on each clock .pulse as we
progress from its original state to its final state and then back to its original state. To
produce this operation, flip-flop 0 is held in the toggle mode by connecting J and K
inputs to HIGH. Now let us see what flip-flop 1 does. Flip-flop 1 toggles, when QO is
1. When QO is a 0, flip-flop 1 is in the no-change mode and remains in its present
state. Looking at the Table 4.9 we can notice that flip-flop 2 has to change its state
only when Q l and QO both are at logic 1. This condition is detected by AND gate
and applied to the J and K inputs of flip-flop 2. Whenever both QO and QI are HIGH,
the outpu.t of the AND gate makes the J and K inputs of flip-flop 2 HIGH, and
flip-flop 2 toggles on the following clock pulse. At all other times, the J and K inputs
of flip-flop 2 are held LOW by the AND gate output, and flip-flop does not change
state.
....

Listing 4.24 : HDL description for 3-bit synchronous binary counter.

VHDL for 3-Blt Synchronous Binary Counter


library ieee;
use ie ee .std_logic_ 1164.all;

entity counter is
port ( CP : in std_logic;

Copyrighted material

Fundamentals of HDL

4. 53

Structural Description

0, Obar: buffer std_logic_vector(2 downto 0));


end counter;

architecture cnt 3Bit of counter is


component and2
port ( 11, 12: in std_logic;

01 : out std_logic);
end component ;
compon ent JK_FF
port ( 11, 12, 13 : in std_logic;

01, 02 : buffer std_logic);


end component;
for all : and2 use entity work.two_inp ut (and2_4);
for all : JK_FF use entity work.JK_FF (FF);

signal J2 std_logic;
begin

Al : and2 port map (0(0), 0(1), J2);


JK1 : JK_FF port map ('l', '1', CP, 0(0), Obar(O));
JK2: JK_FF port map (0(0), 0(0), CP, 0(1), Qbar(l));
JK3 : JK_FF port map (J2, J2, CP, 0(2), Obar(2));
end cnt_3Bit;

Verilog for 3-bit Synchronous Binary Counter

module circuit_JK (CP, 0 , Obar);


input CP;
in out 12:0) 0, Obar;
wire J2;
and (JC, O[OJ, 011[);

JK_FF FFO (l'bl, l'bl, CP, 0(01. ObarlOJ);


JK_FF FFl (0101. 0101. CP, 0(11, ObarllJ);
JK_FF FF2 (J2, J2 , CP, 0(21. Qbarl2J);
endmodule

4.6 Generate (HDL), Generic (VHDL), and Parameter (Verilog)


We can consider a circuit consisting of subcircuits. [n some cases, these subcircuits
are repetitive. For example, an n-bit "ripple adder" consists of n "full adders''. A
generate statement in VHDL and parameter in Verilog are used to create repetitive
s tructures for such repetitive subcircuits. This concept is similar to use a FOR loop.
Copyrighted material

\
Fundamentals of HDL

4-54

Structural Description

When generate statement is used, it is not necessary to write out all of the component
instantiations individually. In VHDL, the syntax of a simple iterative generate loop is
given below.

The identifier is a variable with type compatible with the range. This identifier
may be used within the concurrent statement given within a FOR loop. The
concurrent statement is executed for each possible value of the identifier within the
range. For example, consider a circuit consisting of 8 AND gates. A generate statement
can be used to create repetitive (8) structures of AND gate as shown below.
library ieee;
use ieee.std_logic_ 1164.all;
entity and8 is
port (A, B : in std_!ogic_vector (1 to 8);
0: out std_logic_vector (1 to 8));
end and8;
architecture and8_arch of and8 is
component and
port ( X, Y: in std_logic;
Z : out std_logic);

end c omponent;
begin

G1 : for c in 1 to 8 generate

U1 : and port map (A(c), B(c), O(c));

end generate ;
end and8_arch;

An equivalent generate statement in Verilog is :


generate
genvar c;
for (c = 1; c < = 8; c =c + 1)
begin : g8
// g8 is a Label for predefined word begin and it is must
and (O[c], A[cl, B[c]);
end
endg enerate

We declare the parameters (For example : Bus width) as constants within a VHDL
program. The value of a constant must be known when a VHDL program is compiled.
But in many applications it is useful to design and ~ompile a VHDL program without

Copynqhted material

Fundamentals of HDL

4- 55

Structural Description

specifying the values of some parameters. VHDL provides this facility with generic
statement and Verilog provides this facility with parameter statement.
Generic and Parameter Declaration

The constants whose values are not specified within a VHDL program are called
generic constants. These are defined in an entity declaration with a generic declaration
before the port declaration. The syntax of generic declaration is given below.
entity entity_ name is
generic ( constant_names

: constant_type;

constant name

: constant_type;

constant name

: constant type);

port

signal_name

: mod e signal_type;

signal_names

: mode signal_ type;

signal_names

: mode signal_type);

end entity_name;

For example, consider an arbitrary_width bus inverter. The bus_width for this bus
inverter is user_specifiable. The VHDL program for this bus inverter is given below.
library ieee;
use leee.std_logic_1164.all;
entity businv is
generic (width: integer: = 8);
port (

A: In std_logic_vector(width-1 downto 0);


B : out std_logic_vector (width-1 downto 0));

end businv;
architecture businv arch of busin v Is
component inv port (

I: In std_logic)

0 : out std_logic);
end component;
begin
gl:

for w In width-1 downto 0 generate

u1:

in v port map (A(w), B(w));


end generate;

end businv_arch;

Multiple (in our example, 8) copies of this inverter can be instantiated in the
program by taking different user-specified widths.

Copyrighted material

Fundamentals of HDL

4- 56

Structural Description

An equivalent generate statement in Verilog is :


module businv (A, B)
parameter c = 8;
in p ut (c:1J A;
ouput (c:ll B;
generate
genvar i;
for (i = 1; i < = c; i = i + 1)
begin : gc
11 gc is a label for predefined word begin and it is must
inv (B(i), A(il);

end
endgenerate

Example 4.16 : Structural description of (N + 1) - Bit magnitude comparator


using Generate statement.
We have seen the structural description of 3-bit comparator in listing 4.20. Here,
we will see the description of (N + 1) - bit comparator using generate statement.
Listing 4.25 : HDL description of N-bit magnitude comparator using generate statement.
VHDL N-Bit Magnitude Comparator Using Generate Statement

library ieee;
use leee.std_logic_1164.all;
entity comp_gen is
generic (N : integer: = 3);
port (A, B: in std_Jogic_vector (N downto 0);
AgtB, AltB. AeqB: buffer std_logic);
end comp_gen;
architecture compare of comp_gen is
component full_adder
port (11, 12, 13 : in std_logic; 01, 02 : out std_logic);
end component;
com pone nt inv
port (11 : in std_logic; 01 : out std_logic);
end component;
component nor2
port (11, 12 : in std_logic; 01 : out std_Jogic);

Copyrighted material.

Fundamentals of HDL

4. 57

Structural Description

end component;
component and2
port (11, 12: in std_logic; 01 : out std_logic);
end component;
signal Sum, Bbar: std_logic_vector (N downto 0);
signal C, eq: std_logic_vector (N

+ 1downto0);

for all : full_adder use entity work.bind32 (full_add);


for all : inv use entity work.bindl (inv_O);
for all: nor2 use entity work.bind2 (nor2_7);
for all: and2 use entity work.bind2 (and2_7);
begin

C(O) < = 'O';


eq(O) < = '1';
Gl : for i in 0 to N generate
vl : inv port map (B(i), Bbar(i));
FA : full_adder port map (A(i), Bbar (i), C(i), Sum(i), C(i + l));
Al : and2 port map (eq(i), Sum(i), eq(i+l));
end generate Gl;
AgtB < = C(N +l);
AeqB <= eq(N+l);
nl : nor2 port map (AeqB, AgtB, AltB);
end compare;

Verilog N-Bit Magnitude Comparator Using Generate Statement


module comp_gen (A, B, AgtB, AltB, AeqB);
p arameter N

= 3;

input (N:OJ A, B;
output AgtB, AltB, AeqB;
wire (N:O( Sum, Bbar;
wire (N+ l : 0( C, eq;

assign C(OI
assign eq(OI

= l'bO;
= l 'b l;

generate
genvar i;
for (i = O; i <

= N; i = i +

1)

begin : u

not (Bbar(i), B(i));

Copyrighted material

4 . 58

Fundamentals of HDL

Structural Description

full_adder FA (A(il, Bbar(i], C(il, Sum(i), C(i + l));

and (eq(i+l], Sum(i], eq(i));


end
endgenerate
assign AgtB = C(N+l];
& sign AeqB = eq(N+ l);

nor (AltB, AeqB, AgtB);


endmodule
,,_. Example 4.17 : Structural description of an N-bit Asynchronous Down
counter using generate.

The Fig. 4.5 shows the 4-bit asynchronous down counter using JK flip-flops. Here,
the clock signal is connected to the clock input of only first flip-flop. This connection
is same as asynchronous/ripple up counter. However, the clock input of the
remaining flip-flop is triggered by the Q output of the previous stage.

High --.-- - -- --.-- - - - --..-- - - - --........... --...,


QN

00

01

02

03

QN

Fig. 4.34 Logic diagram of asynchronous n-bit counter

IJI.

Listing 4.26 : HDL description of an N-bit asynchronous down counter using generate
statement.

VHDL NBit Asynchronous Down Counter Using Generate Description


library leee;

uae ieee.std_logic_1164.all;
entity asyn_ctr is
g eneric (N : integer: = 4);
-- This is a 4-bit counter.
port ( CP : in std_logic;
Q, Obar : buffer std_logic_vector (N-1 downto 0));
end asyn_ctr;
archi tecture asyn_ctr_gen of asyn_ctr is

Copyrighted material

Fundamentals of HDL

4 -59

Structural Description

component JK_FF is
port( 11, 12, 13 : in std_logic;
01, 02 : buffer std_logic):
end component ;
for all : JK_FF use entity work.JKFF' (F'F);
signals : std_logic_vector (N downto 0);
begin

s < = (Q & CP);


-- sis the concatenation of Q and CP. Th.i s concatenation is necessary to
-- specify the clock of each JK flip-flop in generic statement.
Gnlop : for i in (N-1) downto 0 generate
Gt : JK_FF port map ('1', '1 ', s(i), O(i), Obar(i));

end generate GnLop;


end asyn_ctr_gen;

Verilog N-Bit Asynchronous Down Counter Using Generate Description

module asyn_ctr (CP, Q, Obar);


parameter N

= 4;

II This is a 4-bit counter.

input CP;
output [N-1:0[ 0, Obar;
wire [N:O) s;

assigns = {O. CP};


/* sis the concatenation of Q and CP. This concatenation is necessary to
specify the clock of each JK flip-tlop in generic statement. I
generate
genvar i;
for (i = O; i < N; i = i + 1)
begin: u
JK_FF FF (1'b1, 1'b1, s[il. Q[i), Obar[iJ);
endgenerate
endmoduie
u

Example 4.18 : Structural description of an N-bit memory word using


Generate.
We have seen the listing of single memory cell in example 4.12. This single

memory cell can be expanded to N-bit using the generate statement. This is illustrated
in listing 4.27.
Copyrighted material

4. 60

Fundamentals of HDL
..,_

Structural Description

Listing 4.27 : HDL description of N-bit memory word using generate

VHDL N-Bit Memory Word Using Generate


library ieee;
use ieee.std_logic_1164.all;
entity memory_word is
generic (N : integer:= B);
port ( D_in: in std_logic_vector (N downto O);
Se!, R_W : in std_logic;
D_out : out std_logic_vector (N downto 0));
end memory_word;
architecture word_gen of memory_word is
component memory_cell
port (Se!, RW, Din: in std_logic;
01 : buffer std_logic );
end component;
for all: memory_cell use entity work.memory (mem_cell);
begin
G 1 : for i In 0 to N generate
M: memory_cell port map (sel, R_W, D_in(i), D_out(i));
end generate;

end word_gen;
Verilog N-Bit Memory Word Using Generate
module memory_word {D_in. sel, R_W, D_out);
parameter N = B;
input (N:O) D_in;
input sel, R_W;
output [N:O) D_out;

$1

generate
genvar i;
for (i = 0; i < = N; i
begin: u

= i + 1)

memory Ml {sel, R_W, D_in [ii. D_outfil);


end
endgenerate
endmodule

Copyrighted material

Fundamentals of HDL

Structural Description

4 - 61

n' * Example 4.19 : Structural description of N-bit register.


The group of flip-flops can be used to store a word, such a group is called
register. The Fig. 4.35 shows the N-bit register constructed with D flip-flops. This
register is called buffer register. Each D flip-flop is triggered with a common clock
pulse.

Fig. 4.35 N-bit register


~

Listing 4.28 : HDL description of N-bit register using - VHDL and Verilog.

VHDL Description of N-bit register


library ieee;
use ieee.std_logic_1164.all;
entity Regis is
g eneric (N : integer : = 8);

-- 8-b it register

port( D: in std_logic_vector(N- 1 downto 0);


CP : in std_logic;
Q,

Obar: out std_logic_vector(N-1down.to0));

end Regis;
architecture register_nBit of Reg is is
component D_FF is
port( 11, 12 : in std_ logic;
01, 02 : buffer std_logic):
end component ;
begin
build: for i in 0 to N- 1 generate
for all : D_FF use entity work.OFF (FF );
begin
d : D_FF port map(D(i),CP , Q(i), Qbar(i));
end g enerate b uild;
end register_nBit ;

Copyrighted material

Fundamentals of HDL

4 - 62

Structural Description

Verilog Description of N-bit register


m odule Regis (D, CP, Q, Obar)
parameter N = 8;
input CP;
input (N-1 : OJ D;
output (N- 1: OJ Q, Obar;
generate
genvar i;
for (i = O; i < N; i = i + 1)
begin : u
D_FF FF (D(i), CP, Q(iJ, Obar(i));
end
endgenerate
end.module
111

Example 4.20 : Structural description of N-bit shift register.

The binary information (data) in a register can be moved from stage to stage
within the register or into or out of the register upon application of clock pulses. This
type of bit movement or shifting is essential for certain arithmetic and logic operations
used in microprocessors. This gives rise to a group of registers called 'shift registers'.
They are very important in applications involving the storage and transfer of data in a
digital system.
The Fig. 4.36 shows the N-bit left shift register. Here, the data is shifted left by
one bit on receiving every clock pulse. Din is a serial input signal and Dout is a data
output signal.
Din

'--~~~~~-+~~~~~~+-~~~~~-<-~cP

Fig. 4.36 N-bit left s hift regi ster


Listing 4.29 : HDL description of N-bit left shift register

VHDL Description of N-bit Left Shift Register


library ieee;
use ieee.std_logic_1164.all;
entity Regis_Ls is
generic (N : integer:= 8);

-- 8-bit regist er

Copyrighted material

Fundamentals of HDL

4. 63

Structural Description

port( Din: in std_logic;


CP : in std_logic;
Dout : out std_logic;
Q, Obar: out std_logic_vector(N-1 downto 0));
end Regis_Ls ;
architecture register_nBit of Regis_Ls is
component D_FF is
port( 11, 12 : in std_logic;
01, 02: buffer std_logic);

end component ;
begin
build: for i in 0 to N-1 generate
for all : D_FF use entity work.OFF (FF);
signal D : std_logic_vector (N downto O);
begin
D < = (Q & Din);
d: D_FF port map(D(i), CP , Q(i), Obar(i));
end generate build;
Dout < = D(N);
end register_nBit;

Verilog Description of N-bit Left Shift Register


module Regis (Din, CP , Dout, Q, Obar)
parameter N = 8;
Input Din, CP;
output Dout;
output (N-1 : OJ 0 , Obar;
wire (N:O] D;
assign D

= {Q, Din};

generate
genvar i;
for (i = O; i < N; i = i + 1)
begin : u
D_FF FF (D(i]. CP, Q(i], Obar(i]);
end
endgenerate
assign Dout = D(N];
endmodule
Copyrighted material

Fundamentals of HDL

4- 64

Structural Description

Review Questions
1. List the lriglrliglrts of stmcl11ral dt'Scription.
2. Explain tire organization of tire structural description witlr tire help of exarrrple.
3. Lists tile built-in gates supported by Verilog.

4. Wlmt is binding ?
5. Explain the bi11di11g betwee11 e11tity a11d architecture in VHDL.
6. Explain tire binding betwce11 entity a11d co111po11e11t in VHDL.
7. Explain tire binding between a libran; and 111od11le in VHDL.

8. Explain the binding between a library and compo11ent in VHDL.


9. Explain the binding between two modules i11 Verilog.

JO. Write a structural descri11tio11 of 3 : 8 decoder witlr actit1e lrigh enable input.
11. Write a structural description of T flip-fl.op.

12. Design a sequential circuit of three-bit et1e11 counter and write a str11ct11ral descriptio11 for it.
13. Write a structural descriptio11 for a 4-bit synclrrono11s binary co1111ter.
14. Write a str11ct11ral description for right shift register.

ODO

Copyrighted material

Das könnte Ihnen auch gefallen