Назар аударыңыз. Бұл материалды сайт қолданушысы жариялаған. Егер материал сіздің авторлық құқығыңызды бұзса, осында жазыңыз. Біз ең жылдам уақытта материалды сайттан өшіреміз
Жақын арада сайт әкімшілігі сізбен хабарласады
Бонусты жинап картаңызға (kaspi Gold, Halyk bank) шығарып аласыз
Arduino бойынша нұсқаулық
Дипломдар мен сертификаттарды алып үлгеріңіз!
Материалдың толық нұсқасын
жүктеп алып көруге болады
FPGA PROTOTYPING
BY VERILOG EXAMPLES
Xilinx SpartanTM-3 Version
Pong P. Chu
Cleveland State University
WILEY
A JOHN WILEY & SONS, INC., PUBLICATION
This Page Intentionally Left Blank
FPGA PROTOTYPING
BY VERILOG EXAMPLES
This Page Intentionally Left Blank
FPGA PROTOTYPING
BY VERILOG EXAMPLES
Xilinx SpartanTM-3 Version
Pong P. Chu
Cleveland State University
WILEY
A JOHN WILEY & SONS, INC., PUBLICATION
Copyright O 2008 by John Wiley & Sons, Inc. All rights reserved.
Published by John Wiley & Sons, Inc., Hoboken, New Jersey.
Published
simultaneously in Canada.
No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by
any means, electronic, mechanical, photocopying, recording, scanning, or otherwise, except as permitted under
Section 107 or
108 of the 1976 United States Copyright Act, without either the prior written permission of the
Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center,
Inc., 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 750-4470, or on the web at
www.copyright.com. Requests to the Publisher for permission should be addressed to the Permissions
Department, John Wiley & Sons, Inc., 1 l 1 River Sheet, Hoboken, NJ 07030, (201) 748-601 1, fax (201) 748-
6008, or online at http:1lwww.wiley.co1n/golpermission.
Limit of LiabilitylDisclaimer of Warranty: While the publisher and author have used their best efforts in
preparing this book, they make no representations or warranties with respect to the accuracy or completeness of
the contents of this book and specifically disclaim any implied warranties of merchantability or fitness for a
particular purpose. No warranty may be created or extended by sales representatives or written sales materials.
The advice and strategies contained herein may not be suitable for your situation. You should consult with a
professional where appropriate. Neither the publisher nor author shall be liable for any loss of profit or any
other commercial damages, including but not limited to special, incidental, consequential, or other damages.
For general information on our other products and services or for technical support, please contact our
Customer Care Department within the United States at (800) 762-2974, outside the United States at (3 17) 572-
3993 or fax (3 17) 572-4002.
Wiley also publishes its books in a variety of electronic formats. Some content that appears in print may not be
available in electronic format. For information about Wiley products, visit our web site at www.wiley.com.
Library of Congress Cataloging-in-Publication Data:
Chu, Pong P., 1959-
FPGA prototyping by Verilog examples 1 Pong P. Chu.
p. cm.
Includes
index.
ISBN 978-0-470-18532-2 (cloth)
1. Field programmable gate arrays-Design and construction. 2. Prototypes,
Engineering.
3.Verilog (Computer hardware description language)
I. Title.
TK7895.G36C484 2008
621.39'54~22 2008003732
Printed in the
United States of America.
In memory of my fathel; Chia Chi Chu
This Page Intentionally Left Blank
CONTENTS
Preface
Acknowledgments
PART I BASIC DIGITAL CIRCUITS
1 Gate-level combinational circuit
1.1 Introduction
1.2 General description
1.3 Basic lexical elements and data types
1.3.1 Lexical elements
1.4.1 Four-value system
1.4.2 Data type groups
1.4.3 Number representation
1.4.4 Operators
1.5 Program skeleton
1.5.1 Port declaration
1 S.2 Program body
1.5.3 Signal declaration
1.5.4 Another example
1.4 Data types
1.6 Structural description
1.7 Testbench
xxi
xxvii
1
1
2
3
3
4
4
4
5
5
5
6
7
7
8
9
12
vii
viii CONTENTS
1.8 Bibliographic notes
1.9 Suggested experiments
1.9.1
1.9.2
Code for gate-level greater-than circuit
Code for gate-level binary decoder
2 Overview of FPGA and EDA software
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9 Introduction
FPGA
2.2.1
2.2.2
Overview of the Digilent S3 board
Development flow
Overview of the Xilinx
ISE project navigator
Short tutorial on
ISE project navigator
2.6.1
2.6.2
2.6.3
2.6.4
Short tutorial on the ModelSim HDL simulator
Bibliographic notes
Suggested experiments
2.9.1 Gate-level greater-than circuit
2.9.2 Gate-level binary decoder
Overview
of a general FPGA device
Overview
of the Xilinx Spartan3 devices
Create the design project and
HDL codes
Create a testbench and perform the RTL simulation
Add a constraint file and synthesize and implement the code
Generate and download the configuration file to an FPGA device
3 RT-level corn bi nat iona I circuit
3.1 Introduction
3.2 Operators
3.2.1 Arithmetic operators
3.2.2 Shifi operators
3.2.3 Relational and equality operators
3.2.4 Bitwise, reduction, and logical operators
3.2.5 Concatenation and replication operators
3.2.6 Conditional operators
3.2.7 Operator precedence
3.2.8 Expression bit-length adjustment
3.2.9
Always block for a combinational circuit
3.3.1 Basic syntax and behavior
3.3.2 Procedural assignment
3.3.3 Variable data types
3.3.4 Simple examples
Synthesis
of z and x values
3.3
14
14
14
14
15
15
15
15
17
17
19
21
24
25
26
26
29
31
35
36
36
36
39
39
39
41
41
42
42
43
44
44
45
46
48
48
49
49
49
CONTENTS ix
3.4 If statement
3.4.1 Syntax
3.4.2 Examples
3.5 Case statement
3.5.1 Syntax
3.5.2 Examples
3.5.3
3.5.4
Routing structure of conditional control constructs
3.6.1 Priority routing network
3.6.2 Multiplexing network
General coding guidelines for an always block
3.7.1
3.7.2 Guidelines
3.8 Parameter and constant
3.8.1 Constant
3.8.2 Parameter
3.8.3
The casez and casex statements
The full case and parallel case
3.6
3.7
Common errors in combinational circuit codes
Use of parameters
in Verilog-I995
Hexadecimal digit to seven-segment LED decoder
3.9 Design examples
3.9.1
3.9.2 Sign-magnitude adder
3.9.3 Barrel shifter
3.9.4 Simplified floating-point adder
3.10 Bibliographic notes
3.1
1 Suggested experiments
3.11.1 Multifunction barrel shifter
3.1
1.2 Dual-priority encoder
3.1 1.3 BCD incrementor
3.1 1.4 Floating-point greater-than circuit
3.1 1.5 Floating-point and signed integer conversion circuit
3.1
1.6 Enhanced floating-point adder
4 Regular Sequential Circuit
4.1 Introduction
4.1.1 D FF and register
4.1.2 Synchronous system
4.1.3 Code development
HDL code of the FF and register
4.2.1 D FF
4.2.2 Register
4.2.3 Register file
4.2.4
4.2
Storage components in a Spartan-3 device~Y"li""
'pecific
51
51
52
54
54
54
56
56
57
57
59
60
60
63
64
64
65
67
67
67
71
73
75
80
80
80
80
81
81
81
81
83
83
83
84
85
86
86
89
90
91
X CONTENTS
4.3
4.4
4.5
4.6
4.7
Simple design examples
4.3.1 Shift register
4.3.2 Binary counter and variant
Testbench for sequential circuits
Case study
4.5.1 LED time-multiplexing circuit
4.5.2 Stopwatch
4.5.3
FIFO buffer
Bibliographic notes
Suggested experiments
4.7.1 Programmable square-wave generator
4.7.2 PWM and LED dimmer
4.7.3 Rotating square circuit
4.7.4 Heartbeat circuit
4.7.5 Rotating LED banner circuit
4.7.6 Enhanced stopwatch
4.7.7 Stack
5 FSM
5.1 Introduction
5.1.1 Mealy and Moore outputs
5.1.2 FSM representation
5.2 FSM code development
5.3 Design examples
5.3.1 Rising-edge detector
5.3.2 Debouncing circuit
5.3.3 Testing circuit
5.4 Bibliographic notes
5.5 Suggested experiments
5.5.1 Dual-edge detector
5.5.2 Alternative debouncing circuit
5.5.3 Parking lot occupancy counter
6 FSMD
6.1 Introduction
6.1.1 Single RT operation
6.1.2 ASMDchart
6.1.3
Code development
of an FSMD
6.2.1
6.2.2
Decision box with a register
Debouncing circuit based on RT methodology
Code with explicit data path components
6.2
91
91
93
96
99
99
107
110
115
115
115
115
116
116
116
116
117
119
119
119
120
122
125
125
130
133
135
135
135
135
136
139
139
139
140
141
143
144
146
CONTENTS xi
6.2.3
6.2.4
Comparison
6.2.5 Testing circuit
6.3.1 Fibonacci number circuit
6.3.2 Division circuit
6.3.3 Binary-to-BCD conversion circuit
6.3.4 Period counter
6.3.5 Accurate low-frequency counter
Code with implicit data path components
6.3 Design examples
6.4 Bibliographic notes
6.5 Suggested experiments
6.5.1 Alternative debouncing circuit
6.5.2 BCD-to-binary conversion circuit
6.5.3
6.5.4
6.5.5
Auto-scaled low-frequency counter
6.5.6 Reaction timer
6.5.7
Fibonacci circuit with BCD I/O: design approach I
Fibonacci circuit with BCD I/O: design approach 2
Babbage difference engine emulation circuit
7 Selected Topics of Verilog
7.1 Blocking versus nonblocking assignment
7.1.1 Overview
7.1.2 Combinational circuit
7.1.3 Memory element
7.1.4 Sequential circuit with mixed blocking and nonblocking
assignments
7.2 Alternative coding style for sequential circuit
7.2.1 Binary counter
7.2.2 FSM
7.2.3 FSMD
7.2.4 Summary
Use of the signed data type
7.3.1 Overview
7.3.2 Signed number in Verilog-I995
7.3.3 Signed number in Verilog-2001
Use of function in synthesis
7.4.1 Overview
7.4.2 Examples
Additional constructs for testbench development
7.5.1
7.5.2
Procedural statements
7.5.3 Timing control
7.3
7.4
7.5
Always block and initial block
148
i50
152
153
153
157
160
164
167
170
170
170
171
171
171
172
172
173
175
175
175
177
179
180
182
182
185
186
188
188
188
189
190
191
191
192
193
194
194
196
Xii CONTENTS
7.5.4 Delay control
7.5.5 Event control
7.5.6 Wait statement
7.5.7 Timescale directive
7.5.8 System functions and tasks
7.5.9 User-defined functions and tasks
7.5.10 Example of a comprehensive testbench
7.6 Bibliographic notes
7.7 Suggested experiments
7.7.1
7.7.2
7.7.3
7.7.4
7.7.5
Dual-mode comparator
7.7.6 Enhanced binary counter monitor
7.7.7 Testbench for FIFO buffer
Shift register with blocking and nonblocking assignments
Alternative coding style for BCD counter
Alternative coding style
for FIFO buffer
Alternative coding style for Fibonacci circuit
PART II 110MODULES
8 UART
8.1
8.2
8.3
8.4
8.5
8.6
8.7 Introduction
UART receiving subsystem
8.2.1 Oversampling procedure
8.2.2 Baud rate generator
8.2.3 UART receiver
8.2.4 Interface circuit
UART transmitting subsystem
Overall UART system
8.4.1 Complete UART core
8.4.2 UART verification configuration
Customizing a UART
Bibliographic notes
Suggested experiments
8.7.1 Full-featured UART
8.7.2
8.7.3
8.7.4
UART-controlled stopwatch
8.7.5 UART-controlled rotating LED banner
UART with an automatic baud rate detection circuit
UART with an automatic baud rate and parity detection circuit
9 PS2 Keyboard
9.1 Introduction
9.2 PS2 receiving subsystem
196
197
197
197
198
202
204
210
210
210
21
1
21 1
21 1
21 1
212
212
21 5
215
216
216
217
217
220
223
226
226
228
230
232
232
232
233
233
233
234
235
235
236
CONTENTS xiii
9.2.1 Physical interface of a PS2 port
9.2.2 Device-to-host communication protocol
9.2.3 Design and code
9.3 PS2 keyboard scan code
9.3.1 Overview of the scan code
9.3.2 Scan code monitor circuit
9.4 PS2 keyboard interface circuit
9.4.1
9.4.2
Verification circuit
Basic design and
HDL code
9.5 Bibliographic notes
9.6 Suggested experiments
9.6.1 Alternative keyboard interface I
9.6.2 Alternative keyboard interface I1
9.6.3
9.6.4
Keyboard-controlled stopwatch
9.6.5 Keyboard-controlled rotating LED banner
PS2 receiving subsystem with watchdog timer
10 PS2 Mouse
10.1 Introduction
10.2 PS2 mouse protocol
10.2.1 Basic operation
10.2.2 Basic initialization procedure
10.3 PS2 transmitting subsystem
10.3.1 Host-to-PS2-device communication protocol
10.3.2 Design and code
10.4.1 Basic design and code
10.4.2 Verification circuit
10.5 PS2 mouse interface
10.5.1 Basic design
10.5.2 Testing circuit
10.6 Bibliographic notes
10.7 Suggested experiments
10.4 Bidirectional PS2 interface
10.7.1 Keyboard control circuit
10.7.2 Enhanced mouse interface
10.7.3 Mouse-controlled seven-segment LED display
11 External SRAM
1 1.1 Introduction
1 1.2 Specification of the IS6 I LV25616AL SRAM
1 1.2.1 Block diagram and I/O signals
236
236
236
240
240
24
1
244
244
246
248
248
248
249
249
249
249
251
25 1
252
252
252
253
253
254
259
259
260
263
263
265
266
266
267
267
267
269
269
270
270
XiV CONTENTS
1 1.2.2 Timing parameters 270
1 1.3 Basic memory controller 274
1 1.3.1 Block diagram 274
1 1.3.2 Timing requirement 275
1 1.3.3 Register file versus SRAM 276
1 1.4 A safe design 276
11.4.1 ASMD chart 276
1 1.4.2 Timing analysis 277
1 1.4.3 HDL implementation 278
1 1.4.4 Basic testing circuit 28 1
1 1.4.5 Comprehensive SRAM testing circuit 283
1 1.5 More aggressive design 288
1 1.5.1 Timing issues 288
1 1 S.2 Alternative design I 288
1 1 S.3 Alternative design I1 290
1 1 S.4 Alternative design
I11 291
1 1 S.5 Advanced FPGA featuresXiLinZ specific 293
1 1.6 Bibliographic notes 294
11.7 Suggested experiments 294
1 1.7.1 Memory with a 5 12K-by- 16 configuration 294
11.7.2 Memory with a 1M-by-8 configuration 295
11.7.3 Memory with an 8M-by-1 configuration 295
1 1.7.4 Expanded memory testing circuit 295
11.7.5 Memory controller and testing circuit for alternative design
I 295
1 1.7.6 Memory controller and testing circuit for alternative design I1 295
1 1.7.7 Memory controller and testing circuit for alternative design I11 295
1 1.7.8 Memory controller with DCM 295
1 1.7.9 High-performance memory controller 296
12 Xilinx Spartan3 Specific Memory 297
12.1 Introduction
12.2 Embedded memory of Spartan-3 device
12.2.1 Overview
12.2.2 Comparison
12.3 Method to incorporate memory modules
12.3.1 Memory module via HDL component instantiation
12.3.2 Memory module via Core Generator
12.3.3 Memory module via HDL inference
12.4 HDL templates for memory inference
12.4.1 Single-port RAM
12.4.2 Dual-port RAM
12.4.3 ROM
297
297
297
298
298
299
299
3
00
300
3
00
303
305
CONTENTS XV
12.5 Bibliographic notes
12.6 Suggested experiments
12.6.1 Block-RAM-based FIFO
12.6.2 Block-RAM-based stack
12.6.3 ROM-based sign-magnitude adder
12.6.4 ROM-based sin(z) hnction
12.6.5 ROM-based sin(z) and COS(T) functions
13 VGA controller I: graphic
13.1 Introduction
13.1.1 Basic operation of a CRT
13.1.2 VGA port of the S3 board
13.1.3 Video controller
13.2.1 Horizontal synchronization
13.2.2 Vertical synchronization
13.2.3 Timing calculation of VGA synchronization signals
13.2.4 HDL implementation
13.2.5 Testing circuit
13.3 Overview of the pixel generation circuit
13.4 Graphic generation with an object-mapped scheme
13.4.1 Rectangular objects
13.4.2 Non-rectangular object
13.4.3 Animated object
13.5 Graphic generation with a bit-mapped scheme
13.5.1 Dual-port RAM implementation
13.5.2 Single-port RAM implementation
13.2 VGA synchronization
13.6 Bibliographic notes
13.7 Suggested experiments
13.7.1 VGA test pattern generator
13.7.2 SVGA mode synchronization circuit
13.7.3 Visible screen adjustment circuit
13.7.4 Ball-in-a-box circuit
13.7.5 Two-balls-in-a-box circuit
13.7.6 Two-player pong game
13.7.7 Breakout game
13.7.8 Full-screen dot trace
13.7.9 Mouse pointer circuit
13.7.1 0 Small-screen mouse scribble circuit
13.7.1 1 Full-screen mouse scribble circuit
307
307
307
307
307
308
308
309
309
309
31 1
31 1
3 12
312
314
315
315
318
3 19
319
320
325
326
332
332
337
337
337
337
338
338
338
339
339
339
339
340
340
340
14 VGA controller II: text
341
xvi CONTENTS
14.1 Introduction
14.2 Text generation
14.2.1 Character as a tile
14.2.2 Font
ROM
14.2.3 Basic text generation circuit
14.2.4 Font display circuit
14.2.5 Font scaling
14.3 Full-screen text display
14.4 The complete pong game
14.4.1 Text subsystem
14.4.2 Modified graphic subsystem
14.4.3 Auxiliary counters
14.4.4 Top-level system
14.5 Bibliographic notes
14.6 Suggested experiments
14.6.1 Rotating banner
14.6.2 Underline for the cursor
14.6.3 Dual-mode text display
14.6.4 Keyboard text entry
14.6.5 UART terminal
14.6.6 Square-wave display
14.6.7 Simple four-trace logic analyzer
14.6.8 Complete two-player pong game
14.6.9 Complete breakout game
PART 111 PICOBLAZE MICRO CONTROLLER^^^^^^
15 PicoBlaze Overview
15.1 Introduction
15.2 Customized hardware and customized software
15.2.1 From special-purpose FSMD to general-purpose microcontroller
15.2.2 Application
of microcontroller
15.3.1 Basic organization
15.3.2 Top-level HDL modules
15.3 Overview of PicoBlaze
15.4 Development flow
15.5 Instruction set
15.5.1 Programming model
15.5.2 Instruction format
15.5.3 Logical instructions
15.5.4 Arithmetic instructions
15.5.5 ComDare and test instructions
34 1
34 1
34
1
342
344
345
347
348
352
352
358
359
36 1
366
366
366
366
366
366
366
367
367
368
368
371
37 1
372
372
3 74
3 74
3 74
376
377
377
379
379
380
381
3 82
CONTENTS xvii
15.5.6 Shift and rotate instructions
15.5.7 Data movement instructions
15.5.8 Program flow control instructions
15.5.9 Interrupt related instructions
15.6.1 The KCPSM3 directives
15.6.2 The PBlazeIDE directives
15.6 Assembler directives
15.7 Bibliographic notes
16 PicoBlaze Assembly Code Development
16.1 Introduction
16.2 Useful code segments
16.2.1 KCPSM3 conventions
16.2.2 Bit manipulation
16.2.3 Multiple-byte manipulation
16.2.4 Control structure
16.3 Subroutine development
16.4 Program development
16.4.1 Demonstration example
16.4.2 Program documentation
16.5 Processing
of the assembly code
16.5.1 Compiling with KCSPM3
16.5.2 Simulation by PBlazeIDE
16.5.3 Reloading code via the JTAG port
16.5.4 Compiling by PBlazeIDE
16.6 Syntheses with PicoBlaze
16.7 Bibliographic notes
16.8 Suggested experiments
16.8.1 Signed multiplication
16.8.2 Multi-byte multiplication
16.8.3 Barrel
shift function
16.8.4 Reverse function
16.8.5 Binary-to-BCD conversion
16.8.6 BCD-to-binary conversion
16.8.7 Heartbeat circuit
16.8.8 Rotating LED circuit
16.8.9 Discrete LED dimmer
17 PicoBlaze 110 Interface
17.1 Introduction
17.2 Output port
383
384
386
389
390
390
390
391
393
393
393
393
394
395
396
398
399
400
404
406
406
407
410
410
41 1
412
412
412
412
413
413
413
413
413
413
413
41 5
415
416
XViii CONTENTS
17.2.1 Output instruction and timing
17.2.2 Output interface
17.3.1 Input instruction and timing
17.3.2 Input interface
17.4 Square program with a switch and seven-segment LED display interface
17.4.1 Output interface
17.4.2 Input interface
17.4.3 Assembly code development
17.4.4 HDL code development
17.5 Square program with a combinational multiplier and UART console
17.5.1 Multiplier interface
17.5.2 UART interface
17.5.3 Assembly code development
17.5.4 HDL code development
17.3 Input port
17.6 Bibliographic notes
17.7 Suggested experiments
17.7.1 Low-frequency counter I
17.7.2 Low-frequency counter I1
17.7.3 Auto-scaled low-frequency counter
17.7.4 Basic reaction timer with a software timer
17.7.5 Basic reaction timer with a hardware timer
17.7.6 Enhanced reaction timer
17.7.7 Small-screen mouse scribble circuit
17.7.8 Full-screen mouse scribble circuit
17.7.9 Enhanced rotating banner
17.7.10 Pong game
17.7.1 1 Text editor
18 PicoBlaze Interrupt Interface
18.1 Introduction
18.2 Interrupt handling in PicoBlaze
18.2.1 Software processing
18.2.2 Timing
18.3.1 Single interrupt request
18.3.2 Multiple interrupt requests
18.4 Software development considerations
18.4.1 Interrupt as an alternative scheduling scheme
18.4.2 Development of an interrupt service routine
18.3 External interface
18.5 Design example
18.5.1 Interrupt interface
416
417
418
418
419
42
1
42 1
422
424
43
1
434
434
435
436
446
449
449
449
449
449
449
450
450
450
450
450
450
45
1
453
453
453
454
455
456
456
456
457
457
458
458
458
CONTENTS xix
18.5.2 Interrupt service routine development
18.5.3 Assembly code development
18.5.4 HDL code development
18.6 Bibliographic notes
18.7 Suggested experiments
18.7.1 Alternative timer interrupt service routine
18.7.2 Programmable timer
18.7.3 Set-button interrupt service routine
18.7.4 Interrupt interface with two requests
18.7.5 Four-request interrupt controller
Appendix A: Sample Verilog templates
A. 1
A.2
A.3
A.4
AS
A.6
A. 7
A.8
A.9
Numbers and operators
A.
1.1
A. 1.2 Operators
General Verilog constructs
A.2.1 Overall code structure
A.2.2 Component instantiation
Routing with conditional operator and if and case statements
A.3.1 Conditional operator and if statement
A.3.2 Case statement
Combinational circuit using an always block
A.4.1
A.4.2
Memory Components
A.5.1 Register template
A.5.2 Register file
Regular sequential circuits
FSM
FSMD
S3 board constraint file
(s3. ucf)
Sized and unsized numbers
Always block without default output assignment
Always block with default output assignment
459
459
46
1
464
464
464
464
465
465
465
467
467
467
468
469
469
470
470
470
47
1
472
472
472
473
473
474
474
476
478
480
References
Topic Index
485
487
This Page Intentionally Left Blank
PREFACE
HDL (hardware description language) and FPGA (field-programmable gate array) devices
allow designers to quickly develop and simulate a sophisticated digital circuit, realize it
on a prototyping device, and verify operation of the physical implementation. As these
technologies mature, they have become mainstream practice. We can now use a PC and
an inexpensive FPGA prototyping board to construct a complex and sophisticated digital
system. This book uses a "learning by doing" approach and illustrates the FPGA and HDL
development and design process
by a series of examples. A wide range of examples is
included, from a simple gate-level circuit to an embedded system with an 8-bit soft-core
microcontroller and customized
110 peripherals. All examples can be synthesized and
physically tested on a prototyping board.
Focus and audience
FOCUS The main focus of this book is on the effective derivation of hardware, not the
syntax of HDL. Instead of explaining every language construct, the book focuses on a
small synthesizable subset and uses about a dozen code templates to provide the skeletons
of various types of circuits. These templates are general and can easily be integrated to
construct a large, complex system. Although this approach limits the "freedom" of syntactic
expression, it will not prevent us from developing innovative hardware architecture. Because
of the generality and flexibility of HDL, the same circuit can usually be described by a
wide variety of language constructs and coding styles. Many of these codes are intended
for modeling. They may lead to unnecessarily complex hardware implementation and
sometimes cannot be synthesized at all. The template approach actually forces us to think
more about hardware and develop a good coding practice for synthesis. Since we are
xxii PREFACE
more interested in hardware, it is more beneficial to spend time on developing 10 different
hardware architectures with the same
code template rather than describing the same circuit
with 10 different versions of codes.
There are two popular
HDLs, VHDL and Verilog. Both languages are used widely and
are IEEE standards. This book uses Verilog, and a separate book with a similar title uses
VHDL. Despite the drastic syntactic differences in the two languages, their capabilities are
very similar, particularly for our purposes. After we comprehend the design practice and
coding methodology in one language, learning the other language is rather straightforward.
Although the book is intended for beginning designers, the examples follow strict design
guidelines and prepare readers for future endeavors. The coding and design practice is
"forward compatible," which means that:
The same practice can be applied to large design in the future.
The same practice can aid other system development tasks, including simulation,
timing analysis, verification, and testing.
The same practice can be applied to ASIC technology and different types of FPGA
devices.
The code can be accepted by synthesis software from different vendors.
In summary, the book is a hands-on, hardware-centric text that involves
minimal HDL
overhead
and follows good design and coding practice to achieve maximal forward com-
parability.
Audience and perquisites The book contains three major parts: basic digital circuits,
peripheral modules, and embedded microcontroller. The intended audience is students in
an introductory or advanced digital system design course as well as practicing engineers
who wish to learn FPGA- and HDL-based development. For the materials in the first two
parts, readers need to have a basic knowledge of digital systems, usually a required course
in electrical engineering and computer engineering curricula. For the materials in the third
part, prior exposure to assembly language programming will be helpful.
Logistics
Although a major goal of this book is to teach readers to develop software-independent
and device-neutral HDL codes, we have to choose a software package and a prototyping
board to synthesize and implement the design examples. The synthesis software and FPGA
devices from Xilinx, a leading manufacture in this area, are used in the book.
Software The synthesis software used in the book is the Web version of the Xilinx
ISE package. The functionality of this version is similar to that of the full version but
supports only a limited number of devices. Most introductory development boards use
FPGA devices from the inexpensive Spartan-3 family. Since the Web version supports
the Spartan-3 device, it fits our needs. The simulation software used in the book is the
starter version of Mentor Graphics'
ModelSim XE 111 package. It is a customized edition
of
ModelSim. Both software packages are free and can be downloaded from Xilinx's Web
site.
FPGA prototyping board This book is prepared to be used with several entry-level
FPGA prototyping boards manufactured by
Digilent Inc., including the Spartan-3 Starter,
Nexys-2, and Basys boards, all of which contain a Spartan-313E FPGA device and have
similar 110 peripherals. The design examples in the book are based on the Spartan-3 Starter
board (or simply the
S3 board), but most of them can be used directly on other boards as
well. The applicability of the HDL codes is summarized below. Spartan3 Starter (S3) board. The S3 board contains all the peripherals and no
additional accessory module is needed. All HDL codes and discussions can be
applied to this board directly.
Nexys-2 board. The Nexys-2 board is a newer board, which contains a larger FPGA
device and a larger memory chip. Its peripherals are similar to those on the S3 board.
There are two differences. First, the "color depth" of its VGA interface is expanded
from 3 bits to
8 bits. Thus, the output of the VGA interface circuits discussed in
Chapters 13 and
14 needs to be modified accordingly. Second, the Nexys-2 board
contains a more sophisticated external memory device. Although the device can be
configured as an asynchronous SRAM, the timing characteristics are different from
those of the S3 board's memory device, and thus the HDL codes for the memory
controller in Chapter
1 1 cannot be used directly. However, the same design principle
can be applied to construct a new controller.
Basys board. The Basys board is a simpler board. It lacks the RS-232 connector.
To implement the UART module and the serial interface discussed in Chapter
8, we
need Digilent's
RS-232 converterperipheral module. The Basys board has no external
memory devices, and thus the discussion of the memory controller in Chapter
11 is
not applicable.
Other FPGA boards. Most peripherals discussed in this book are de facto industrial
standards, and the corresponding HDL codes can be used as long as a board provides
proper analog interface circuits and connectors. Except for the Xilinx-specific por-
tions, the codes can be applied to the boards based on the FPGA devices from other
manufacturers as well.
PC Accessories The design examples include interfaces to several PC peripheral de-
vices. A keyboard, a mouse, and a VGA monitor are required for the respective modules,
and a "straight-through" serial cable (the most commonly used type) is required for the
UART module. These accessories are widely available and can probably be obtained from
an old
PC.
Book organization
The book is divided into three major parts. Part I introduces the elementary HDL constructs
and their hardware counterparts, and demonstrates the construction of a basic digital circuit
with these constructs. It consists of six chapters:
Chapter 1 describes the skeleton of an HDL program, basic language syntax, and
logical operators. Gate-level combinational circuits are derived with these language
constructs.
Chapter 2 provides an overview of an FPGA device, prototyping board, and devel-
opment flow. The development process is demonstrated by a tutorial on Xilinx ISE
synthesis software and a
tutorial on Mentor Graphics
ModelSim simulation software.
Chapter 3 introduces HDL's relational and arithmetic operators and routing constructs.
These correspond to medium-sized components, such as comparators, adders, and
multiplexers. Module-level combinational circuits are derived with these language
constructs.
xxiv PREFACE
Chapter 4 covers the codes for memory elements and the construction of "regular"
sequential circuits, such as counters and shift registers, in which the state transitions
exhibit a regular pattern.
Chapter 5 discusses the construction of a finite state machine (FSM), which is a
sequential circuit whose state transitions do not exhibit a simple, regular pattern.
Chapter 6 presents the construction of an FSM with data path (FSMD). The FSMD is
used to implement register transfer (RT) methodology, in which the system operation
is described by data transfers and manipulations among registers.
Chapter 7 discusses several more advanced topics on language constructs and coding
techniques and introduces the development of more sophisticated testbenches. This
chapter can be skipped without affecting the remaining chapters.
Part I1 applies the techniques from Part I to design an array of peripheral modules for the
prototyping board. Each chapter covers the development, implementation, and verification
of an individual peripheral. These modules can be incorporated to a larger project. Part I1
consists of seven chapters:
Chapter 8 discusses the design of a universal asynchronous receiver and transmitter
(UART), which provides a serial link to receive and transmit data via the prototyping
board's RS-232 port.
Chapter 9 covers the design of a keyboard interface, which reads scan code from a
keyboard. The keyboard is connected via the prototyping board's PS2 port.
Chapter 10 covers the design ofa mouse interface, which obtains the button and move-
ment information from a mouse. The mouse is also connected via the prototyping
board's PS2 port.
Chapter 11 discusses the implementation and timing issues of a memory controller.
The controller is used to read data from and write data to the two static random access
memory (SRAM) devices on the S3 board.
Chapter 12 discusses the inference and application of Spartan-3 device-specific com-
ponents. The focus is on the FPGA's internal memory blocks.
Chapter 13 presents the design and implementation of a video controller. The discus-
sion covers the generation of video synchronization signals and shows the construc-
tion of simple bit- and object-mapped graphical interfaces. The monitor is connected
to the prototyping board's VGA port.
Chapter 14 continues development of the video controller. The discussion illustrates
the construction of text interface and general tile-mapped scheme.
Part 111 introduces an FPGA-based soft-core microcontroller, known as PicoBlaze, and
demonstrates the integration of a general-purpose processor and customized circuit. It
includes four chapters:
Chapter 15 provides an overview of the organization and instruction set of PicoBlaze.
Chapter 16 introduces the basic assembly programming and provides an overview of
the development process.
Chapter 17 discusses PicoBlaze's 110 feature and illustrates the procedure to derive
customized circuits to interface other 110 peripherals.
Chapter 18 discusses PicoBlaze's interrupt capability and demonstrates the construc-
tion of a customized interrupt-handling circuit.
In addition to regular chapters, the appendix summarizes and lists all code templates.
special marksxilinx specific We use two special paragraph marks in the book: one
for a Xilinx-specijic featzrre and one for Verilog-1995 constructs. While the examples
PREFACE XXV
described in the book are implemented on a Xilinx-based prototyping board and the codes
are synthesized by Xilinx ISE software, we try to make the HDL codes as device independent
and software neutral as possible. Most discussions and codes can be applied to different
target devices and different synthesis software as well. However, certain codes or device
features are unique to Xilinx ISE software or Spartan-3 FPGA devices. We use the
Xilinx
spec@ superscript, as in the heading of this section, to indicate that the discussion in the
corresponding section or chapter is unique to Xilinx.
Similarly, we use marginal notes, as shown on the outer edge, to indicate that the dis-
cussion in a paragraph is unique to Xilinx. This note indicates that the code or design is no
Xilinx
longer portable and needs to be revised when a different software package or target device specific
is used.
The Verilog language was first ratified in 1995 (referred to as Verilog-1995) and then
revised in 2001 (referred to as Verilog-2001). Many
useful enhancements are added in the
revised
version. We use Verilog-2001 in this book. If a language construct differs in the two
versions, we describe the old syntax briefly in a separate paragraph and use a marginal note,
as shown on the outer edge, for this type of discussion. It indicates "for your information"
FYI
and the materials are included to help readers understand the older Verilog codes.
Instructional use
The book can be a good companion text for an introductory digital systems course or
an advanced project-oriented course. In an introductory digital systems course, the book
supplies the lab portion of the curriculum. The chapters in Part
I basically follow the
sequence of a typical curriculum and can be presented along with regular lectures. One or
two peripheral modules can be selected as case studies, and corresponding experiments can
be used as term projects.
In an advanced project-oriented course, the book provides a base for independent projects.
The materials in Part I should be treated as an overview or refresher, which provides a gen-
eral background on HDL, synthesis, and FPGA boards. Some modules in Part
I1 can be
used to demonstrate the design of more complex circuits. These modules can also be con-
sidered as building blocks (i.e., IPS) or subsystems to be integrated into final projects. The
PicoBlaze microcontroller discussed in Part 111 can be used as a general-purpose processor
if an embedded-system type of project is desired.
Companion Web site
An accompanying Web site
(http://acadernic.csuohio.edu/chu~p/rtl) provides additional in-
formation, including the following materials:
Errata
Code templates
HDL code listing and relevant files
Links to synthesis and simulation software
Links to referenced materials
Additional project ideas
Errata The book is self-prepared, which means that the author has produced all aspects
of the text, including illustrations, tables, code listings, indexing, and formatting. As errors
xxvi PREFACE
are always bound to happen, the accompanying Web site provides an updated errata sheet
and a place to report errors.
Cleveland,
Ol~io
January 2008
ACKNOWLEDGMENTS
The author would like to express his gratitude to Professor George L. Kramerich for his
encouragement and help.
The author also thanks John Wiley & Sons, Inc. for giving permission to use Figures 3.1,
3.2,4.2,4.10,4.11,6.5, and 7.2 from my text RTL Hardware Design Using VHDL: Coding
for Eficiency, Portability, and Scalability, and Xilinx, Inc. for giving permission to use
Figures 2.3 and
9.3 from the Spartan-3 Starter Kit Board User Guide.
All trademarks used or referred to in this book are the property
oftheir respective owners.
P. P. Chu