Professional Documents
Culture Documents
Ebffiledoc - 658download Textbook Designing Video Game Hardware in Verilog Steven Hugg Ebook All Chapter PDF
Ebffiledoc - 658download Textbook Designing Video Game Hardware in Verilog Steven Hugg Ebook All Chapter PDF
https://textbookfull.com/product/ludomusicology-approaches-to-
video-game-music-michiel-kamp/
https://textbookfull.com/product/indie-video-game-development-
work-innovation-in-the-creative-economy-alexander-styhre/
https://textbookfull.com/product/inside-the-video-game-
industry-1st-edition-judd-ruggill/
https://textbookfull.com/product/the-craft-and-science-of-game-
design-a-video-game-designers-manual-1st-edition-oconnor/
Video Game Marketing A Student Textbook 1st Edition
Peter Zackariasson
https://textbookfull.com/product/video-game-marketing-a-student-
textbook-1st-edition-peter-zackariasson/
https://textbookfull.com/product/start-your-video-game-
career-1st-edition-jason-w-bay/
https://textbookfull.com/product/designing-the-music-business-
design-culture-music-video-and-virtual-reality-guy-morrow/
https://textbookfull.com/product/graduate-skills-and-game-based-
learning-using-video-games-for-employability-in-higher-education-
matthew-barr/
https://textbookfull.com/product/practical-game-design-a-modern-
and-comprehensive-guide-to-video-game-design-2nd-edition-adam-
kramarzewski-ennio-de-nucci/
DESIGNING VIDEO GAME
HARDWARE IN VERILOG
An 8bitworkshop Book
by Steven Hugg
Designing Video Game Hardware in Verilog
Copyright ©2018 by Steven Hugg
Disclaimer
Although every precaution has been taken in the preparation
of this book, the publisher and author assume no responsibility
for errors or omissions, nor is any liability assumed for damages
resulting from the use of the information contained herein. No
warranties of any kind are expressed or implied.
Trademarks
Some brands and product names mentioned in this work are
trademarks or service marks of their respective companies. Use
of a term in this work should not be regarded as affecting the
validity of any trademark or service mark.
Inquiries
Please refer all inquiries to info@8bitworkshop.com.
Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
1 Boolean Logic . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Boolean Algebra . . . . . . . . . . . . . . . . . . . 1
1.2 Truth Tables . . . . . . . . . . . . . . . . . . . . . 2
1.3 Combinational Logic . . . . . . . . . . . . . . . . 3
1.4 Binary Numbers . . . . . . . . . . . . . . . . . . . 3
1.5 Addition and Subtraction . . . . . . . . . . . . . . 4
1.6 Logical Operations . . . . . . . . . . . . . . . . . 4
1.7 Signed vs. Unsigned . . . . . . . . . . . . . . . . . 5
1.8 Hexadecimal Notation . . . . . . . . . . . . . . . 6
2 Discrete Hardware . . . . . . . . . . . . . . . . . . . . . 7
2.1 History of the Logic Gate . . . . . . . . . . . . . . 7
2.2 TTL Logic . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Discrete Logic and the 7400 Series ICs . . . . . . 9
2.4 Circuit Diagrams . . . . . . . . . . . . . . . . . . . 10
iii
Contents
5 Intro to Verilog . . . . . . . . . . . . . . . . . . . . . . . 16
5.1 Modules . . . . . . . . . . . . . . . . . . . . . . . . 16
5.2 Wires . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.3 Regs . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.4 Vector . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.5 Literals . . . . . . . . . . . . . . . . . . . . . . . . 18
5.6 Blocking vs. Non-Blocking Assignments . . . . . 19
8 A Binary Counter . . . . . . . . . . . . . . . . . . . . . . 28
8.1 Synchronous Reset . . . . . . . . . . . . . . . . . 30
8.2 Asynchronous Reset . . . . . . . . . . . . . . . . . 31
10 A Test Pattern . . . . . . . . . . . . . . . . . . . . . . . 39
11 Digits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
11.1 Seven-Segment Digits . . . . . . . . . . . . . . . . 43
11.2 Bitmapped Digits and ROMs . . . . . . . . . . . . 45
11.3 Initial Block . . . . . . . . . . . . . . . . . . . . . . 47
11.4 External File . . . . . . . . . . . . . . . . . . . . . 48
11.5 Test Module . . . . . . . . . . . . . . . . . . . . . 48
12 A Moving Ball . . . . . . . . . . . . . . . . . . . . . . . . 50
12.1 Absolute Position Method . . . . . . . . . . . . . . 50
12.2 Bouncing Off Walls . . . . . . . . . . . . . . . . . 53
iv
Contents
13 Slipping Counter . . . . . . . . . . . . . . . . . . . . . . 54
13.1 Slipping Counter Method . . . . . . . . . . . . . . 54
14 RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
14.1 RAM in Verilog . . . . . . . . . . . . . . . . . . . . 59
14.2 Synchronous vs Asynchronous RAM . . . . . . . . 61
14.3 Tri-state buses and inout ports . . . . . . . . . . . 62
14.4 Writing to a tri-state bus . . . . . . . . . . . . . . 63
15 Tile Graphics . . . . . . . . . . . . . . . . . . . . . . . . 64
15.1 Animation . . . . . . . . . . . . . . . . . . . . . . 67
17 Sprites . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
17.1 Improvements . . . . . . . . . . . . . . . . . . . . 77
18 Better Sprites . . . . . . . . . . . . . . . . . . . . . . . . 79
18.1 Using the Sprite Renderer Module . . . . . . . . . 84
19 Racing Game . . . . . . . . . . . . . . . . . . . . . . . . 85
20 Sprite Rotation . . . . . . . . . . . . . . . . . . . . . . . 89
21 Motion Vectors . . . . . . . . . . . . . . . . . . . . . . . 92
21.1 Fixed-Point . . . . . . . . . . . . . . . . . . . . . . 92
21.2 The Sine Function . . . . . . . . . . . . . . . . . . 94
21.3 Move During the Hsync . . . . . . . . . . . . . . . 95
21.4 Collisions . . . . . . . . . . . . . . . . . . . . . . . 95
22 Tank Game . . . . . . . . . . . . . . . . . . . . . . . . . 98
22.1 The Playfield Maze . . . . . . . . . . . . . . . . . . 98
22.2 The Mine Field . . . . . . . . . . . . . . . . . . . . 100
22.3 The Players’ Two Tanks . . . . . . . . . . . . . . . 100
22.4 Improvements . . . . . . . . . . . . . . . . . . . . 103
v
Contents
vi
Contents
vii
Contents
Appendix B: Troubleshooting . . . . . . . . . . . . . . . . . vi
Metastability . . . . . . . . . . . . . . . . . . . . . . . . vii
Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x
viii
Preface
ix
cases, gamers could take the software home and play it on their
television.
This book attempts to capture the spirit of the “Bronze Age”
of video games. 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.
Many thanks to dB Baker for draft review!
x
1
Boolean Logic
1
1.2. Truth Tables
3
1.5. Addition and Subtraction
4
1.7. Signed vs. Unsigned
Bit # 7 6 5 4 3 2 1 0
Byte A 1 0 1 0 0 1 0 1
Byte B 1 0 1 1 0 1 1 0
A & B (AND) 1 0 1 0 0 1 0 0
A | B (OR) 1 0 1 1 0 1 1 1
A ^ B (XOR) 0 0 0 1 0 0 1 1
Table 1.2: Binary AND, OR and XOR
5
1.8. Hexadecimal Notation
6
2
Discrete Hardware
7
2.2. TTL Logic
8
2.3. Discrete Logic and the 7400 Series ICs
Figure 2.1: TI 7400 4-NAND chip in PDIP package, with schematic (CC
SA 3.0, by Stefan506)
3 Many of these chips also had/have CMOS versions, but many were TTL-
logic-level compatible.
9
2.4. Circuit Diagrams
10
3
Clocks and Flip-Flops
3.2 Clocks
11
3.3. Flip-Flops
3.3 Flip-Flops
3.4 Latches
12
4
HDL (Hardware Description
Language)
13
4.1. Simulation
ASIC FPGA
4.1 Simulation
14
4.2. Hardware Modeling
15
5
Intro to Verilog
5.1 Modules
16
5.2. Wires
But since HDL tools are really good at finding the optimal mix
of gates to use, gate-level modeling is only used for specific
applications.
5.2 Wires
5.3 Regs
17
5.4. Vector
5.4 Vector
You can also treat a bit vector like a multi-bit integer, perform-
ing arithmetic and bitwise operations with it:
5.5 Literals
1234 // decimal
’b100101 // binary
’h8001 // hexadecimal (base 16)
’o12 // octal (base 8)
18
5.6. Blocking vs. Non-Blocking Assignments
These are all unsized literals. For some operations, like concate-
nation or arithmetic, you need to make them sized literals, or
you’ll get a compilation error. You can just prepend the length
in bits before the ’:
We’ll revisit this table often in this book, so don’t worry about
absorbing it right now. Just remember that there are two distinct
ways of assigning variables, the sequential (discrete) method, or
the combinational (continuous) method.
19
Another random document with
no related content on Scribd:
tehnyt yrityksen, jolloin vouti oli kuollut pelosta. Hän oli siis voudin
murhaaja.
Siellä oli lujasti sidottu käärö, ja kun hän avasi sen, tuli kontti
puolilleen rahoja. Toiset niistä olivat kirkkaita kuin kulta, toiset
homeisia, mutta kolmannet taas hopealle kimaltelevia. Torpparin
päätä huimasi ja hänen täytyi istua siihen, ettei kaatuisi. Ei ollut
epäilemistäkään: hän oli saanut nämä rahat voudilta tahi
paholaiselta. Mutta nyt se asia ei enää kauhistuttanut häntä, sillä
kullan kiilto oli lopullisesti hänet sokaissut. Hän ei ollut milloinkaan
nähnyt niin paljon rahaa ja hänen sydämensä sykähti ajatuksesta,
että hän nyt oli rikas. Kiireesti hän kätki aarteensa niin, ettei
vaimokaan saanut siitä mitään vihiä, otti veromääränsä ja lähti
voudin talolle velkaansa maksamaan.
Mutta kauhusta parkaisten hän vetäisikin sen pois, sillä eihän siinä
härkää ollutkaan, vaan ihminen, kaksi ihmistä. Toinen oli vouti ja
toinen se mies, jonka päässä oli ammottava reikä. Molemmat heidät
oli valjastettu saman ikeen alle, joka maahan painavan raskaana
näytti heitä rasittavan; niska oli kulunut vereslihalle ja selässä näkyi
ruoskan verisiä jälkiä. Tyrmistyneenä mies vaipui maahan tämän
kamalan valjakon eteen, kohottaen rukoilevasti kätensä voutia kohti,
mutta tämä vain katseli häntä surullisesti ja mitään sanomatta.
Miehen sydämessä vilahti epätoivoinen ajatus, että tuossa on vouti
samoissa kahleissa murhaamansa miehen kanssa — ehkä hänet on
määrätty voudin murhaajana kolmanneksi ajokkaaksi saman ikeen
alle? Se ajatus lamautti hänet niin, ettei hän voinut muuta kuin
nyyhkyttäen maata voudin edessä. Silloin tämä sanoi surullisella
äänellä:
Hän astui siitä sisään ja saapui pirttiin, joka oli synkkä ja hämärä.
Se näytti niin tavattoman suurelta, ettei hän voinut erottaa
peräseinää eikä kattoa, eikä hän aluksi nähnyt siellä ketään. Mutta
tarkemmin katsoessaan hän huomasikin sivu-ikkunan lavitsalla
miehen, joka tuijotti häneen hehkuvilla silmillään ja näytti
hymyilevän. Isäntä tunsi hänet: hän oli tuo omituinen ja kolkko
vieras, ihmeellisen viikatteen lahjoittaja, koko hänen
onnettomuutensa ja tuskansa alku. Ennenkuin hän kerkesi sanoa
mitään, kysyikin talon isäntä: "Vieläkö viikate pystyy?"
Hämmästyneenä vastasi toinen myötävästi. "Hyvä on", virkkoi siihen
taas musta mies, "kunhan vain varot katsomasta sen terään, kun se
ensi kerran kiveen kilahtaa".
Mutta silloin tunsi tulija omituisen rohkeuden heräävän
sydämessään ja sanoi äkkiä kuin kaiken tuskansa purkaen: "Minä en
anna sinulle sitä, mikä on vaimoni vyöliinan alla, en milloinkaan!" —
"Mutta olethan luvannut sen minulle", sanoi nyt musta mies
sähähtäen, "ja lupaustasi et voi peruuttaa, vaikka tahtoisitkin". "En
sittenkään!" vannoi toinen. "On antaminen; pian tulen itse
hakemaan", vastasi taas kylmästi musta isäntä, "Jumala auttaa
minua". — "Eikä auta; täällä ei hänellä ole mitään valtaa". Ja musta
mies hymyili pilkallisesti.
VI
Kun hänen poikansa sitten syntyi ja pappi kastoi sen Isän, Pojan ja
Pyhän Hengen nimeen, nähtiin hänen vaipuvan syvään rukoukseen.
Hänen kasvoillaan kuvastui sen aikana ahdistus ja taistelu, kunnes
hän lopuksi alistuneena painoi päänsä ja siunaten, melkeinpä kuin
anteeksi pyytäen, laski kätensä poikansa otsalle. Kummastellen sitä
ihmiset katselivat, mutta vanhan papin silmiin oli ilmestynyt
omituinen ilme. Miehestä tuntui, että pappi tuossa aavisti paljon,
vaikka ei tiennytkään mitään.
Ja uusi elämä alkoi koko kylässä. Jos oli entinen köyhä torppari
ollut kaikille vaivatuille huojennuksena hyvyydellään ja
iloisuudellaan, niin vielä enemmän tämä uusi, nyt muuttunut isäntä.
Tarmolla, taidolla ja viisaudella sekä koskaan ehtymättömällä
avuliaisuudella hän auttoi köyhiä naapureitansa jalkeille, ja hänen
varansa tuntuivat olevan tyhjentymättömät. Muutamien vuosien
kuluttua oli köyhyys seudulta kadonnut, onni ja hyvinvointi oli
ruvennut siellä asumaan, ja mennyt aika tuntui kuin pahalta unelta.
Eniten kummasteltiin sitä muutosta, joka oli tapahtunut voudin
pojassa. Tämä oli yrittänyt jatkaa isänsä menettelyä, mutta oli sitten
yht'äkkiä muuttunut, ja se muutos oli tapahtunut entisen torpparin
vaikutuksesta. Tämä oli kerran nuoren voudin julmuuksista
kuultuaan mennyt hänen luokseen ja pyytänyt kahdenkeskistä
keskustelua, johon toinen oli ynseästi ja ylpeästi vihdoin suostunut.
Mutta siitä keskustelusta hän oli palannut murtuneena ja sydämeen
saakka kauhistuneena. Mitä siellä oli puhuttu, sitä ei saatu
milloinkaan tietää, mutta tuloksena vain oli perinpohjainen muutos.
Missä ikinä vain saattoi, koetti nuori vouti korjata isänsä tekemiä
vääryyksiä, ja hänestä tuli entisen torpparinsa uskollinen toveri
työskentelyssä koko seudun hyväksi.
VII
Jonkun aikaa tämän jälkeen levisi kylälle tieto, että paikkakunnalle oli
muuttanut asumaan tuntematon, ylhäinen ja rikas herra. Hän varusti
asumuksensa tavattoman komeaksi ja alkoi elää siinä niin ylellisesti,
ettei sellaisesta oltu kuultukaan. Silloin kun tavallinen kansa painui
levolle siunaten itsensä, loisti herran asunto kirkkaasti valaistuna, ja
kuului sieltä hiljaiseen yöhön taukoamaton ilonpito, soitto ja tanssin
meno; hän näet kutsui alituisesti luokseen vieraita, läheltä ja kaukaa,
huvittaen heitä pelillä, juomisella, soitolla, tanssilla ja kaikenlaisella
mässäyksellä. Hurskaat ihmiset pudistivat päätänsä ja paheksuivat
tätä, mutta nuorten sydämessä heräsi väkevä halu saada ottaa osaa
tuohon niin hurmaavalta näyttävään iloon. Ja helposti siihen
osalliseksi pääsi, sillä herra oli tavattoman ystävällinen ja
vieraanvarainen; ei tarvinnut muuta kuin meni sinne ja tervetullut oli.
VIII
Tässä tilassa eläen hän aina kuuli jossakin vierellään tuon saman
äänen, joka näinä vuosina oli melkein joka päivä hänen seurassaan
tehnyt kaiken hyvän pilkan alaiseksi ja kavalasti osoittanut, kuinka
se, jota sanotaan "pahaksi", on yhtä välttämätön osa
maailmanmenossa kuin "hyväkin", ja kuinka tätä jälkimmäistä on
oikeastaan mahdoton oppia tuntemaan ja eroittamaan "pahasta",
ellei hanki itselleen täyttä kokemusta siitä, mitä tuo "paha" on. Tuo
ääni osasi selitellä turhiksi kaikki omantunnon vaivat ja tehdä
vähäpätöisiksi ja perusteettomiksi isän ja äidin sekä ystäväin huolet
ja nuhteet; sen ei tarvinnut kuiskutella kauan, ennenkuin väärä
ylpeys ja tyhmä uhma kohosi sydämeen ja sai hänet käden
pyyhkäisyllä karkoittamaan kaikki moitteet. Mutta kun yksinäisyys
jälleen tapasi hänet kurjimmassa himojen orjuudessa ja kituva
omatunto sai nostetuksi päätänsä synnin painavan paaden alta,
nousikin läsnä olevan, täydellisen turman tunne hänen sieluunsa
kuin synkistä synkin ukkospilvi, joka sulkee pois valon peittäen koko
maailman pimeyteen, jättämättä ainoatakaan toivon valjua sädettä.
Ja sillä syvimmän masennuksen hetkellä ei kuulunut mitään muuta
ääntä kuin tuo entinen, salaperäinen kuiskutus, joka kuin vilahtava
käärme kivenkolosta neuvoi pääsytien tästäkin asemasta, tien sinne,
jossa muka kaikki tuska lakkaa. Ja sillä hetkellä tuo nuori mies
kiemurteli vuoteellaan kuin se olisi ollut tulinen pinta, ja kolkutti
tuskassaan päätänsä vuoteensa patsaaseen.