From 9eb4c7cefbe2e71a7df4386878b0b4cf51242dbe Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 8 Feb 2023 19:11:16 +0100 Subject: more PPU (level 3 design) --- assets/ppu-level-1.svg | 2 +- assets/ppu-level-2.svg | 2 +- assets/ppu-level-3.svg | 3 +++ docs/ppu.drawio | 2 +- docs/research.md | 73 +++++++++++++++++++++++++++++++++++--------------- 5 files changed, 58 insertions(+), 24 deletions(-) create mode 100644 assets/ppu-level-3.svg diff --git a/assets/ppu-level-1.svg b/assets/ppu-level-1.svg index b22cd70..e1ea30e 100644 --- a/assets/ppu-level-1.svg +++ b/assets/ppu-level-1.svg @@ -1,3 +1,3 @@ -
Basys3 FPGA
PPU
Basys3 FPGA...
Display output
(VGA)
Display output...
STM32F091RC
CPU
STM32F091RC...
VSYNC
VS...
HSYNC
HS...
VSYNC
VS...
ENABLE
ENABLE
HSYNC
HS...
RESET
RESET
G
G
VRAM-ADDR
VRAM-ADDR
B
B
VRAM-DATA
VRAM-DATA
R
R
VRAM-WEN
VRAM-WEN
Text is not SVG - cannot display
\ No newline at end of file +
Basys3 FPGA
PPU
Basys3 FPGA...
Display output
(VGA)
Display output...
STM32F091RC
CPU
STM32F091RC...
VSYNC
VSYNC
HSYNC
HSYNC
VSYNC
VSYNC
HSYNC
HSYNC
RESET
RESET
VRAM-ADDR
VRAM-ADDR
VRAM-DATA
VRAM-DATA
VRAM-WEN
VRAM-WEN
G
G
B
B
R
R
Text is not SVG - cannot display
\ No newline at end of file diff --git a/assets/ppu-level-2.svg b/assets/ppu-level-2.svg index ad80c42..8844a81 100644 --- a/assets/ppu-level-2.svg +++ b/assets/ppu-level-2.svg @@ -1,3 +1,3 @@ -
pipeline stage 1 (2 CLK)
pipeline s...
pipeline stage 2 (1 CLK)
pipeline s...
pipeline stage 2 (2 CLK)
pipeline s...
sprite info
sprite info
TMM
TMM
Background sprite info
Background sp...
sprite info
sprite info
TMM
TMM
Foreground sprite info
Foreground sp...
global palette index
global palette index
Compositor
Compositor
VGA signal
VGA signal
VGA signal generator
VGA signal ge...
rgb value
rgb value
PAL
PAL
Palette lookup
Palette lookup
BAM
BAM
BAX
BAX
Sprite render
Sprite render
pixel data
pixel data
FAM
FAM
Sprite render
Sprite render
TMM
TMM
Tilemap memory
Tilemap memory
BAM
BAM
Background attribute memory
Background attribute...
screen position
screen position
PPU RAM bus
PPU RAM bus
PPU RAM bus
PPU RAM bus
Text is not SVG - cannot display
\ No newline at end of file +
pipeline stage 1-2
pipeline s...
pipeline stage 5
pipeline s...
pipeline stage 3-4
pipeline s...
sprite info
sprite info
TMM
TMM
Background sprite info
Background sp...
sprite info
sprite info
TMM
TMM
Foreground sprite info
Foreground sp...
global palette index
global palette index
Compositor
Compositor
VGA signal
VGA signal
VGA signal generator
VGA signal ge...
rgb value
rgb value
PAL
PAL
Palette lookup
Palette lookup
BAM
BAM
BAX
BAX
Sprite render
Sprite render
pixel data
pixel data
FAM
FAM
Sprite render
Sprite render
TMM
TMM
Tilemap memory
Tilemap memory
BAM
BAM
Background attribute memory
Background attribute...
screen position
screen position
PPU RAM bus
PPU RAM bus
PPU RAM bus
PPU RAM bus
Text is not SVG - cannot display
\ No newline at end of file diff --git a/assets/ppu-level-3.svg b/assets/ppu-level-3.svg new file mode 100644 index 0000000..ed755f3 --- /dev/null +++ b/assets/ppu-level-3.svg @@ -0,0 +1,3 @@ + + +
VGA signal generator
VGA signal generator
CLK
CLK
R
R
G
G
B
B
R
R
G
G
B
B
X
X
Y
Y
VSYNC
VSYNC
HSYNC
HSYNC
100MHz
100MHz
CLK
CLK
Outputs
Outputs
R
R
G
G
B
B
VSYNC
VSYNC
HSYNC
HSYNC
Palette lookup
Palette lookup
CLK
CLK
CIDX
CIDX
WEN
WEN
ADDR
ADDR
DATA
DATA
R
R
G
G
B
B
RESET
RESET
Address decoder
Address decoder
WEN
WEN
ADDR
ADDR
BAX
BAX
PAL
PAL
FAM
FAM
BAM
BAM
TMM
TMM
Pipeline clock edge generator
Pipeline clock edge generator
S5
S5
S4
S4
S3
S3
S2
S2
S1
S1
CLK
CLK
RESET
RESET
Compositor
Compositor
CIDX
CIDX
BGEN
BGEN
CIDX
CIDX
FG00HIT
FG00HIT
FG01HIT
FG01HIT
FG7AHIT
FG7AHIT
( - )
( - )
FG80HIT
FG80HIT
FG7AEN
FG7AEN
FG01EN
FG01EN
FG00EN
FG00EN
( - )
( - )
FG80EN
FG80EN
Tilemap memory
Tilemap memory
ADDR
ADDR
DATA
DATA
DATA
DATA
WEN
WEN
CLK
CLK
Background attribute memory
Background attribute memory
ADDR
ADDR
DATA
DATA
DATA
DATA
WEN
WEN
CLK
CLK
Foreground sprite
Foreground sprite
CLK
CLK
CIDX
CIDX
FETCH
FETCH
WEN-FAM
WEN-FAM
ADDR-FAM
ADDR-FAM
DATA-FAM
DATA-FAM
ADDR-TMM
ADDR-TMM
DATA-TMM
DATA-TMM
X
X
Y
Y
HIT
HIT
OE
OE
Background sprite
Background sprite
CLK
CLK
CIDX
CIDX
WEN-BAX
WEN-BAX
ADDR-BAX
ADDR-BAX
DATA-BAX
DATA-BAX
ADDR-BAM
ADDR-BAM
DATA-BAM
DATA-BAM
X
X
Y
Y
OE
OE
ADDR-TMM
ADDR-TMM
DATA-TMM
DATA-TMM
Inputs
Inputs
RESET
RESET
WEN
WEN
ADDR
ADDR
DATA
DATA
Text is not SVG - cannot display
\ No newline at end of file diff --git a/docs/ppu.drawio b/docs/ppu.drawio index 8451dd9..337bc1c 100644 --- a/docs/ppu.drawio +++ b/docs/ppu.drawio @@ -1 +1 @@ -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 \ No newline at end of file +7Vtbd6I6FP41rnXOQ7sIKK2PeGl7ppfjUk9bH1EiMhOJC2LV+fUnSCKEUJCx4LDGvpTs7ASyv733l5sNrbvc3nvmavGMLYgaqmJtG1qvoaqgCZr0XyDZhZJb/SYU2J5jMaVIMHJ+QiZUmHTtWNAXFAnGiDgrUTjDrgtnRJCZnoc3otocI/GtK9OGkmA0M5EsfXMssmCjaCmR/AE69oK/GSisZmlyZSbwF6aFNzGR1m9oXQ9jEj4tt12IAuNxu4Tt7j6pPXyYB11yTIPW7h9C3sl4DcabCcIvel95uGK9fJhozQbcMf2dr1HZ3eDeaKg6op13ph59soOnweA/Nhyy4zby8Nq1YPAahWpsFg6Bo5U5C2o31CuobEGWiJYAffRpjePaT3AefPVVS4lkQ2ZHQch6ReYUogH2HeJgl8pmdNTQoxUf0CMOxespoTDFhOAlVTCRY6e2MFgFwcEnyubktqHqcBsTMfPeQ7yExNtRFV6rM6iZr2usuIkcB3BvWMSdhiuazFntQ9cRnvSBQVoAXlWCt+f4K2QGH43XZLUmMsJ/vd4bf18w/gRjTc3F+LYsiD8gWj2v/wW7x97wbglfpgPr2xW4lbCCFk1hrIg9ssA2dk3Uj6QdEc1I5wkHdtpj+B0SsmP52FwTLCIMXZ6r1Sy7+njtzWCGg2ospZueDUnGKNuhXjCyTJQ8iEzifIjJO83m+6aG5+1DgSussOMSP9bzIBDEArwlgt9siRm3kDp9CN8fYX8YyFHu8PhkvC4nk8n7Y7/tbI2fU6y/cYOe4A3+D0hmi193jQPP7TujyBIj4GEqcLELuezOCca11/lS70k1ivp7eI8mugNQctwnW/9k/8kyaYwxRuNnTb1T2mDYlcmie5kOfE4V7ev2TT5ZXCtalVMCzhcxhOWU4Vo8ZmfI9H1nJoImIpyfYCCa7jvjpo7BgPbAB0ljFbSfI7hlr+5wKzV5zuATcD0koEQxxkd7bVbWKuEnoB2ZYrbC+2OO0EqZNXBZsbwkJxKQmLPcJJwrNANrlZGR1OTkp53oKLST1FHhTNlMZL48os3WFzNl1Jp/Dp7PfUgaycgqlk1T3aIpxdrraPLSlQKOZhSSyIvEwz9gFyPsRcw5p6SZECXiKJnMlo5l7UMwLQ0neF9IsIkcrEipOnPed0qSbMpJ8pMcWdaUuiWh9nBBLQc1/eyogbbMY7/lQij163WZaLJW9Geeymqg0EIoW/3kiWyqQdXmedyBfvU7nxgFhUlQuG7xYm8br+ztDqXS3CiLmM7sRmq7kBsl1ZMbnkn1U7SrcFG9stmBF+bf0ojmi2jlsHWWmApUwh+Hffpa8sdtvfhDEYHWc/gjU70k/mj9ifyR4kZZU+R6uxHIZgRwinYVLirv5JS1Tqkpf+hV8kdbQmPYH/XHJaBR8qpR2G/92nVj8oS0WoJP2eisD8Fzs9SU4YFWMDdrFSRQIF9/eB0az1dGrzesYdwGd08qCtz0ewylRe7pp5rnjFy13pGbt7mTrV9S5MrnlPvI7Rlj4xK5mZFbLecCCY06RW6z3pGrFoxctYrIlU9XZBe5nD8XPX8GR3rgWc6fNeVaif/potsprdTqoqfT4Oak15R1dp0ThDn6lZxdZ12aSjLsW//lQrCZBKuURLDoBfXs703FX1uL287y23w4tFMucEvo2NRQq+MHerhLb055D0qmAZK7Lqlrg/LuvyqSBe5LcNDz7IBlQp7voeLOZUXH8HLe6FzwEPCodO0M5DtIZext1BKPEwGgxejnOyHtRj+C0vr/Aw==7VzZdqM4EP0aP3oOq5fH2J1lTpJJppNZXmWQsTqAGCFv/fUjjLBBwhhssEnHLzmmVGx1b+mWhJSOPvZW9wQEs2dsQ7ejKfaqo3/raNqwb7K/kWEdG8zhIDY4BNmxSd0Z3tBPyI0Kt86RDcOMI8XYpSjIGi3s+9CiGRsgBC+zblPsZu8aAAdKhjcLuLL1H2TTWWwdmMrO/gCRM0vurCq8xQOJMzeEM2DjZcqk33b0McGYxr+81Ri6UeySuMTn3e1p3T4YgT4tc4I5ng4XD8bi58vjYm3OXfLw46k70OPLLIA7528coAC6yIfRI9MoOpqidjX+DnSdBAb69k0UX3bkY+atj2bUc9mRyn4SPPdtGN1YYUfbN48ObBDONi2RX/gBqTXjLS6YQPcVh4gi7DMbicM6WkBCEUPkSWj3kG1HTzMCLnLyTrjh9gmmFHusAQfAQjRiohndUI4gDyq0M6Tg8byH2IOUrJnDKuO+3BEj4cUsxYnERqALKFpkiQU4P53txbf3e8WIPZem8MxRdSV7SojnxILcKw18ciJ/yl5y4r4LUUAcSAsulDji6TSEGR/2IxWYnWnDvSo87JfhoXll4aVZqPdrYqF0ofOy8A+y/l3zfa9vzRk+K3MOH+2uWYaEete40vDSNNyq6qk0lC7Ugs6wJ3eGYUAQjdiH/CmW6ccgeuOHmNAZdrAP3NudVeRgmmm7E54wDjgXf0BK17waA3OKs4zOcJjlBaEC+ze2OxS99sZnLwnDiIS+M+LH3wZFTIwxLgickVSIGwwLHE39KG4fS9rmKdOXu6735+cjiMKgDaLWqQtXHNSzkWfiYusjhz1y78osqfbjCZPw4CBhDKUkYapRhL0WWKccgogwYQ6DOA91UyjlBkLNX82f/Yif4Ox8TTI1xdcRsD6cDdUi5Ar7uywhlzPm+sY6kqh1yUahWb7tZUfUKcFVIZq8VTOyYUwOU1o3yNG6gbIf/kxAKwuEnO1XgSglEGXz3ez/agIhD/SPE4gLEyVPnzJVdCly5Fb/tXOjWS1Q1WpacMB/nxYkStLPnt0tWYDXJhgyf+8wgS0VDNU8SjCMpgQjAS8VPcfFE+BuXtRlKRqHzmav9+m6hBPkwChb/g3qTvmT4EyeOwXnGHtBNBuAycXJL1ZL52Q/+a9v2uEQqPaL/ufqJTCWj09dVQrJr8xpsyyny46Bm5UxrSd0lb1iGdNOche/kYgaOSxyz0rkEcqWy07tys6CAeKVnSnvwfnZKY80/76/iZBm47SofPh61K2ZkXKlrQgcEqcR9sxQV55L2nOfy88NHeKc4kAfEtDGWsdQLl3pf61iZ1BWTmpP3tNQ0iSKE2eyNVwRbD2CA3kC+/Xm6Qjk2vjB5RxwtuSDilDf6caBDyrF/ifXYIVBTXNtO2njYvwxD1onhLp2YSHsDb9SN1r+Q6bRqm60P5SoPbr5bN+t6xdFpSya7Rgl60LyHxj1Frs304cmfU+GaP9+MqI1oNdlV8y0VK+T5dZl9Vrwb4Zrpvyt6i35PMUgsmH7xq1q79JyLdc4AVrFewkABV9Ky/t1azkHvav8xsedDU+aitOaasV5TbUgSc+6aEL+znb36aqTBkQjp9gsWlFxYc0YVipOCr2rLpLY7gY6MHdbm/LIK4fbpjzi0oiLK0+/J8XsunT2cCfQ+2SVoyEk9qHlUgf8m6kce/Ks4jtyocfyUFM86GHO90smsCmuI8tJYFU7awbLteN1EqH8JEKvHTJt9CrpdLF7Q+kpD+wyq9YBpQRN5hu5bWm25qzFaixZcxcUyCEMLQKhH71osp1NDBp7VyrkESX4A46xi8kud6YsbQRTshvOYhFkxY+80Hy7by4PiixYmy15O7yTO9lwCuYurak6EtebmDl4KTl4ictx61trKE+cvb7+xQzfoy5WmczD0zguAkLxxgET9BP7FCT9oI0ItPhexyUMaUfe6ci3CrxvumJlZ/jOo1S4daA8RIa4bkJGSM8BSK8DoaJR1hWgVRaQavhsM68CPuxw9/8bYpHZ/RMM/fZ/7V1bU+LKFv41Vp3zwC7IFR4R8DJbHRWdGZ+mQCKigTAxjJdfvxNJELoX3QlJX+jkVO06Q+yGpL8vq9e9D/TO9O3YH8wfz72R4x5o9dHbgd490ML/WUb4f9GV9+WVpmUvL4z9yWh5qfF1oT/5cOKL9fjqYjJyXjYGBp7nBpP55sV7bzZz7oONawPf9143hz147uavzgdjB7vQvx+4+NWfk1HwGD+FWf+6fuJMxo/JLzfq8V+mg2RwfOHlcTDyXtcu6b0DveN7XrD81/St47jR4iXrspx3tOWvqxvznVmQZsLNg9V+rs1vDjv35kfj4/X6ynRrWmv5NX8H7iJ+4vhug/dkCca+t5gf6Icvge89Ox3P9fzwDzNvFv79EL+L+Mb+On7gvEEYDYbJN38tQ8gfx5s6gf8ejktmJUsZU0e348+va0DElx43MYjxj7Efr776a3nCf8QrBK/W9Xx40Xn/5vz2Hp+Oz7998+sPHzUdW6wfx+1osSbj2SCaPXZmjj8IwgVCFzFcw9nIib68Hq7a6+MkcPrzwX3019fwzQmvPQbT8Ga6jWilw79MZuMz5yF6pJpZ/7p2HT/n8mK0yJOQrG03vIPwauBF3+QOho576b1MgokXXb0PsXH8teFnyIChFwTeNBwwiL9nNSP+1fi2cbDJpEIpgEPNA8reeavrGi+n50/D6fD290W79btVa+BYds7+xWAL7z9AsIHegoeJ6yKXkqV0P0HEkJpORqPoR0AqbJJlEwOEB3WMLhoToN43xfIGSAVg9Npr692TV/P67OrptH/70Rue/qqtRAlVOOV83PSiKRFFwDLozKhqYMtwrS5RyUygE7VoZsKQmBgkxxUkgmQHjJCFIXRYIURBSOMq3TXppPvbpiYSr4rBU9g3uch6f/kkzHibhaXaFtgEiXbcIGIh2fcTACGCvM5FkO81IHzlNm45ySm3IZpqrGiKqxu/FGepvgU2QXLbxgC4qwAQabzjVqucYgLyOzETEw3cpfGjf3fRUZyqxhbsRJnvuOlxUqEgWGDo2Oo7o7HTjz96fvDojb3ZwO19XUUW6mvMmRc5wj8Be3KC4D2OKw0WgbcJZ7hi/vuveP7nh7v1D923jU/vB9v84PFr/eIt/HuHwLzYvAsG/tghYWXEWEVLQETKd9xBMPnrbNwGhE089dKbhPe8koWahdi6iWcr+YrlncazvhBu+/7gfW3YPBrwgnFgdaO708IoAy1aaWlhCqKFJhstzDLQIpG1dF5Ygnihy8YLqwy8sHFaDJ86i8fb4dEv7W/z7s9L17MO7VWYgjktzE1a6GY9Jy22/A6aEdAy17+OOr5h14nja4aec4K2OSH8x/IZC+W4XQaOW2k5zktTMvhwvNFCfqdJ5jg6vtGkUVbLOSHZBJhyvFkGjifeAPr+3hK0v5t59/ctv9OAf2erIG8QXwo2FGyVgoJaSgom4o47BS1GFNTg39lKQY2oe7ChYCIg1OagBnhFiJlQBXOQn3WSvG2K4wm4M4hpVPuLZymcljrghiAmXe0tnsbuGaeFpb3XmshOk+y8a7nSrFKSYMc8npPUqNfPTz6wpWGT5F5gOjucL09LcidTJVOSO1fgkh9jnuMuUZArAyxvm5AQYl6tf3TbZASSuXucvDCRg/k2gEobC1iXJjORg+cYfV8E80Us9csqc8z0EVxRyBm7Z4dle+TMNRt8RW9Vs2GISxAjxk5LXLORARIRGSBGVbORHSGuub+mJqt0Z5XsS3THc8jik5msKzZIIuFN3N5hldanCCyMpfy4eb64u/pz/f508+e5P7s4Nn9cAkX0aUVIcS4W1JcPuFj4dhYAMlIvB64TBE540fW852Q9drV8iFYIV3uIZvkQSSNzRwF8U1C6o0BOnJLsezaSB45LAP6w0y6LOh2lIIKaHTDbw4FmB2m3h0xPm1nBtIFVYFYFrOHbwc/ehbpEJVNBkqoRoPCx3e2Wza2TARUR5cJA2Vm3fdOuQJLJjQCoSoKFPFwaaHKV+aVr/bCigSwCvnS9HzIgIEKY67jCrnjvh+yAsBLcoKDF1dLrXr93o+7uWowFBe0jzDBqqJY6D7cDSJuTlqgWrPOWa/am7mCg0YeC8pZraL4KpQYKHZ+UchaVtwzLCVxwp1XwinPy2uhKpfTy2gW8ma3v3aMfs1tN/7dvGCejXuvKNmp4cmF7NPKdlxDt+si590aOj62SouktZNbk9vIWASEsXHePXmR7ZGkCoKD0BborKu2fInOBv/kC3g+OidruqbygiAh+Fu35KEB+pG+ehla8FiZOgEbPh211+qeRmZCaqFACYxFEJerX6wHp9lkFCZ/QGLzp4rLjqH1eQcLHHwJDgvtsDytIeO2wMCR4I8ib8woSrpqorlqHEmJ51boLClbSCi9zzYUOUBaWVgct0DmDtObh6JuBMcIN+8vJ3HEnsygD79717p8TBPkf8yOnu8bYZnvI467R8ZqPtFTP9siymlsw13GtpY/301Nqh1wRQbi1BSOCq/Z9vPFlyRFhZWzBt4dvkn282UPJEeEae9ZxJ1Efl+YlR4RvJYeGI4I3LCorInwgKNifXICCwzgeRbSwyl17IZkXQMMDUqXMFpLGXwbenr27BCnOG4A1PQUakDRAbYNZRR5O3o43nUcmdsnNfjs9n7mgB8fC8TIARqVeEiknGZB5Q1ARInlwl9vhMZMsEqUw4moG24BiVb6SyQygMX6RWs7l94WpXY2O55fztx/u7+ZRLY9DP9vjZjYCAK8+uBEwc3Xauy8Neal3Xxouz23iUdCj43r95LRs2re9DTBBRpGJ+95DYBoVMJKZRRb0AtntCic6TlwVFAt/n/4XfqyF//1//5CK9heuWHH14FtAAttxs9qUUuDENRpp794Fm5XShNpCXJQoC1ceoz1AeRM1fQtlIRIfZ2ekQVWoiNWXNNDgqFDhXAOE+2tYqkM8kEDc5UYWV3Xmd4avPoTHGCJ9qHpnhGo/TdXOXCIGSOj18/E6809ehnXJPTrgdfmO/ox9n420eIHPnQykJpsnnj9Z8NqjUoAi8UpKMqh42bzPwIq/GW0TgR3JWKf0lWB9JiNMpz1qbrIjnYjq9Tqd4AXS5KDTlgPkt7IJGW9SD6U1ck4oug8KjIYMyTUmUmuQttt1IX1QoFUB+rTfTFxnGuqcWn3qTL34N0rQ7JrMGikKa2AIgV42SjebyAsUY0sGBgn3yTDqhSrGusyLSfqmn+wgwnOg1G5XW9B7xBckPJlQ6W5HBWHEKioAY1SyCoCCMOKapwYkJYnXhnlWnsOrAvQQGdw/jz9JE/1gEPiT4eLzJJhKOf4ikcTKMW71lVA5zgCUCOUYCO6rrxxnwEQC5RiI9JdQOc7+HvEFCTcyy6ccZ8eIq3Js4VZm+ZTj7BixUo6HT53F4+3w6Jf2t3n356XrWYf2qlp2HyIbW/Xz9TgG+JRA1HmvomJJgoiwqBjMHRnO1DSQjl56CzesGtBZ9KuLhcs9fGs68nxnZVm9zP1JZFblsaZS202w2cXRmiIzJ1sxL18YS7Z75QVKhGsHOvxUpXrrvJgkf0XC3Fwx0oCSpt5N56R6k2hn1PJECWg8tmUvxzcauwjJv0OnH2B9ijgmD14f3CkQ2ps1Np2wWZd72bksmhVV+Cefw/eD61uR37PCRr79WofjzhVUQqsE4NvbPYeMteA30lp4zNYGj8x/Spz97fiO2JNbdnQyUbKro3zAwstdPmUOG7AklznievXBmQO7l/wyFjJQMKOIPpKwiYTLE4V7HZGZIAkzgdaedxUkMumSxu7eZ8ayQxetnwAHm7HpdiFRjoGxu1eMD11xK/V7r2wSRdzRlfArv0dlXfgSpy3iShperkc/weVIjhUTHf1MdK+0JYHI+OS9Tl2TlXlCkjLGNroqQxEXGl3VYiz4hOXgdcGWZSNvtYqufjFHkugqeJNVdDUTUCJygxRvZp0XEs7BVfB2cd/Wlj0iZ9Ru26pkto2goGYRQTvwtvHIcxSzY3PGszSOPyJPJFG88dqTT/95hYxsWwCug376ziugUgDFKlwH226p8zd4S/xV80we7jB4beCuAbX9PTM7XbiOTBTxfjL4/nD7LhY5Sofr8mLFB5uiXe6FCRlW4Tp4GUoVriMzQRZmlipclxcSEZpkA9f5VY5/FOTvYVWvB9+evDokz5Qv+Fm26JCqp3yRiSKpDpnwtmQpX3mx4oJNkkivTMyV2OaBHnONqSo65mokbUlWGw8l6IpN0DnERJNUf7XJkzTQo5JHk4U8yDm61Ig9OiHpDcqWPHpZyUPMi9578pg6h1p3XaaG4v+YRdDn5sFqP9fmN4ede/Oj8fF6fWW6tYadkj6Jx0U0fSyk80HDorV8FtEqQVct0wwmTzMleSxJNi4LPYjappEHmaBxIU+rDOSBjpogRfVFc8dA0g416r6FTmhxUHoSx4ky3CF65KmCJ6m0EU4eVI5QU1CRCYbBQfAYqtnqxNgBnTySdIcydIQ8No08yATD5EEe1cwtWOVppSRP4vcSTR4LTX5v0lQe9ASTFg/yyGRusfMSApUZxDbjwsmDlgNQjS20O5vFgzyqGVvEds908sgieVCdp5XR2NK5SB7VjC1ij2M6eXRJyKNnjE+gExC3IhvymKpZW0SBQtd5JHXz6Fklj8mFPKpZW0SBQiePpJKHGp9AJ5gNHuTRykCeRKBQfYSSVDKjLj8zq49Qr3PwEZqqWepEeULlTksS7qBnkzZo3EEm6A0e3DEU485rr613T17N67Orp9P+7UdvePprlcm4zh3YHVR4UD1XslXiN1AbnWS/pbb3lwwc1XxcpDWnG5qSiF0bLeemhYTRCRoPL4WpmpcCfrHTGpqWJC4u287oXEcn6DwMTUs1QxMmT9pDXzRJEuEwyWNklDw2D+6opu+BlEhtZ7LxUQAtrpAgHHqI5PJG41lfHMhudCAH79HiO+h45KAiRhxU7cwqmINp86G4cRDxazU5cZCmgInhYCmUd8iyEstBxDEf61fMOUjT48RwULU4N6yeAb4XsRxEEshbnDhIC1qJ4aBqhijMQSCxvXfe6rrGy+n503A6vP190W79bq3SwZiTEG3M2agzYiHW3Y6a8bMxXo9znJiSMNGGlSEhbNCmJqEkkVNby2ZMoOM3u+xi45t5RnOp+rFVc7SQ9l16QF8OVlK2SfoELplEtqYYdUCRZgD2BTFTVjR5GIs0LF8263iNR36trVpUMXWiErjdylJTlD9RqUWThPnGc6lZslVzDqZOwYTJKYngRKtI6CmYyASrTiGbmW+8waOLgK2a1zBn5E0ObiJikBp3E5FZbie91ESeBtJEa8eAk66gRl9otGqXFBo4Lwvv8H46my+WaHM4/6PAkz7go0R2Ov9jxZVM539wBQ44QfW61++pc0ZZXmDeNkFZed9wjIro1AZjlPpwiZxPn1kQoT5GYFWKOFOCmAq6eaiEMrwlM4F/D0FiwifSjLMCgU9/X2KuHtJzs8KEyaEQ4Uff84J1HTN8zsdzb+REI/4D \ No newline at end of file diff --git a/docs/research.md b/docs/research.md index acb1c24..9fe4ab5 100644 --- a/docs/research.md +++ b/docs/research.md @@ -170,6 +170,8 @@ Notable differences: ### Hardware design schematics +#### Top (level 1) + ![PPU top-level design](../assets/ppu-level-1.svg) Important notes: @@ -182,46 +184,75 @@ Important notes: physical buttons on the FPGA. - The STM32 uses direct memory access to control the PPU. +#### Level 2 + ![PPU level 2 design (data flows from top to bottom)](../assets/ppu-level-2.svg) Important notes: -- The pixel fetch logic is pipelined in 3 stages: - 1. - (Foreground sprite info) calculate if foreground sprite exists at current pixel using FAM register +- The pixel fetch logic is pipelined in 5 stages: + 1. - (Foreground sprite info) calculate if foreground sprite exists at + current pixel using FAM register - (Background sprite info) get background sprite info from BAM register - 2. - (Sprite render) calculate pixel to read from TMM based on sprite info - 3. - (Compositor) get pixel with 'highest' priority (pick first foreground + 3. - (Sprite render) calculate pixel to read from TMM based on sprite info + 5. - (Compositor) get pixel with 'highest' priority (pick first foreground sprite with non-transparent color at current pixel in order, fallback to background) - (Palette lookup) lookup palette color using palette register - (VGA signal generator) output real color to VGA signal generator +- The pipeline stages with two clock cycles contain an address set and memory + read step. - The pipeline takes 5 clock ticks in total. About 18 are available during each pixel. For optimal display compatibility, the output color signal should be stable before 50% of the pixel clock pulse width (9 clock ticks). -- RAM regions mentioned that don't have a block right of the PPU RAM bus in - this graphic, are stored in and exposed by the component that mentions the - memory region. -- Each foreground sprite render component holds its own sprite data copy from - the RAM in it's own cache memory. The cache updates are fetched during the - VBLANK time between each frame. - Since the "sprite info" and "sprite render" steps are fundamentally different for the foreground and background layer, these components will be combined into one for each layer respectively. They are separated in the above diagram for pipeline stage illustration. -- The pipeline stages with two clock cycles contain an address set and memory - read step. -- The palette lookup component has separate memory that is connected to the PPU - RAM bus for read/write access. +- The BAX, FAM, and PAL registers are implemented in the component that + directly accesses them, but are exposed to the PPU RAM bus for writing. +- Each foreground sprite render component holds its own sprite data copy from + the RAM in it's own cache memory. The cache updates are fetched during the + VBLANK time between each frame. + +#### Level 3 + +This diagram has several flaws, but a significant amount of time has already +been spent on these, so they are highlighted here instead of being fixed. + +![PPU level 3 design](../assets/ppu-level-3.svg) + +Flaws: + +- Pipeline stages 1-4 aren't properly connected in this diagram, see level 2 + notes for proper functionality +- The global RESET input resets all PPU RAM, but isn't connected to all RAM + ports +- All DATA inputs on the same line as an ADDR output are connections to a + memory component. Not all of these are connected in the diagram, though they + should be. + +Important notes: + +- The background sprite and foreground sprite component internally share some + components for coordinate transformations +- The foreground sprite component is only shown once here, but is cloned for + each foreground sprite the PPU allows. +- The CIDX lines between the sprite and compositor components is shared by all + sprite components, and is such tri-state. A single sprite component outputs a + CIDX signal based on the \*EN signal from the compositor. +- All DATA and ADDR lines are shared between all RAM ports. WEN inputs are + controlled by the address decoder. ### Registers -|Address range |Alias|Description| -|-----------------|-----|-----------| -|`0x0000`-`0x0000`|TMM |[tilemap memory][TMM]| -|`0x0000`-`0x0000`|BAM |[background attribute memory][BAM]| -|`0x0000`-`0x0000`|FAM |[foreground attribute memory][FAM]| -|`0x0000`-`0x0000`|PAL |[palettes][PAL]| -|`0x0000`-`0x0000`|BAX |[background auxiliary memory][BAX]| +|Address|Size (bytes)|Alias|Description| +|-|-|-|-| +|`0x00000`|`0x00000`|TMM |[tilemap memory][TMM]| +|`0x00000`|`0x00000`|BAM |[background attribute memory][BAM]| +|`0x00000`|`0x00000`|FAM |[foreground attribute memory][FAM]| +|`0x00000`|`0x00000`|PAL |[palettes][PAL]| +|`0x00000`|`0x00000`|BAX |[background auxiliary memory][BAX]| [TMM]: #tilemap-memory #### Tilemap memory -- cgit v1.2.3