Designing Digital Systems
With
SystemVerilog
Dr. Brent E. Nelson
Department of Electrical and Computer Engineering
Brigham Young University
Provo, UT, 84602
brentnelson@ieee.org
April 2018
Version 1.0
2
Copyright c 2003-2018 Brent E. Nelson
All rights reserved.
Contents
1
Introduction to Digital Systems Design
1.1 Digital vs. Analog . . . . . . . . . . . . . . .
1.2 Positional Number Systems . . . . . . . . . .
1.3 Digital vs. Analog Continued . . . . . . . . .
1.3.1 Analog vs. Digital Data Storage . . .
1.3.2 Analog vs. Digital Data Processing .
1.3.3 Analog vs. Digital - A Summary . . .
1.4 Combinational vs. Sequential Digital Circuits
1.5 Chapter Summary . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
14
16
16
17
17
18
19
19
20
21
22
22
23
23
24
25
27
27
27
28
28
28
29
29
30
30
31
32
32
32
34
35
37
37
38
39
40
2
Number Systems and Binary Encodings
2.1 Positional Number Notation . . . . . . . . . . .
2.1.1 Conversion from Decimal to Other Bases
2.2 Hexadecimal (Base-16) Numbers . . . . . . . . .
2.3 Binary-Coded Decimal . . . . . . . . . . . . . .
2.4 Other Codes . . . . . . . . . . . . . . . . . . . .
2.4.1 ASCII Codes . . . . . . . . . . . . . . .
2.4.2 Gray Codes . . . . . . . . . . . . . . . .
2.5 Chapter Summary . . . . . . . . . . . . . . . . .
2.6 Exercises . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
Signed Number Representations, Negation, and Arithmetic
3.1 Addition of Unsigned Numbers . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Overflow in Unsigned Addition . . . . . . . . . . . . . . . . .
3.2 Signed Numbers: Sign-Magnitude . . . . . . . . . . . . . . . . . . . .
3.2.1 Negating Sign-Magnitude Numbers . . . . . . . . . . . . . . .
3.3 Signed Numbers: 2’s Complement . . . . . . . . . . . . . . . . . . . .
3.3.1 Sign-Extension . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3.2 Negating a 2’s Complement Number . . . . . . . . . . . . . . .
3.3.3 Adding 2’s Complement Numbers . . . . . . . . . . . . . . . .
3.3.4 Subtracting 2’s Complement Numbers . . . . . . . . . . . . . .
3.4 Signed Numbers: 1’s Complement . . . . . . . . . . . . . . . . . . . .
3.5 Summary — Number representations . . . . . . . . . . . . . . . . . .
3.6 More on Overflow and Underflow . . . . . . . . . . . . . . . . . . . .
3.6.1 Detecting and Handling Overflow and Underflow - Some Ideas .
3.7 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Boolean Algebra and Truth Tables
4.1 Introduction to Boolean Algebra and Truth Tables
4.2 Truth Tables for Arbitrary Functions . . . . . . .
4.3 Converting Truth Tables to Boolean Equations . .
4.4 Converting Boolean Functions to Truth Tables . .
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
CONTENTS
4.5
Boolean Identities and Theorems . . . . . . . . . . . . . . . .
4.5.1 Single-Variable Theorems . . . . . . . . . . . . . . .
4.5.2 Two-Variable Theorems . . . . . . . . . . . . . . . .
4.5.3 Commutative, Associative, and Distributive Theorems
4.5.4 The Simplification Theorems . . . . . . . . . . . . . .
4.5.5 The Consensus Theorems . . . . . . . . . . . . . . .
Summary of the Boolean Theorems . . . . . . . . . . . . . .
Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . .
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
41
41
42
42
43
43
44
45
46
47
47
48
49
49
49
50
50
51
51
52
54
55
55
55
56
57
58
61
61
61
64
66
66
67
68
69
70
71
72
73
73
75
76
77
78
79
4.6
4.7
4.8
5 Gates
5.1 Basic Gate Types . . . . . . . . . . . . . .
5.2 Transistors - The Building Blocks of Gates .
5.2.1 Building An Inverter Using FET’s .
5.3 Other 2-Input Gates . . . . . . . . . . . . .
5.3.1 NAND Gates . . . . . . . . . . . .
5.3.2 NOR Gates . . . . . . . . . . . . .
5.3.3 An Exclusive-OR Gate . . . . . . .
5.3.4 An Equivalence Gate . . . . . . . .
5.4 Multi-Input Gates . . . . . . . . . . . . . .
5.5 Alternative Gate Symbology . . . . . . . .
5.6 Multi-Level Logic . . . . . . . . . . . . . .
5.6.1 Speed of Operation . . . . . . . . .
5.6.2 Circuit Area . . . . . . . . . . . . .
5.6.3 Speed and Area Comparisons . . .
5.6.4 Factoring and Multiplying Out . . .
5.7 Chapter Summary . . . . . . . . . . . . . .
5.8 Exercises . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Boolean Algebra - Part II
6.1 Inverting a Function - DeMorgan’s Rules . . . . . . . . . . . . .
6.2 Sum-of-Products and Product-of-Sums Forms . . . . . . . . . .
6.3 Canonical Forms - Minterm Expansion and Maxterm Expansion
6.4 Boolean Minimization . . . . . . . . . . . . . . . . . . . . . .
6.4.1 What is a Minimal Form for an Expression? . . . . . . .
6.4.2 Minimization By Applying Boolean Theorems . . . . .
6.4.3 Proving Equalities Using Boolean Theorems . . . . . .
6.5 Incompletely Specified Functions and Boolean Minimization . .
6.6 Summary of Boolean Minimization . . . . . . . . . . . . . . .
6.7 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . .
6.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 Gates - Part II
7.1 NAND-NAND and NOR-NOR Logic . . . . . . .
7.2 Functionally Complete Logic Sets . . . . . . . . .
7.3 Gate Symbology — Matching Bubbles . . . . . . .
7.3.1 Bubble Matching and Reconvergent Fanout
7.4 Chapter Summary . . . . . . . . . . . . . . . . . .
7.5 Exercises . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
CONTENTS
8
An Introduction to Gate-Level Design Using SystemVerilog
8.1 Three Important Rules Regarding Designing using an HDL For Digital Systems Design
8.2 Levels of Design Abstraction in SystemVerilog . . . . . . . . . . . . . . . . . . . . .
8.3 Basic Structural SystemVerilog Design . . . . . . . . . . . . . . . . . . . . . . . . . .
8.3.1 Structural Gate Instantiations are Concurrent Statements . . . . . . . . . . . .
8.4 Declaring Wires in SystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5 CAD Tool Design Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.6 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gate-Level Arithmetic
9.1 A Hardware Adder . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 An Adder/Subtracter Module . . . . . . . . . . . . . . . . . . . . . . .
9.3 Adding and Subtracting 1’s Complement and Sign-Magnitude Numbers
9.4 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
81
82
82
83
84
85
86
87
88
89
89
90
91
92
92
93
93
93
95
96
97
99
100
102
104
105
107
108
109
109
110
110
111
111
113
113
116
117
118
119
121
122
122
123
126
127
128
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10 Higher Level Building Blocks: Multiplexers, Decoders, and Lookup Tables
10.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2 Multiplexers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.2.1 A 4:1 Multiplexer . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3 Multi-Bit Wires in Schematics . . . . . . . . . . . . . . . . . . . . . . .
10.4 Using Multiplexers for Logic . . . . . . . . . . . . . . . . . . . . . . . .
10.5 Decoders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6 When to Use Multiplexers and Decoders . . . . . . . . . . . . . . . . . .
10.7 Read-Only Memories (Lookup Tables) . . . . . . . . . . . . . . . . . . .
10.8 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11 Continuing on With SystemVerilog - Hierarchical Design, Constants, and Multi-Bit Signals
11.1 Creating Hierarchy Via Structural Instantiation . . . . . . . . . . . . . . . . . . . . . . .
11.1.1 Semantics of Module Instantiation . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2 Specifying Constants in SystemVerilog . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3 Accessing Bits of Multi-Bit Wires in SystemVerilog . . . . . . . . . . . . . . . . . . . . .
11.4 More on Naming - Modules, Instance Names, and Wires . . . . . . . . . . . . . . . . . .
11.5 Hierarchical Design Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.6 Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12 Karnaugh Maps
12.1 Truth Tables to KMaps . . . . . . . . . . . . . . . . .
12.2 Three-Variable KMaps . . . . . . . . . . . . . . . . .
12.3 Minterm and Maxterm Expansions and KMaps . . . .
12.3.1 Circling More Than Two 1’s . . . . . . . . . .
12.4 Four-Variable KMaps . . . . . . . . . . . . . . . . . .
12.5 Plotting a Boolean Equation on a KMap . . . . . . . .
12.6 Deriving Product of Sum Expressions from KMaps . .
12.7 Solving a KMap With Don’t Cares . . . . . . . . . . .
12.8 Finding Optimal Solutions Using KMaps . . . . . . .
12.9 A Worked Example — A BCD to 7-Segment Converter
12.10Chapter Summary . . . . . . . . . . . . . . . . . . . .
12.11Exercises . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
评论