Previous journal: | Next journal: |
---|---|
0187-2023-12-09.md | 0189-2023-12-11.md |
- DONE: Planning
- Create SDC for mux. Probably the main thing to fix is pins connected to LA. Is it possible that
mux_conf_clk
will confuse timing for downstream designs? A few cycles of test hardens to figure out what's going on. Fallback: Relax timing for anything related to my own designs. - Review what everyone has sent me, and review our own minutes from yesterday's call.
- Understand everyone's designs/requirements and document them, including:
- IO pads (inc. bidirectional needs and ordering)
- Clock source/frequency
- Reset needs
- Area/density
- Other timing
- Create a new branch (based on gf180-base or gf180-mux2?) and start adding everyone's resources inc. GDS and other hardened files. Don't bring in their UPWs, but rather integrate them into my UPW and mux.
- Place all macros that I have so far, and try full UPW harden.
- Timing/routing iteration -- the yucky part! Decide how to cut losses if it's not working out.
- RTL and GL tests for MY existing macros. Will require first cut of firmware to control the mux.
- Build flattened repo for Efabless and do initial
ztoa-team-group-caravel
submission/tapeout job. Hopefully we'll get to our first valid tapeout early this way, then update when we can. - Make sure I can separately harden everyone's macros from their source, and that UPW still hardens OK after that.
- Tests for others' designs.
- Update doco a bit. Review Tip 2312B.
- New update for Efabless repo.
- Finish updating/placing my other designs.
- Run UPW harden again.
- Another timing/routing loop.
- Documentation for GFMPW-1 'scoring'. Link to external doco for extra benefit (without needing to do more commits) and ask others to keep it updated.
- Final submission.
- Check for any missing/disconnected pins, and other yosys warnings.
- Formal verification -- fix if issues.
Bring in Uri's README, Diego's description, and link to respective docs/repos.- Search code for
TODOsand SMELLs Check for a deliberate misnamed wire in UPW, and see if it (a) still hardens anyway; and (b) whether we can find a warning somewhere about that misnamed wire... and from there check for any others!- It seems from Pawel's PR that you don't need to include all source files in
includes.rtl.caravel_user_project
... instead just the top wrapper. - Review mux 'reg' concern. Compare Tholin's
case
which also uses reg, but it should behave as a wire anyway because of sensitivity to*
and no<=
(i.e. no non-blocking assignment). - Note that when I hardened the mux with
wb_clk_i
as CLOCK_PORT it seemed to give a different layout maybe with more buffers, but I could be wrong: That param should only be used for STA? Nudge TRZFs slightly left or right (30~40um) to avoid vertical PDN collisions. Not essential, but might help improve stability.Irrelevant.External reset option for mux. Maybe make IO[5] a USER_INPUT by default inDONEuser_defines
so we can always use it as a reset unless otherwise configured by firmware.- Could change mux registers to be clocked on wb_clk_i and just gated on mux_conf_clk??
- Hold, Slack, Cap, Slew margins.
Flip Uri's macro- Inserting extra buffers in mux.
- Direct IOs (at least inputs) to Pawel's design. Focus on high-side IOs for shortest path. Given 13 needed, try: IO[37:25]
- Hold vios on TRZF1 reset line (LA[55])...
- The issue appears to be that a change in LA[55]=>trzf_rst will actually propagate too fast to the D of an internal DFF, ahead of how quickly wb_clk_i=>trzf_clk will.
- For now I might not need to be too concerned about hold vios on reset lines, because this is why I provide the alternate means of doing a reset.
- I've made it multi-cycle in
base_top_design_mux.sdc
for now:...but this alone made no difference to hold vios in the UPW hardening reports. Adding this toset_multicycle_path -setup 2 -through [get_ports {i_design_reset[0]}] set_multicycle_path -hold 1 -through [get_ports {i_design_reset[0]}]
base_user_project_wrapper.sdc
ANDsignoff.sdc
also makes no difference:set_multicycle_path -setup 2 -through [get_ports {la_data_in[55]}] set_multicycle_path -hold 1 -through [get_ports {la_data_in[55]}]
- NOTE: Do we also need to broaden this multi-cycle path spec to cover
trzf_rst
? - I tried changing the mux's config.json to have extra hold slack margin and use wb_clk_i as the clock port (for STA), but this gave worse results (going from -0.25 to nearly -2.00). Not sure which is more valid, in this case.
- Instead try moving the reset lines to low bits of 2nd LA bank (i.e. LA[39:32])?
- With these hold vios, keeping a design in reset should not be a problem... it might just be a problem that it doesn't cleanly come out of reset, if that reset is done by LA.
- Why are there antenna problems on la_data_in[23:8]? They're shorter than some other wires, surely!? Maybe they're not a problem because of heuristic diode insertion at ports...?
- Check mux
case
andreg
concern. Compare with Tholin's mux (also usingcase
). See also, this - Diego's reset input will be from an IO, not from mux reset logic.
- Include an option for EVERYONE to make
GPIO[5]
function as a reset via extra mux register. Reg can disable it if (a) nobody wants it; (b) it would otherwise be confused with theser_rx
function. - Obstruction layers can be used to block out stuff that's still coming.
- Matt might have time to try formal verification assertions of the mux.
- Pawel has provided IO mapping: https://github.com/embelon/gf180-wb-hyperram/blob/main/verilog/rtl/wrapped_wb_hyperram.v (this is from GFMPW0, but Pawel will do the same for GFMPW1?)
- Should some designs (esp. Pawel's) take their inputs directly and skip the mux, if they're close enough? Pawel's is a prime example.
- PR from Pawel to provide latest design: algofoogle/algofoogle-multi-caravel#1