First clean Vivado build — synthesis, implementation, bitstream

Target: Digilent Nexys A7-100T · xc7a100tcsg324-1 · USE_ETH=1
Toolchain: Vivado 2025.2

Context

After several RTL iterations — Ethernet ingress, MoldUDP64 unwrap, streaming ITCH parser, dual-sided order book — the design finally closed timing and produced a bitstream. This is the first end-to-end Vivado run for the live UDP path (not just the cocotb core).

Design runs

synth_1 and impl_1 both completed with green checkmarks. Post-route timing is clean:

MetricValue
WNS+1.552 ns
TNS0.000 ns
WHS+0.033 ns
THS0.000 ns
Failed routes0
Total power (est.)0.117 W

Project summary

Dashboard at a glance: timing closed, light utilization on the 100T fabric.

ResourceUtilization
I/O20%
BUFG6%
LUT2%
FF1%
BRAM1%
LUTRAM1%

Synthesized design

Package view confirms RMII Ethernet pins (eth_mdc, eth_mdio, eth_rxd, eth_crs_dv, …) and status LEDs mapped to the Nexys A7 ballout.

Implemented hierarchy

Post-route block diagram shows the full stack on silicon:

  • nexys_a7_100t_top
    • gen_eth.u_etheth_ingress (RMII + UDP)
    • gen_eth.u_moldmoldudp64_rx
    • u_coreitch_hw_core (parser + order book + BBO)
    • u_displayseven_segment_ctrl

Bitstream ready

Bitstream artifact: itch-hw.runs/impl_1/nexys_a7_100t_top.bit

Hardware Manager sees the Digilent JTAG target (xc7a100t_0) and is ready to program.

What's next

Ethernet cable is on the bench. Next step: program the board, confirm LED15 (link up), and inject Mold/ITCH test traffic with `tools/send_itch_udp.py.

As the problem domain becomes clearer, the decision logic will evolve. The goal is to let market-structure understanding drive the design, not FPGA friction — the fabric path is now proven.