Previous journal: | Next journal: |
---|---|
0144-2023-09-06.md | 0146-2023-09-26.md |
- DONE: Wait for GDS to build
- DONE: When successful, record how long it took:
- It took about 36 minutes in total (i.e. I pushed it 36 minutes ago and it just finished all GHAs).
- DONE: buy initial submission
- After the purchase, it seems it gives a balance of 8 tiles that I then use (again?) to 'Submit Project' (#136).
- DONE: Tag tt04-raybox-zero as 0.3:
git tag -m "Use raybox-zero 0.3 with basic generated textures in TT04 4x2 tiles" -a 0.3 git push git push --tags
- DONE: Build GDS locally (or download logs from GHA) to check for:
- GDS_logs from GHA is 742MB (compressed to ~100MB)
- Util: 43.25% - Wires: ~181mm - Cells: 6621
- Timing results - No setup, hold, slew, or cap violations.
- Linter warnings - Nothing to worry about
- Fanout:
Warning: : There are max fanout violations in the design at the typical corner. Please refer to '../work/runs/wokwi/reports/signoff/31-rcx_sta.checks.rpt'.
- Fanout violations are all in clock tree. 25 in total. Worst 10:
Pin Limit Fanout Slack --------------------------------------------------------- clkbuf_leaf_32_clk/X 10 22 -12 (VIOLATED) clkbuf_leaf_34_clk/X 10 21 -11 (VIOLATED) clkbuf_leaf_16_clk/X 10 20 -10 (VIOLATED) clkbuf_leaf_33_clk/X 10 20 -10 (VIOLATED) clkbuf_leaf_35_clk/X 10 20 -10 (VIOLATED) clkbuf_leaf_15_clk/X 10 19 -9 (VIOLATED) clkbuf_leaf_22_clk/X 10 19 -9 (VIOLATED) clkbuf_leaf_31_clk/X 10 19 -9 (VIOLATED) clkbuf_leaf_37_clk/X 10 18 -8 (VIOLATED) clkbuf_leaf_29_clk/X 10 17 -7 (VIOLATED)
- Fanout violations are all in clock tree. 25 in total. Worst 10:
- Antennas
- Worst antenna violator out of 3 is 768.67:400.00; other 2 are 455:400 or less.
- Maybe if we fiddle with
- Get Matt or Uri to help with pushing thru the submission via Submit Project.
- spi_device: Because I'm adding it so late, should it have its own interface, so it doesn't conflict with POV?
- Need to put in a reset for
pov.spi_done
?? - There's a risk that without
top.v
being tested, I can't be sure I haven't made a silly mistake. - Try Q11.11
- Bigger map (32x32)?
- Get rid of (or add more to)
RESET_TO_KNOWN
- Check other areas that might need reset logic
- See if we can fix antennas and fanout issues:
- Try fiddling with target density
- Try increasing clock speed a bit (35MHz target could be good for 800x600, etc?)
- File to check is:
wokwi\logs\signoff\40-antenna.log
- Texture overflow could be because we go 1 pixel more than mirror?
- Screenshot of textures in tt04-raybox-zero README
- Updated screenshot in raybox-zero README?
- Photo of device running on FPGA?
- Dither can be turned on/off via one of the primary inputs.
- Use all the other IO pins - inc. debug stuff
- VGA timing control parameters
- "Other player" register pair -- SPI to set it, FSM logic to detect it, colour control
- Basic 1-bit sprite with colour register
- Test on FPGA: Works with DE0-Nano and PicoDeo.
- Buy initial submission!
- Different wall IDs - also requires:
- Map generator to suit, but that can just be a separate bit of logic for that bit plane.
- Different texture generators.
- Debug overlay (more important than map overlay) -- gets its own pin to force it on
- Simple demo stuff (assert an input to do a rolling increment of playerX or Y)
- Frame start signal
- Visible line/frame end signal (blanking signals)
- Wall texture underflow clamp
- Texture overflow (upper edge) clamping
- Floor 'leak' option (though not accessible yet)
- Registered outputs
- SPI module - lots of work, but enables other things
- SPI2 stuff:
- Mux between raw outputs and registered outputs: Not needed if we have a direct IO to control it.
- Ceiling leak.
- Pull notes from iPhone
- cocotb and other tests
- Look for
@@@
,SMELL
s,TODO
s, etc. - Colour bar at the bottom (or side) showing all 64 colours.
- Does it make sense to change view parameters during trace? Not sure, given how the FSM works
- Better (general) SPI controller
- SPI control over various advanced things:
- "Other player" register that can just occupy a map cell, and it can be a different pattern
- Dithering
- "Load now" override instead of ready at end of frame
- Floor/ceiling colour:
- One mode could be LFSR with colour, parameters/taps, and offset
- Another could be "gradient" -- configurable colour bands: 20 total (320 divided by slices 16 wide): 20x6 = 120b, or 240b if different floor/ceiling bands.
- 'Ambient occlusion': Shaded region using cross-hatch of a darker colour, for a small number of pixels before/after line rendering.
- Different texture modes
- Debug stuff
- Overlays on/off
- SOME access to change map, e.g. some rows are RAM, if not all
- VGA timing alts: Good for testing different chip speeds
- Metastability stuff?
- Debug signals in case the chip doesn't work
- QSPI read background from external memory at 320x480 resolution
- Texture ideas:
- "Panels"
- Bricks or basket weave - esp. Mario style
- Fractal
- The map itself is a texture... but this is a problem for dual access.
- Try and get minimal blue wall texture in as a ROM -- Look at Uri's ID#0 ROM embedding, for example.
- It could be just 2 bits for blue, 2 bits for green, and then red is generated (or swapped) for alt colour.
- Another way of thinking about it:
- Black
- 3 'colour' levels (blues)
- 2 grey levels
- That's only 6 colours in total, so it only needs 3 bits per pixel (and 2 colours spare; white for one?): 64x64x3 = 12kbit. Reduce to 32x32x4 (ugly) and it would be 4kbit.
- Colour levels can use logic to make them blue, red, or green... or even cyan, magenta, yellow too.
- Check antennas and other reports e.g. fanout.
- Check possible saturation check error in reciprocal
- Doco and images
- PicoDeo and raybox-game.py release
- tt04-solo-squash with SPI
- Design PCB, esp. VGA DAC. Offer it to Matt as a PMOD.
- readmem and UTF-16