
Filter Board
frohro/pico-dev-ice
This is a direct down conversion (DDC) HF transceiver & VNA using the Raspberry Pi Pico and the iCE40UP5K.

This is a direct down conversion (DDC) HF transceiver & VNA using the Raspberry Pi Pico and the iCE40UP5K.
Pico Dev iCE is an open-source printed circuit board by frohro, from the frohro/pico-dev-ice repository on GitHub. It is a 4-layer board of 100 × 100 mm with 294 parts on 249 nets, routed with 2,425 tracks and 334 vias.
It is built around the ICE40UP5K-SG48I, TPH2501-TR and CJC4334H, with the MS9280, MS9708 and PAM8908JER among its other parts. Its parts include 106 capacitors, 88 resistors, 24 ICs, 10 connectors and 9 transistors. It belongs with the radio and wireless boards and the RP2040 and FPGA and CPLD boards of this library.
DSP Educational Vehicle & iCE40 Mixed-Signal Laboratory
The Pico Dev-iCE is a low-cost, high-performance "Lab-in-a-Box." It combines the high-speed programmable logic of a Lattice iCE40UP5K FPGA with the flexible C/MicroPython ecosystem of a Raspberry Pi Pico (YD-RP2040 with 16MB Flash).
Designed specifically as an educational platform, it abandons "black box" RF chips in favor of discrete, observable analog blocks. Students can physically probe the RF signal path, design their own LC filters on pluggable sandboxes, and write Verilog to perform Direct Digital Conversion (DDC), digital decimation, and hardware I2S audio routing.

