Skip to content

Pinout

Two different numbering schemes

The J2-x / J3-x labels are the breakout board's own numbering and do not match the Opal Kelly module pinout. Opal Kelly calls the two Manchester inputs MC1-42 (Y6) and MC1-44 (AA6). Always confirm against the FPGA pin name, which is what xem7310.xdc constrains.

Data inputs

Breakout FPGA pin Bank Signal
J2-2 Y6 34 manchester — channel 1
J2-4 AA6 34 manchester2 — channel 2

Both LVCMOS33, single-ended, 3.3 V.

Y6 and AA6 are B34_L18P and B34_L18N — two halves of one differential pair. Legal as independent single-ended inputs; the tightest-coupled pair on the connector, so the first suspect for channel interference at high rates.

Debug outputs

Three spare output pins. Which signals they carry is set by DEBUG_MODE in USBInterface.v.

=== "DEBUG_MODE = 1 (default, hdl/build/)"

| Breakout | FPGA pin | Signal | How to read it |
|---|---|---|---|
| J3-10 | `F4` | `dec_clk` | channel 1 recovered clock. Ticking = decoder locked. Dead = never locked at this rate, whatever the host reports |
| J2-18 | `Y1` | `dec2_clk` | the same for channel 2 |
| J2-26 | `AA14` | `pipe2_ready` | `ep_ready` for pipe 0xA1. Low forever while `dec2_clk` is healthy = the channel-2 buffer or its reset is at fault, not the decoder |

=== "DEBUG_MODE = 0 (hdl/build/ch1_debug/)"

| Breakout | FPGA pin | Signal |
|---|---|---|
| J3-10 | `F4` | `data_dly` |
| J2-18 | `Y1` | `init_calib_complete` |
| J2-26 | `AA14` | `dec_data_bit` |

Channel-1 debug signals. None of these is a recovered clock, which is the
single most useful signal when trying an unfamiliar rate.

dbg_sig1 does not exist on this design

That pin (AA6) is now manchester2, an input. Loading a single-channel bitfile while a transmitter is wired to J2-4 puts two drivers on one net — on the FPGA and on the transmitter.

WireIn 0x00

Bit Signal Note
0 clk_reset active high
1 fifo_reset active high
2 dec_reset inverted in RTL: dec_reset = ~ep00wire[2]
3 ddr3_reset active high

The host reset sequence used by miniscope-io is 0b0010, 0b0, 0b1000, 0b0 — pulse fifo_reset, then ddr3_reset.

fifo_reset does not reach the recovered-clock FIFOs directly; it arms the per-channel reset sequencers.

Clocks

Clock Source Period Free-running?
sysClkp/sysClkn 200 MHz oscillator 5 ns yes
genClk ×2 from sys_clk 2.5 ns yes
okClk Opal Kelly USB 9.92 ns yes
ui_clk DDR3 MIG — yes
dec_clk recovered, channel 1 120 ns @ 8.33 MHz no — stops when idle
dec2_clk recovered, channel 2 120 ns @ 8.33 MHz no — stops when idle

Both recovered clocks are constrained in xem7310.xdc and Vivado promotes both to global buffers on its own.