
This design drives a 640×480 VGA output and displays a bouncing “Zero to ASIC” logo. It supports a tiled mode and an animated color gradient. Optionally, a Gamepad Pmod can control motion.

Connect to a VGA monitor. Set the following inputs to configure the design:
tile (ui_in[0]) to repeat the logo and tile it across the screen,solid_color (ui_in[1]) to use a solid color instead of an animated gradient.If you have a Gamepad Pmod connected, you can also use the following controls:
We extend LibreLane’s Classic flow by inserting a custom ODB Python step before global placement. This step can generate placement blockages from a bitmap to “shape” placement density and create chip art.
Odb.ApplyArt just before OpenROAD.GlobalPlacementSkipIOBuild the custom LibreLane image (adds the plugin + Pillow):
docker build -t my-librelane:mock -f docker/librelane-mock/Dockerfile .Select the image and choose an input image (PNG/JPG):
export LIBRELANE_IMAGE_OVERRIDE=my-librelane:mockexport TT_ART_IMAGE="$PWD/art/zero-to-asic-logo.png"Optional knobs:
TT_ART_GRID (int, default 40): grid columns; rows follow image aspectTT_ART_THRESHOLD (0..255, default 128): luminance thresholdTT_ART_INVERT (1/true/yes): invert selectionTT_ART_AREA_PCT (0..100, default 20): scale art area within the coreRun harden with the art step enabled:
./tt/tt_tool.py --harden --with-artInspect results:
runs/wokwi/<NN>-odb-applyart/odb-applyart.logruns/wokwi/<NN>-odb-applyart/art_preview.pngNotes:
art_config.json in the project root and the step reads it automatically.TT_ART_AREA_PCT)| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | tile | R1 | |
| 1 | solid_color | G1 | |
| 2 | B1 | ||
| 3 | VSync | ||
| 4 | gamepad_latch | R0 | |
| 5 | gamepad_clk | G0 | |
| 6 | gamepad_data | B0 | |
| 7 | HSync |