Here is a video of the SDR receiving on 20 meters.
.
SPI0 bus to dual-role: it blasts the bitstream into the FPGA's internal CRAM on boot, and then seamlessly transitions to sending runtime DSP commands to the user's Verilog over the exact same 4 wires.SMA ➔ Ethernet Isolation/CMC ➔ Band Sandbox ➔ T/R Switch ➔ LNA 1 ➔ PGA (5/10dB) ➔ LNA 2 ➔ ADC.DAC ➔ Passive I-V ➔ Ethernet Transformer ➔ TX Switch ➔ Recon Sandbox ➔ TX Op-Amp (+12dB) ➔ T/R Switch ➔ SMA.To achieve commercial-grade noise floors, the noisy Switch-Mode Power Supply (SMPS) of standard Picos is bypassed/isolated.
+4.5V AVDD: Clean LDO powering the RF op-amps, analog switches, and ADC/DAC analog cores.+3.3V Digital: LDO powering the FPGA I/O, Pico, and IC logic.+3.3V Clean: Ferrite bead + LC filtered rail strictly for the 30.72 MHz oscillator to eliminate phase-noise/jitter.SDR_ANT(BNC): Main Transceiver Port (Transformer isolated, AC-Coupled).SII (SMA): Device Under Test port for S11/VSWR Antenna measurements. Connects to the internal Return Loss Bridge.AWG_OUT (BNC): Direct DC-coupled output (0V to +4V) from the DAC. Perfect for baseband signal generation.S21 (SMA): AC-coupled output for S21 Filter sweeps and RF signal generation. Protects the op-amp from DC-shorted filters.The board features IN-GND-GND-OUT 0.1" sockets for inserting custom filter daughterboards.
0 to the pin in MicroPython = Switch HIGH (Max Gain / Default Path). Writing 1 = Switch LOW (Attenuated / VNA / TX Path).SPI0 block.SPI0_TX (MOSI) is data entering the FPGA, and SPI0_RX (MISO) is data leaving the FPGA.SPI0 bus and ICE_SSN Chip Select pin to send DSP commands to the user's Verilog.The ten-week, verification-first HDL course sequence is documented in
DDC_SDR_Lab_Plan.md.
This map defines the interface for the software team handling AGC, VNA sweeps, user interface, and I2S audio routing.
| Pico GPIO | Net Name | Function | Direction | Notes |
|---|---|---|---|---|
| GPIO 0 | FPGA_INT | FPGA Hardware Interrupt | Input | Catches stretched ADC Out-Of-Range (OTR) pulses |
| GPIO 1 | PMOD_3 | PMOD / GPIO Jump | I/O | Connected via series resistor R32 to PMOD_3 |
| GPIO 2 | SDA | I2C Data | In/Out | I2C bus for the OLED Display |
| GPIO 3 | SCL | I2C Clock | Output | I2C bus for the OLED Display |
| GPIO 4 | SPI0_RX | SPI0 MISO | Input | Data entering Pico from FPGA (via series resistor R33) |
| GPIO 5 | ICE_SSN | SPI0 CSn (FPGA CS) | Output | Hardware SPI0 Chip Select (Boot & Runtime) |
| GPIO 6 | SPI0_CLK | SPI0 SCK | Output | SPI Clock for Boot and Runtime (via series resistor R34) |
| GPIO 7 | SPI0_TX | SPI0 MOSI | Output | Data leaving Pico to FPGA (via series resistor R35) |
| GPIO 8 | PGA0 | 5 dB Attenuator | Output | Logic 1 = Attenuator Active (LOW at switch) |
| GPIO 9 | PGA1 | 10 dB Attenuator | Output | Logic 1 = Attenuator Active (LOW at switch) |
| GPIO 10 | PGA2 | LNA 2 Bypass | Output | Logic 1 = LNA Bypassed (LOW at switch) |
| GPIO 11 | PGA3 | LNA 1 Bypass | Output | Logic 1 = LNA Bypassed (LOW at switch) |
| GPIO 12 | BAND_SW | Band Filter Sandbox | Output | Toggles sandbox selection switch |
| GPIO 13 | TX_DATA | I2S TX Data | Output | Full-Duplex Baseband Audio TO the FPGA |
| GPIO 14 | RX_DATA | I2S RX Data | Input | Full-Duplex Baseband Audio FROM the FPGA |
| GPIO 15 | BCK | I2S Bit Clock | Input | Clocks generated by FPGA (I2S Master) |
| GPIO 16 | WS | I2S Word Select (L/R) | Input | Clocks generated by FPGA (I2S Master) |
| GPIO 17 | AF_DAC_DATA | Audio DAC Data | Output | I2S out to standalone headphone amp |
| GPIO 18 | AF_DAC_MCLK | Audio DAC Master | Output | I2S out to standalone headphone amp |
| GPIO 19 | AF_DAC_SCLK | Audio DAC Clock | Output | I2S out to standalone headphone amp |
| GPIO 20 | AF_DAC_LRCK | Audio DAC L/R | Output | I2S out to standalone headphone amp |
| GPIO 21 | ICE_DONE | FPGA Boot Status | Input | Goes HIGH when FPGA is running and lights White LED |
| GPIO 22 | ~ICE_RST | FPGA Reset | Output | Pull LOW to hold FPGA in reset |
| GPIO 26 | REF | Front-End RF Mux | Output | 0 = SDR RF Antenna RX, 1 = VNA Input |
| GPIO 27 | (Optional) | PMOD / GPIO Jump | I/O | Jumper JP3 maps to PMOD_2 |
| GPIO 28 | ~T/R | Transmit/Receive Sw | Output | 1 = RX Mode (Antenna -> LNA), 0 = TX Mode |
This map defines the interface for the digital design team writing Verilog and the .pcf constraints file.
| Pin # | Lattice Name | Net Name | Function / Connection |
|---|---|---|---|
| 37 | IOT_45a_G1 | CLK | 30.72 MHz Master Clock IN (From Oscillator) |
| 23 | IOT_37a | ADC_CLK | ADC Clock OUT (To MS9280 via 22Ω resistor) |
| 6 | IOB_13b | DAC_CLK | DAC Clock OUT (To MS9708) |
| 25 | IOT_36b | D0 | ADC Data Bit 0 (LSB) |
| 26 | IOT_39a | D1 | ADC Data Bit 1 |
| 27 | IOT_38b | D2 | ADC Data Bit 2 |
| 28 | IOT_41a | D3 | ADC Data Bit 3 |
| 31 | IOT_42b | D4 | ADC Data Bit 4 |
| 32 | IOT_43a | D5 | ADC Data Bit 5 |
| 34 | IOT_44b | D6 | ADC Data Bit 6 |
| 35 | IOT_46b_G0 | D7 | ADC Data Bit 7 (MSB) |
| 36 | IOT_48b | OTR | ADC Out of Range (Clipping Flag) |
| 4 | IOB_8a | DB0 | DAC Data Bit 0 (LSB) |
| 3 | IOB_9b | DB1 | DAC Data Bit 1 |
| 2 | IOB_6a | DB2 | DAC Data Bit 2 |
| 48 | IOB_4a | DB3 | DAC Data Bit 3 |
| 47 | IOB_2a | DB4 | DAC Data Bit 4 |
| 46 | IOB_0a | DB5 | DAC Data Bit 5 |
| 45 | IOB_5b | DB6 | DAC Data Bit 6 |
| 44 | IOB_3b_G6 | DB7 | DAC Data Bit 7 (MSB) |
| 14 | IOB_32a_SPI_SO | SPI0_RX | SPI MISO (Data to Pico during runtime) |
| 17 | IOB_33b_SPI_SI | SPI0_TX | SPI MOSI (Data from Pico during runtime) |
| 15 | IOB_34a_SPI_SCK | SPI0_CLK | SPI Clock IN (From Pico GPIO 6) |
| 16 | IOB_35b_SPI_SS | ICE_SSN | SPI Chip Select IN (From Pico GPIO 5) |
| 12 | IOB_22a | BCK | I2S Bit Clock OUT (To Pico GPIO 15) |
| 9 | IOB_16a | WS | I2S Word Select OUT (To Pico GPIO 16) |
| 11 | IOB_20a | RX_DATA | I2S Data OUT (SDR audio to Pico GPIO 14) |
| 10 | IOB_18a | TX_DATA | I2S Data IN (Transmit audio from Pico GPIO 13) |
| 13 | IOB_24a | FPGA_INT | Hardware Interrupt OUT (To Pico GPIO 0) |
| 38 | IOT_50b | ANG_0 | Rotary Encoder / Tuning Knob A |
| 42 | IOT_51a | ANG_1 | Rotary Encoder / Tuning Knob B |
| 43 | IOT_49a | ANG_2 | Rotary Encoder / Tuning Knob Switch |
| 21 | IOB_23b | PMOD_0 | PMOD Header Pin 1 |
| 19 | IOB_29b | PMOD_1 | PMOD Header Pin 2 |
| 18 | IOB_31b | PMOD_2 | PMOD Header Pin 3 |
| 20 | IOB_25b_G3 | PMOD_3 | PMOD Header Pin 4 |
| 39 | RGB0 | RED | Open-Drain LED Driver (Active-Low: 0=ON, pulses on ADC OTR clipping) |
| 40 | RGB1 | YELLOW | Open-Drain LED Driver (Active-Low: 0=ON, pulses on SPI tuning activity) |
| 41 | RGB2 | GREEN | Open-Drain LED Driver (Active-Low: 0=ON, steady ON when un-reset) |
| 7 | CDONE | ICE_DONE | Hardware Boot / Status Out |
| 8 | ~CRESET | ~ICE_RST | Hardware Boot / Reset In |
The SDK port is under Software/pico-ice-sdk. It uses the checked-in Pico SDK
(currently 2.2.0). The general SDK examples use the TinyUSB revision bundled by
that SDK. The DDC firmware below uses a newer TinyUSB checkout because it needs
the UAC1 descriptor definitions that are not present in the bundled revision.
The smallest board-specific firmware example programs the FPGA's volatile CRAM directly from the RP2040:
cmake -S Software/pico-ice-sdk/examples/rp2_dev_ice_blinky \
-B Software/pico-ice-sdk/examples/rp2_dev_ice_blinky/build \
-DPICO_BOARD=pico_dev_ice -DPICO_NO_PICOTOOL=1
cmake --build Software/pico-ice-sdk/examples/rp2_dev_ice_blinky/buildThe generated UF2 is RP2040 firmware that contains the FPGA bitstream. The Dev-iCE has no external FPGA configuration flash, so the board port excludes the external-flash and TinyUF2 FPGA-storage paths. SPI0 GPIO 6 is the CRAM transfer clock and GPIO 7 carries configuration data; normal FPGA operation uses the separate external 30.720 MHz oscillator, not a Pico-generated clock on GPIO 27.
The first Dev-iCE SDR application is in
Software/ddc_sdr_firmware. It replaces the
earlier Si5351a, Tayloe detector, and PCM1808 path with FPGA-generated DDC I/Q data received as
PCM1808-compatible I2S. The Pico firmware:
The DDC application requires a TinyUSB checkout with both src/tusb.h and
hw/bsp/rp2040. A current checkout at $HOME/tinyusb is detected
automatically, or it can be selected explicitly:
cmake -S Software/ddc_sdr_firmware -B Software/ddc_sdr_firmware/build \
-DPICO_TINYUSB_PATH="$HOME/tinyusb" \
-DPICO_BOARD=pico_dev_ice \
-DPICO_NO_PICOTOOL=1
cmake --build Software/ddc_sdr_firmware/build -j2The Pico firmware keeps FPGA deployment easy to choose: FPGA_BOOT_MODE=DFU
waits for a development bitstream from dfu-util, while
FPGA_BOOT_MODE=STORED loads an image embedded in the Pico firmware at boot.
Two stored transceiver profiles can be included with
FPGA_RX_BITSTREAM_BIN and FPGA_TX_BITSTREAM_BIN, with
FPGA_DEFAULT_IMAGE selecting the boot profile and FPGA,LOAD,RX or
FPGA,LOAD,TX selecting one between sessions. The full commands and build
examples are in Software/ddc_sdr_firmware/README.md.
These profile loads are not a VNA sweep mechanism. A VNA needs a single coherent FPGA design containing the stimulus, reference, receive, and measurement paths for the complete sweep. Select a persistent VNA-capable image before a measurement, or implement those paths in one integrated image; do not reconfigure between sweep points.
For development, compile an FPGA bitstream with Yosys, nextpnr-ice40, and icepack, then load it without reflashing the Pico:
python3 Software/ddc_sdr_firmware/tools/dfu_fpga.py /path/to/ddc_sdr.binStop the SDR++ or Quisk audio stream before starting DFU. The helper prepares
the shared SPI0 bus, sends the packed bitstream through dfu-util, and lets the
Pico restore the runtime FPGA state afterward. Do not reset the Pico after a
DFU-only update: FPGA CRAM is volatile and a reset clears the loaded design.
For the complete pinout, SPI protocol, CDC commands, build options, and DFU
sequence, see Software/ddc_sdr_firmware/README.md.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 64 | 100nF | PCM_JLCPCB:C_0402 | C1, C10, C11, C13, C14, C15, C17, C18, C19, C100, C101, C102, C103, C104, C105, C106 +48 |
| 26 | 10kΩ | PCM_JLCPCB:R_0402 | R3, R17, R18, R21, R22, R23, R24, R28, R31, R36, R37, R55, R56, R57, R58, R59 +10 |
| 14 | 100kΩ | PCM_JLCPCB:R_0402 | R1, R2, R19, R20, R61, R65, R68, R71, R75, R79, R82, R83, R85, R86 |
| 13 | 74LVC1G3157GW | PCM_JLCPCB:SOT-363_SC-70-6 | U1, U6, U12, U14, U15, U16, U17, U18, U19, U21, U22, U23, U24 |
| 10 | 10uF | PCM_JLCPCB:C_0805 | C16, C38, C39, C40, C41, C42, C48, C49, C55, C60 |
| 10 | 49.9Ω | PCM_JLCPCB:R_0402 | R4, R5, R6, R7, R9, R13, R15, R60, R63, R78 |
| 9 | 100uF | PCM_JLCPCB:C_CASE-B-3528-21(mm) | C28, C29, C50, C51, C52, C53, C54, C58, C59 |
| 8 | 2N7002 | PCM_JLCPCB:Q_SOT-23 | Q1, Q2, Q4, Q5, Q6, Q7, Q8, Q9 |
| 7 | ~ | PCM_JLCPCB:FB_0805 | FB1, FB2, FB3, FB4, FB5, FB6, FB7 |
| 6 | 4.7uF | PCM_JLCPCB:C_0402 | C33, C37, C70, C71, C74, C77 |
| 5 | 1Ω | PCM_JLCPCB:R_0603 | R39, R44, R45, R46, R47 |
| 5 | 22Ω | PCM_JLCPCB:R_0402 | R29, R32, R33, R34, R35 |
| 4 | 2.2nF | PCM_JLCPCB:C_0805 | C61, C62, C63, C64 |
| 4 | 330Ω | PCM_JLCPCB:R_0402 | R25, R26, R27, R30 |
| 4 | Filter | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | Je3, Je4, Je5, Je6 |
| 4 | GND | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP12, TP13, TP17, TP18 |
| 4 | H1102NLT | Transformer_SMD:Transformer_Ethernet_Wuerth_749013011A | TR1, TR2, TR3, TR4 |
| 4 | TPH2501-TR | Package_TO_SOT_SMD:SOT-23-5 | U2, U3, U13, U20 |
| 3 | 0.1u | Capacitor_SMD:C_0805_2012Metric | C43, C44, C45 |
| 3 | 100Ω | PCM_JLCPCB:R_0805 | R10, R11, R12 |
| 3 | 1uF | PCM_JLCPCB:C_0603 | C12, C65, C68 |
| 3 | SS14 | PCM_JLCPCB:D_SMA | D5, D6, D7 |
| 2 | 10nF | PCM_JLCPCB:C_0402 | C79, C80 |
| 2 | 10Ω | PCM_JLCPCB:R_0402 | R66, R69 |
| 2 | 2.2uF | PCM_JLCPCB:C_0805 | C66, C67 |
| 2 | 22Ω | PCM_JLCPCB:R_0603 | R72, R76 |
| 2 | 33Ω | PCM_JLCPCB:R_0805 | R48, R73 |
| 2 | 4.7pF | PCM_JLCPCB:C_0603 | C46, C47 |
| 2 | 510Ω | PCM_JLCPCB:R_0402 | R62, R80 |
| 2 | 560Ω | PCM_JLCPCB:R_0603 | R49, R50 |
| 2 | SGM2205-ADJXTDB8G/TR | Package_DFN_QFN:DFN-8-1EP_3x3mm_P0.65mm_EP1.55x2.4mm | e1, e2 |
| 1 | +0.3V | Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP5 |
| 1 | +3V3 | Jumper:SolderJumper-2_P1.3mm_Bridged2Bar_RoundedPad1.0x1.5mm | JP8 |
| 1 | +5 | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP4 |
| 1 | 100 | Resistor_SMD:R_0402_1005Metric | R54 |
| 1 | 100kΩ | PCM_JLCPCB:R_0805 | R38 |
| 1 | 10Ω | PCM_JLCPCB:R_0603 | R53 |
| 1 | 12kΩ | PCM_JLCPCB:R_0805 | R40 |
| 1 | 1N4148WT-7 | Diode_SMD:D_SOD-523 | D8 |
| 1 | 1V2 | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP9 |
| 1 | 2.2Ω | PCM_JLCPCB:R_0603 | R74 |
| 1 | 27kΩ | PCM_JLCPCB:R_0805 | R41 |
| 1 | 2kΩ | PCM_JLCPCB:R_0402 | R16 |
| 1 | 3.3V_A | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP6 |
| 1 | 3.5mm_Jack | Intro_to_CAD:Jack_3.5mm_CUI_SJ-3523-SMT_Horizontal | J9 |
| 1 | 300Ω | PCM_JLCPCB:R_0805 | R14 |
| 1 | 33kΩ | PCM_JLCPCB:R_0805 | R42 |
| 1 | 4.7uF | PCM_JLCPCB:C_1206 | C107 |
| 1 | 47kΩ | PCM_JLCPCB:R_0805 | R43 |
| 1 | 82Ω | PCM_JLCPCB:R_0603 | R67 |
| 1 | A+ | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP15 |
| 1 | AO3401A | PCM_JLCPCB:Q_SOT-23 | Q3 |
| 1 | AWG_OUT | Intro_to_CAD:Conn_Coaxial_Frohne | J5 |
| 1 | CJC4334H | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U9 |
| 1 | Conn_01x02 | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | J7 |
| 1 | Conn_01x20_Socket | Connector_PinSocket_2.54mm:PinSocket_1x20_P2.54mm_Vertical | J11 |
| 1 | Conn_01x20_Socket | Intro_to_CAD:PinSocket_1x20_P2.54mm_Vertical-pins21-40 | J12 |
| 1 | DAC_L | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP7 |
| 1 | DAC_R | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP8 |
| 1 | Green | PCM_JLCPCB:D_0805 | D3 |
| 1 | Groundloop_Insurance | Jumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mm | e4 |
| 1 | ICE40UP5K-SG48ITR | Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm | U7 |
| 1 | Jumper_2_Open | Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP2 |
| 1 | L78M05ABDT-TR | PCM_JLCPCB:TO-252-2_L6.5-W6.1-P4.58-LS10.0-TL | U8 |
| 1 | MS9280 | Package_SO:SSOP-28_5.3x10.2mm_P0.65mm | U4 |
| 1 | MS9708 | Package_SO:TSSOP-28-1EP_4.4x9.7mm_P0.65mm_EP3.4x9.7mm_Mask3.1x4.05mm_ThermalVias | U5 |
| 1 | NCP115AMX120TCG | RP2040_minimal:OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm | U11 |
| 1 | O+ | RP2040_minimal:TestPoint_THTPad_D2.5mm_Drill1.2mm | TP14 |
| 1 | OLED | Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical | J8 |
| 1 | PAM8908 | Package_DFN_QFN:QFN-16-1EP_3x3mm_P0.5mm_EP1.7x1.7mm | U10 |
| 1 | PMOD | Connector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_Vertical | J6 |
| 1 | PMOD_2 | Jumper:SolderJumper-2_P1.3mm_Bridged2Bar_RoundedPad1.0x1.5mm | JP3 |
| 1 | Prototyping Area | RP2040_minimal:Prototype_array | H1 |
| 1 | RaspberryPi_or_Pico_W_2_or_2W_or_YD-RP2040 | Module:RaspberryPi_Pico_Common_THT | A1 |
| 1 | Red | PCM_JLCPCB:D_0805 | D1 |
| 1 | RotaryEncoder_Switch_MP | Rotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | SW1 |
| 1 | S11 | Connector_Coaxial:SMA_Samtec_SMA-J-P-H-ST-EM1_EdgeMount | J2 |
| 1 | S21 | Connector_Coaxial:SMA_Samtec_SMA-J-P-H-ST-EM1_EdgeMount | J4 |
| 1 | SDR ANT | Intro_to_CAD:Conn_Coaxial_Frohne | J10 |
| 1 | SG-8018CE 30.720000MHz TJHPA | Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm | X1 |
The 280 most common of 294 parts.

frohro/pico-dev-ice
This is a direct down conversion (DDC) HF transceiver & VNA using the Raspberry Pi Pico and the iCE40UP5K.



tinyvision-ai-inc/pico2-ice
Doc | Hardware | SDK | Schematic | Assembly | Discord

TinyTapeout/breakout-pcb
Tiny Tapeout breakout PCBs




andymartell/Prius-STM32-DC-Motor-Contoller
STM32 based DC Motor Controller using Prius Gen 3 hardware
It measures 100 × 100 mm and has 4 copper layers, 1.6 mm thick.
294 parts, built around the ICE40UP5K-SG48I, TPH2501-TR, CJC4334H and MS9280. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the frohro/pico-dev-ice repository on GitHub, at the commit this page was made from: the board is Hardware/Pico-Dev-iCE.kicad_pcb and its schematic Hardware/AF_DAC.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask frohro before reusing the design.