Материалдар / Arduino бойынша нұсқаулық

Arduino бойынша нұсқаулық

Материал туралы қысқаша түсінік
Arduino бойынша нұсқаулық
Авторы:
Автор материалды ақылы түрде жариялады. Сатылымнан түскен қаражат авторға автоматты түрде аударылады. Толығырақ
26 Сәуір 2018
149
0 рет жүктелген
770 ₸
Бүгін алсаңыз
+39 бонус
беріледі
Бұл не?
Бүгін алсаңыз +39 бонус беріледі Бұл не?
Тегін турнир Мұғалімдер мен Тәрбиешілерге
Дипломдар мен сертификаттарды алып үлгеріңіз!
Бұл бетте материалдың қысқаша нұсқасы ұсынылған. Материалдың толық нұсқасын жүктеп алып, көруге болады
logo

Материалдың толық нұсқасын
жүктеп алып көруге болады

Page 1


Page 2

FPGA PROTOTYPING 
BY VERILOG EXAMPLES 
Xilinx SpartanTM-3 Version 
Pong P. Chu 
Cleveland State University 
WILEY 
A JOHN WILEY  & SONS, INC., PUBLICATION 


Page 3

This Page Intentionally Left Blank


Page 4

FPGA PROTOTYPING 
BY VERILOG EXAMPLES 


Page 5

This Page Intentionally Left Blank


Page 6

FPGA PROTOTYPING 
BY VERILOG EXAMPLES 
Xilinx SpartanTM-3 Version 
Pong P. Chu 
Cleveland State University 
WILEY 
A JOHN WILEY & SONS, INC., PUBLICATION 


Page 7

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. 


Page 8

In memory of my fathel; Chia Chi Chu 


Page 9

This Page Intentionally Left Blank


Page 10

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 
















12 
vii 


Page 11

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 


Page 12

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 


Page 13

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 


Page 14

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 


Page 15

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 

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 


Page 16

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 

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 


Page 17

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 

00 
300 

00 
303 
305 


Page 18

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 


Page 19

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 

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 


Page 20

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 


Page 21

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 

42 1 
422 
424 
43 

434 
434 
435 
436 
446 
449 
449 
449 
449 
449 
449 
450 
450 
450 
450 
450 
450 
45 

453 
453 
453 
454 
455 
456 
456 
456 
457 
457 
458 
458 
458 


Page 22

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 

464 
464 
464 
464 
465 
465 
465 
467 
467 
467 
468 
469 
469 
470 
470 
470 
47 

472 
472 
472 
473 
473 
474 
474 
476 
478 
480 
References 
Topic Index 
485 
487 


Page 23

This Page Intentionally Left Blank


Page 24

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 


Page 25

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 


Page 26

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. 


Page 27

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 


Page 28

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 


Page 29

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 


Page 30

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 


Ресми байқаулар тізімі
Республикалық байқауларға қатысып жарамды дипломдар алып санатыңызды көтеріңіз!
Осы аптаның ең үздік материалдары
Педагогтардың біліктілігін арттыру курстары
Аттестацияда (ПББ) 100% келетін
тақырыптармен дайындаймыз
Аттестацияда (ПББ) келетін тақырыптар бойынша жасалған тесттермен дайындалып, бізбен бірге тестілеуден оңай өтесіз
Өткен жылы бізбен дайындалған ұстаздар 50/50 жинап рекорд жасады
Толығырақ