Skip to content

Latest commit

 

History

History
156 lines (130 loc) · 7.21 KB

0145-2023-09-08.md

File metadata and controls

156 lines (130 loc) · 7.21 KB

8 Sep 2023

Previous journal: Next journal:
0144-2023-09-06.md 0146-2023-09-26.md

Notes during TT04 final submission

Admin

  • 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)
        
    • 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.

Last chance -- 3:30am

  • 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?

Doco

  • Screenshot of textures in tt04-raybox-zero README
  • Updated screenshot in raybox-zero README?
  • Photo of device running on FPGA?

IMPORTANT and time-consuming stuff

  • 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

Done

  • 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

Cancelled

  • SPI2 stuff:
    • Mux between raw outputs and registered outputs: Not needed if we have a direct IO to control it.
    • Ceiling leak.

TODO

  • Pull notes from iPhone
  • cocotb and other tests
  • Look for @@@, SMELLs, TODOs, 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

After submission

  • 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.

Notes

  • readmem and UTF-16