Jump to ratings and reviews
Rate this book

Designing Video Game Hardware in Verilog

Rate this book
This book attempts to capture the spirit of the ''Bronze Age'' of video games, when video games were designed as circuits, not as software. We'll delve into these circuits as they morph from Pong into programmable personal computers and game consoles. Instead of wire-wrap and breadboards, we'll use modern tools to approximate these old designs in a simulated environment from the comfort of our keyboards. At the end of this adventure, you should be well-equipped to begin exploring the world of FPGAs, and maybe even design your own game console. You'll use the 8bitworkshop.com IDE to write Verilog programs that represent digital circuits, and see your code run instantly in the browser. List of Boolean Logic Discrete Hardware Clocks and Flip-Flops HDL (Hardware Description Language) Intro to Verilog The 8bitworkshop IDE A Simple Clock Divider A Binary Counter Video Signal Generator A Test Pattern Digits Scoreboard A Moving Ball Slipping Counter RAM Tile Graphics Switches and Paddles Sprites Better Sprites Racing Game Sprite Rotation Motion Vectors Tank Game Shift Registers Sound Effects Tilemap Rendering Scanline Sprite Rendering The Arithmetic Logic Unit A Simple CPU A Configurable Assembler Racing Game With CPU A 16-bit CPU Framebuffer Graphics A Programmable Game System A Demo Program Practical Considerations for Real Hardware FPGA Examples Appendix Verilog Reference Appendix Troubleshooting

Kindle Edition

Published December 14, 2018

4 people are currently reading
69 people want to read

About the author

Steven Hugg

5 books12 followers

Ratings & Reviews

What do you think?
Rate this book

Friends & Following

Create a free account to discover what your friends think of this book!

Community Reviews

5 stars
7 (31%)
4 stars
11 (50%)
3 stars
4 (18%)
2 stars
0 (0%)
1 star
0 (0%)
Displaying 1 - 3 of 3 reviews
Profile Image for Peter.
10 reviews
May 30, 2020
Greatly enjoying this book. One note: when hooking up the digits10_array module (which is incorrectly defined as digits10_case on the previous page), the line

wire g = display_on && bits[xofs ^ 3’b111];

...is using that XOR "^" character to flip the xofs.

The xofs is a 3-bit number that rises from 0 to 7 repeatedly as the scanline goes from left to right. This means that index 0 in our bits array would go on the left, then index 1 would be to the right of it, and so on.

But the way we defined our bits array doesn't work that way.

If we do:

bitarray[0][0] = 5’b00001;

then bitarray[0] would be 1 and bitarray [1] would be 0. In other words, because the least-significant bit in b'00001 is on the right in human notation, our "rightmost" bit is the least-significant one (the one you'd see at index 0).

(It's actually human notation that flips the bits from right to left, come to think of it.)

So if we used xofs as-is, it would start with the rightmost digit and move left. Which is fine, but it would horizontally flip the numbers we put into our bitarray definition.

To reverse that, xofs ^ 3'b111 will flip xofs from least-significant to most-significant. In other words, when xofs is 0, xofs ^ 3'b111 will be 7. When xofs is 1, xofs ^ 3'b111 will be 6. And so on.
24 reviews
March 28, 2023
Very nice companion website, interesting side stories, but it goes very fast, not explaining many thing deeply enough. The focus is also on the design, not on the Verilog language, which is fine, but not what I hoped for.
Displaying 1 - 3 of 3 reviews

Can't find what you're looking for?

Get help and learn more about the design.