Previous journal: | Next journal: |
---|---|
0204-2024-05-25.md | 0206-2024-06-26.md |
Assume raybox-zero versions:
- 1.0: TT04
- 1.3: EW (CI2311)
- 1.4: GFMPW-1
- 1.5: Upcoming TT07 version with conditional compilation added on top of 1.4
- Tried fixing GHA test artefact storage
- Updated
src/raybox-zero
to@gf180-with-tests
- Wired up
project.v
with newrbzero
ports - Changed
uo_out
s to match Tiny VGA PMOD and updatedtb.v
to suit. - For now there is no texture ROM support, and
i_gen_tex
is hard-coded to 1. Some other features aren't yet mapped to pins e.g. map overlay, trace overlay (not working; needs an`ifdef
fix).
source ./tt07-env.sh # Should load tt07 venv too.
./tt/tt_tool.py --create-user-config
time ./tt/tt_tool.py --harden # It took only 5 minutes! How is that possible?
./tt/tt_tool.py --print-warnings
./tt/tt_tool.py --print-stats
Utilisation (%) | Wire length (um) |
---|---|
28.94 | 273033 |
./tt/tt_tool.py --create-svg
rsvg-convert --unlimited gds_render.svg -s <(echo 'text{display:none;}') -o gds_render_png24.png --no-keep-image-data
xdg-open gds_render_png24.png
cd test
cp ../runs/wokwi/results/final/verilog/gl/tt_um_algofoogle_raybox_zero.v gate_level_netlist.v
make clean clean_frames && make -B GATES=yes
Check:
runs/wokwi/reports/signoff/30-sta-rcx_nom/multi_corner_sta.checks.rpt
runs/wokwi/reports/signoff/39-antenna_violators.rpt
- Finish:
- Do final GL sim
- PR for 1.5-dev
- Doco
- Do actual submission
- Test on FPGA
- SPI2 can turn on trace debug & map overlay
- Option to flip the display (for clockwise rotation or mirroring)
- Optional VGA output switching inc. to match TT04, my boards, and Matt's clock version
- Anything else that is fun to put on-screen?
- Why not a basic sprite?
# Using OpenLane's open_design.py, for example:
RUN=$OPENLANE_ROOT/designs/spm/runs/RUN_2023.11.29_01.00.58
python3 $OPENLANE_ROOT/scripts/klayout/open_design.py \
--input-lef $RUN/tmp/merged.nom.lef \
--lyt $PDK_ROOT/sky130A/libs.tech/klayout/tech/sky130A.lyt \
--lyp $PDK_ROOT/sky130A/libs.tech/klayout/tech/sky130A.lyp \
--lym $PDK_ROOT/sky130A/libs.tech/klayout/tech/sky130A.map \
$RUN/results/final/def/spm.def
# Using OpenLane's open_design.py, for example:
RUN=/home/anton/projects/tt07-raybox-zero/runs/wokwi
python3 $OPENLANE_ROOT/scripts/klayout/open_design.py \
--input-lef $RUN/tmp/merged.nom.lef \
--lyt $PDK_ROOT/sky130A/libs.tech/klayout/tech/sky130A.lyt \
--lyp $PDK_ROOT/sky130A/libs.tech/klayout/tech/sky130A.lyp \
--lym $PDK_ROOT/sky130A/libs.tech/klayout/tech/sky130A.map \
$RUN/results/final/def/tt_um_algofoogle_raybox_zero.def
- Harden digital block again. See how big it is now.
- Work out where I was up to with dacboost and see if I can lay it out.
- Extract dacboost (and full design) and simulate: I recall I was writing notes about doing this in a previous journal or my phone's 'Notes'? See how much current it uses.
- Do check for those old notes, some might've been important, e.g. making sure line debug bits are not full brightness (or gating) during full pass-thru mode!
- Try some pass gates to switch between buffered/not
- Put buffers on the INPUTS to the DACs -- standard cells or just big double-inverters?
Change config.json
to initially use relative sizing, to see how much area we need. Note that max is about 160x220um.
source ./tt07-env.sh # Sets some vars but also loads venv.
source ./openlane/controller/env.sh # WHAT I USED LAST TIME.
#NOTE: $PDK_ROOT now has this from 2024-04-19:
# /home/anton/antonOL/pdk
# ...and that contains: sky130A -> volare/sky130/versions/cd1748bb197f9b7af62a54507de6624e30363943/sky130A
time make harden
Harden takes about 2 minutes with 4 cores. Succeeds with no warnings. It wants 136x136um; that's doable. Could probably make it smaller, though. It's currently configured with "FP_CORE_UTIL": 50
.
make update_files
PL_TARGET_DENSITY: Can make logic densely packed, despite large area. FP_CORE_UTIL: Sizes core relative to amount of logic.
These work OK and get an area of 117x117um:
"FP_CORE_UTIL": 75,
"PL_TARGET_DENSITY": 0.85,
Let's try a different aspect:
"FP_SIZING": "absolute",
"DIE_AREA": "0 0 150 95",
"FP_CORE_UTIL": 80,
"PL_TARGET_DENSITY": 0.86,
It fits, but takes 6mins now and gets fanouts (6/4).
cd mag
mkdir OLD
git mv sky130_fd_sc_hd__* OLD/
git mv sky130_ef_sc_hd__* OLD/
rm controller.gds
rm controller.mag
Stuff to document from GFMPW-1 etc:
- https://github.com/algofoogle/journal/blob/master/0178-2023-11-28.md
- https://github.com/algofoogle/journal/blob/master/0179-2023-11-30.md
- https://github.com/algofoogle/journal/blob/master/0181-2023-12-02.md
- https://github.com/algofoogle/journal/blob/master/0169-2023-10-30.md
- https://github.com/algofoogle/journal/blob/master/0168-2023-10-28.md
- https://github.com/algofoogle/raybox-zero-caravel/blob/ew/verilog/dv/rbz_basic/rbz_basic.c
-
mkdir ~/.vimdata/config
-
Create ~/.vimdata/config/backunswap.vimrc:
" https://vi.stackexchange.com/a/21709: let &directory = expand('~/.vimdata/swap//') set backup let &backupdir = expand('~/.vimdata/backup//') set undofile let &undodir = expand('~/.vimdata/undo//') if !isdirectory(&undodir) | call mkdir(&undodir, "p") | endif if !isdirectory(&backupdir) | call mkdir(&backupdir, "p") | endif if !isdirectory(&directory) | call mkdir(&directory, "p") | endif
-
Include it in
~/.vimrc
:" https://vi.stackexchange.com/a/21709: source ~/.vimdata/config/backunswap.vimrc
Vim junk files are now all confined to subdirs in ~/.vimdata/
At least I still have raybox-zero.
Here's where I'm up to:
maybe
branch has lots of mucking around with current steering.
xschem/bdac.sch
is the best current steering DAC I was able to come up with that didn't use too much area and probably is OK with current on a resistor.
Miller capacitance?
Maybe I should try LVT/ZVT FETs.
- Find out how tt08-analog-template is different from tt06 -- esp. the template DEF
- How about matt's analog instructions? I know the Makefile has been updated
VGA output mapping:
uo_out | raybox-zero | PMOD | VGA J1 | VGA J2 |
---|---|---|---|---|
OUT0 | hsync_n |
1 | 7 | |
OUT1 | vsync_n |
2 | 8 | |
OUT2 | red[0] |
3 | 3 | |
OUT3 | red[1] |
4 | 4 | |
GND | GND | 5 | 5 | |
VCC3V3 | VCC3V3 | 6 | 6 | |
OUT4 | green[0] |
7 | 3 | |
OUT5 | green[1] |
8 | 4 | |
OUT6 | blue[0] |
9 | 9 | |
OUT7 | blue[1] |
10 | 10 | |
GND | GND | 11 | ||
VCC3V3 | VCC3V3 | 12 |
Average MicroPython POV transmit time is 53ms when using 25.179MHz (core clock 101MHz)
At 31.5MHz (core clock 126MHz) this is reduced to 43us
The extra overhead of converting floating point POVs and sending them pieces appears to be about 3ms