Adds a second audience-specific config alongside the individual product
sheet, plus several fixes to the shared template and build.
datasheet-universities.yaml: written for a department buying for a cohort
rather than an individual. Leads on per-student cost with a worked class
example, carries testimonials from Murmann and Pretl, and answers the
procurement and academic-calendar questions an individual buyer never asks.
US institution list, education@tinytapeout.com as the contact.
Template gains optional quote band, footer contact block, and conditional
eyebrow / doc ref / photo caption so both sheets share one template. The
hero photo now derives its height from the text column instead of a fixed
44mm, so the two columns always end level whatever the copy length.
Header bars carry the chip-layout texture from the tt-datasheet-artwork
repo, renormalised from its native ~7% alpha and rebuilt as black traces:
they darken the bar, so contrast with the white type goes up rather than
down. Bar colour moves from #040371 to THEME_SKY_BLUE #0c66ab, where the
texture is actually legible; the config key is renamed navy -> brand to
match.
Font subset rebuilt from the full Archivo to include U+03A9 — page 2 has
used "< 500 Ω" since the first build and was silently falling back to a
system face. build.py now warns about any character the embedded font
cannot draw, and validates HTML in the config for unbalanced tags and
malformed hrefs, both of which had shipped unnoticed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The previous version of the boundary check was a quick heuristic where
we compared the bounding box of the design to that of the prBoundary layer.
Over time we came across some designs where this is insufficient.
The new check compares the bounding box to the correct project size
based on the .def template and verifies that there is a rectangle of
this exact size in the prBoundary layer at the top level.
The patch also abstracts parsing the .def template into a separate
function since we now use it in two different checks.
Sylvain: The techfile for GF180 is still a bit dodgy in some areas,
especially when reading from GDS and it's rejecting perfectly valid designs.
Wafer.space relies only on KLayout DRC for acceptance so we should do
too for the time being.
The flag enables a second power supply (VAPWR), not necessarily 3.3V (gf180's core is already 3v3), so "uses_3v3" no longer accurately describes its purpose.
Rename it across project_info, precheck, project and shuttle, and update the validation message accordingly.
The legacy "uses_3v3" key is still accepted when reading info.yaml, so existing project configs keep working.
Previous fix caused issue with resistors since that check must not
apply to anything in prec_res zone according to licon.9
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
* feat: add interactive document checker
This utility can be used to audit the documentation of the projects on the shuttle, marking them to be removed from the datasheet.
Usage:
`python3 tt/configure.py --doc-check`, inspect using `nano` controls, then answer prompt upon exiting `nano`.
The shuttle datasheet flow was updated to santise strings properly, and within the changes were some updates to the template that was used. This template is shared between the shuttle and individual projects, but the standalone version wasn't updated to be compatible. This commit rectifies that issue.
User strings were used as-is in certain parts since they were taken directly from `info.yaml`, but this could sometimes cause the datasheet build to fail since they've found a way (intentionally or not) to escape the content box that they were in.
This commit attempts to address this issue by:
- Sanitising user input using regex
- Using Typst's `str()` function instead of content boxes where possible
- Clarifying syntax in certain sections
Hopefully these changes will remove (or at least reduce) the chances of someone breaking the build.
* TT FPGA tool, prelim import
* config.ini manager, prelim
* bitstream uploads and FPGA config.ini management
Contributed by @psychogenic, with minor edits by @htfab
This is determined by looking at the `pdk` key in the config. If `pdk` doesn't exist, `id` will be used (assuming that the structure of the shuttle ID follows ttX where X=[sky, ihp, gf]). If any part fails, it will fall back to `openframe_sky130`.
The pinout can also be manually controlled by setting the `datasheet_config.pinout` key in the shuttle config, and that will be used verbatim. Note that `datasheet_config.pinout` is not checked, so it *must* be exact, otherwise it will cause the datasheet build to fail.