Previous journal: | Next journal: |
---|---|
0188-2023-12-10.md | 0190-2024-01-17.md |
- Reharden all:
make top_design_mux && make top_raybox_zero_fsm && make urish_simon_says && make user_proj_cpu && make wrapped_wb_hyperram && make user_project_wrapper
- It takes about 45 minutes for the lot on L7, 48 on L5.
- There are (known) hold vios confined to LA-based reset lines.
./ammsum.sh
reports 651 hold vios: 163 worst -0.49 on LA55 (0:trzf1), 457 worst -0.81 on LA56 (1:trzf2), 5 worst -0.38 on LA59 (4:uri).
- Check LVS config
- Delete junk projects from
openlane/
- Put in Anton's vgasp and solos designs, or stubs at least: Will it fix OEB vios?
- Tidy up mux:
- Reduce
io_in
counts to match the needs of each design.- Includes changing the simple repeater wire assignments inside the mux.
- NOTE: It might be troublesome for designs that define all io_ins (e.g. Uri's)... because even if they're unused, will they still yield LVS errors? Hopefully less likely if
- Change pin packing. Try to work out a grid model?? No, that seems like a bad idea.
- Reduce
- Put in everyone's doco in README
Bring in top_solo_squash and top_vga_spi_rom...
-
Branch FROM gf180-uri:
git checkout -b gf180-anton34 gf180-uri
-
git submodule update --init --recursive
-
git submodule add [email protected]:algofoogle/solo_squash verilog/rtl/solo_squash
-
Just copy in the code from https://github.com/algofoogle/tt05-vga-spi-rom into
verilog/rtl/vga_spi_rom
-
It looks like it might be possible to create a specific pin placement "pad ring" using padringer.py; see
FP_PADFRAME_CFG
. See also:FP_CONTEXT_LEF
GPIO | DIR | FUNCTION | uo_out | uio_out | uio_in | ui_in |
---|---|---|---|---|---|---|
8 | OUT | hsync | 7 | |||
9 | OUT | vsync | 3 | |||
10 | OUT | r0 | 4 | |||
11 | OUT | r1 | 0 | |||
12 | OUT | g0 | 5 | |||
13 | OUT | g1 | 1 | |||
14 | OUT | b0 | 6 | |||
15 | OUT | b1 | 2 | |||
16 | OUT | spi_csb | 0 | - | ||
17 | OUT | spi_sclk | 3 | - | ||
18 | BIDIR | spi_IO[0] | 1 | 1 | ||
19 | IN | spi_in[1] | - | 2 | ||
20 | IN | spi_in[2] | - | 6 | ||
21 | IN | spi_in[3] | - | 7 | ||
22 | IN | vga_mode | 0 | |||
23 | IN | spi_rst_mode | 1 | |||
24 | IN | un/reg mode | 2 | |||
25 | IN | Test_in[0] | 5 | |||
26 | IN | Test_in[1] | 6 | |||
27 | IN | Test_in[2] | 7 | |||
28 | IN | (unused) | - | |||
29 | IN | (unused) | - | |||
30 | IN | (unused) | ||||
31 | IN | (unused) | ||||
32 | IN | (unused) | ||||
33 | IN | (unused) | ||||
34 | IN | (unused) | ||||
35 | IN | (unused) | ||||
36 | OUT | Test_out | 4 | - | ||
37 | BIDIR | SPI /RST | 5 | 5 |
Unused pins: ui_in[4:3]
Ref: Misnamed trzf2_clock_in
and trzf2_reset
. These are not declared anywhere. They should raise an error, because otherwise my design has no clock connected! This was discovered by looking at the GDS.
- I'm using
afmc-efabless
ongf180
branch - I'm proving that a
make user_project_wrapper
works OK first:23_12_11_15_42
- Then I will try to change TRZF2 to use the same misnamed wires as above, and reharden UPW:
23_12_11_15_54
- Assuming it succeeds, I will scour the run dir to look for the bad name:
trzf2_clock_in
-- if that doesn't find it, I will pick another more exotic PORT name, give it a bad wire, and then look for that port name in the run logs. - NOTE: LINTER MIGHT BE DISABLED! I didn't see any linter output. YEP, linter is disabled:
"RUN_LINTER": 0
this comes from the original efabless/caravel_user_project repo at tag gfmpw-1d. - After scouring the logs, looking for what warning these wires hopefully produced:
- Document where to find the warnings, and add to Tip 2312B checks
- Try running the harden again with linting turned on, and then check for any OTHER errors too.
Here is where warnings show up about trzf2_clock_in
:
$ fgrep -R trzf2_clock_in *
logs/synthesis/1-synthesis.log:/home/zerotoasic/anton/afmc-efabless/openlane/user_project_wrapper/../../verilog/rtl/user_project_wrapper.v:254: Warning: Identifier `\trzf2_clock_in' is implicitly declared.
logs/synthesis/1-synthesis.log:Warning: Wire user_project_wrapper.\trzf2_clock_in is used but has no driver.
logs/synthesis/1-synthesis.warnings:/home/zerotoasic/anton/afmc-efabless/openlane/user_project_wrapper/../../verilog/rtl/user_project_wrapper.v:254: Warning: Identifier `\trzf2_clock_in' is implicitly declared.
logs/synthesis/1-synthesis.warnings:Warning: Wire user_project_wrapper.\trzf2_clock_in is used but has no driver.
reports/synthesis/2-synthesis.chk.rpt:Warning: Wire user_project_wrapper.\trzf2_clock_in is used but has no driver.
reports/synthesis/1-synthesis.chk.rpt:Warning: Wire user_project_wrapper.\trzf2_clock_in is used but has no driver.
Try this:
- Go into
afmc-efabless
git remote -vv
-- verify which one is efabless (let's assume:ef
)git fetch ef
git fetch github
-- or whatevergit checkout gf180-anton34 && git pull
git checkout gf180 && git pull
- Find out what git fast-forward (and
--no-ff
) means - To check what a merge from gf180-anton34 into gf180 would be like: https://www.janbasktraining.com/community/devops/is-there-a-git-merge-dry-run-option
- I expect the biggest issue will be either the integration of submodules, including:
- Will the flattened submodules play nice with incoming gf180-anton34, or be seen as a conflict because of the paths coexisting?
- Will the
.gitmodules
file be a mess, leading to split brain?
- Besides that, maybe some merge conflicts
- I expect the biggest issue will be either the integration of submodules, including:
- If necessary, just start a NEW branch of efabless and repeat the flattening of submodules
- Logo
- Die layout graphic
- ~~Some of Pawel's WB lines are on the fringe of being too long as antennas (several ~200%).~~ FIXED. Moved it a little closer to WB.
- If we're having trouble with RESET hold vios, can we change its own special delay (or add one if missing), since it doesn't come directly from wb_rst_i anyway
- We could also mess with this line, as Pawel did:
...since it does seem extreme that the reset delay default is HALF (
set_input_delay [expr $::env(CLOCK_PERIOD) * 0.35 + 1] -clock [get_clocks {clk}] [get_ports {wb_rst_i}]
*0.5
) a clock period...?
- We could also mess with this line, as Pawel did:
- Check yesterday's TODOs.
- Get rid of
ena
lines in mux. - Reduce total number of IOs that top_vga_spi_rom needs -- since that is my own wrapper anyway, I can delete some unused pins, e.g. even name them correctly according to their function, get rid of OEBs that are not needed, and get rid of one-sided "uio"s.
- AFTERWARDS: Use all the links in the submitted README to see if documentation can be tidied up, e.g. to use Anton's more-detailed RBZ notes about SPI, etc.
- NOTE: If we had to, could we use
QUIT_ON_TIMING_VIOLATIONS
? - Had to make sure that, for any IOs which have
io_out
connected, there was at least one corresponding case where the respectiveio_oeb
could be pulled low to drive the output. Otherwise, the LVS check fails with an OEB error. One design was usingio_in[7:6]
and setting the correspondingio_oeb[7:6]
both to 1 (i.e. always inputs), but it also hadio_out[7:6]
also driven... LVS didn't like this, so I decided to leave allio_out[7:0]
disconnected completely in UPW, since none of our designs use them as outputs. - To make tests work we need to remove includes from these files:
src/rtl/debug_overlay.v src/rtl/lzc.v src/rtl/pov.v src/rtl/rbzero.v src/rtl/spi_registers.v src/rtl/wall_tracer.v
- There are still hold violations. I will try to commit and submit anyway, and get the precheck/tapeout jobs running, then try to fix (or suppress) the hold vios later. They're probably not vital... they relate to LA-based individual resets, and while they'd be nice to have, there is still the option of external reset via
io_in[5]
and system-widewb_rst_i
propagation. - To do this, I need to:
- Flatten all of the submodules into the repo as regular directories/files, and commit them.