Skip to the content
2 layers99.6 × 114.8 mmMiniFPGA panel, the printed circuit board in 3D

Learn Verilog basics the easy way with the world's smallest FPGA.

Size
99.6 × 114.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
400
Nets
392
Pads
1,312
Tracks, vias
1,952, 144
Pours
8
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
16 Dec 2024
Updated
18 Sep 2026

Overview

MiniFPGA panel is an open-source printed circuit board by MicrochipTech, from the MicrochipTech/veryVerilog repository on GitHub. It is a 2-layer board of 99.6 × 114.8 mm with 400 parts on 392 nets, routed with 1,952 tracks and 144 vias.

It is built around the PIC16F1455-I/P. Its parts include 168 resistors, 40 diodes, 16 capacitors, 16 ICs and 16 connectors. It belongs with the PIC boards of this library.

Main components

1

README

README.md

veryVerilog

veryVerilog enables an easy way to program PICs from family

  • PIC16F131xy
  • PIC16F132xy
  • PIC16F180xy
  • PIC18FxyQ35

over a Web Browser without the need to install any software using a PIC as a USB HiD device.

The project is based on 3 parts:

  • USB-HID PCB (hardware)
  • USB-HID Hex File (firmware)
  • Web Page to flash Hex files a PIC device attached to the hardware

The PCB looks like this and is based on a PIC16F1455 .

The PIC16F1455 needs a custom firmware to perform as ICSP programmer.

PCB

The IC on the left-hand side is the PIC16F1455-I/P and IC on the right-hand side is the miniFPGA (PIC16F13145-I/P) to be programmed.

Program a PIC in 4 Steps

It is that easy:

1. Insert the Hardware

Plug the miniFPGA dongle in your computer.

2. Click the Web Page

Open the Web Page: https://microchiptech.github.io/veryVerilog.

You will see the veryVerilog Web Page:

Web1

3. Connect to Programmer

Click the button "Connect to Programmer" and select the miniFPGA device:

Web2

If you have multiple programmers connected, click "identify Programmer" and the LEDs of the connected board will blink for about 2 seconds.

The device is recognized and the Web Page displays information about the connected PIC and the identification of the program already flashed on the device (User Id)

Web3

4. Drag and Drop

Drag a HEX file on the "Drag and Drop" area and the program will be transfered automatically to the PIC.

Web4

Alternatively, you can click the "Browse for HEX file" button to select a HEX file from your file system. This is particularly useful when working with IDEs where you can copy and paste file paths.

Have fun!

Additional Features

Reset Target Device

After connecting to the programmer, a "Reset Target" button becomes available. Clicking this button will reset the target PIC.

Device Detection

When you connect to a programmer:

  • If the device is recognized, the web page displays the PIC model name (e.g., "PIC16F13145") and its User ID
  • If the device is not recognized or reads an invalid ID (like 0x0000), the page will display: "Unknown PIC with DEVID 0x[hex_value]" along with the actual device ID that was read

This helps in debugging connectivity issues or identifying when an unsupported PIC is connected.

Tip: Click on the UserId display to open a detailed information window showing:

  • MCU Parameters - Device ID, Revision ID, Memory sizes (ERSIZ, WLSIZ, URSIZ, EESIZ), Program Counter size (PCNT), and other device-specific information
  • Programmer Parameters - Hardware UART baud rate and other programmer settings

Reading Memory Regions

After connecting to the programmer, you can read the entire contents of the target PIC device:

  1. Click the Settings dropdown (split button next to "Identify Programmer")
  2. Select "Read Device" from the menu
  3. The device memory will be read and automatically displayed in a modal window

The memory viewer organizes data into collapsible sections:

  • Program Flash - The main program memory (displayed in rows of 16 words)
  • EEPROM - Data EEPROM memory (if available on the device, displayed in rows of 8 bytes)
  • UserId - User ID locations (displayed in rows of 4 words)
  • Config Words - Configuration bits

You can also access previously read memory using the "Show Memory" option without reading the device again. This is useful for comparing data or reviewing what was last read from the device.

Programming Settings

The Settings dropdown provides options to customize which memory regions are programmed and whether verification is performed:

Default Behavior:

  • All memory regions are programmed: Program (Flash), EEPROM, UserId, and Config Bits
  • After programming, the code is automatically verified to ensure it was written correctly

Customizing Memory Regions:

Click the Settings dropdown to access programming options. You can selectively choose which memory regions to program by checking/unchecking:

  • Program - Main program flash memory
  • EEPROM - Data EEPROM memory (if available on the device)
  • UserId - User ID locations
  • Config Bits - Configuration bits

Verification:

  • The Verify option (enabled by default) checks that the programmed memory matches the expected values
  • This ensures programming integrity but may increase programming time slightly
  • You can disable verification if faster programming is needed, though this is not recommended

Serial Terminal

The veryVerilog web page includes a built-in Serial Terminal for communicating directly with the target PIC over a serial (UART) connection.

Opening the Serial Terminal

Click the "Serial Terminal" tab to open the terminal window:

Serial Terminal

Connecting to a Serial Port

Click the "Connect" button and a browser popup will appear listing the available serial ports on your computer. Select the desired port (e.g., the miniFPGA board) and click Connect:

Serial Port Selection

Once connected, the status indicator turns green and the terminal displays a confirmation message with a timestamp:

Serial Terminal Connected

Sending Data

Type a command in the input field at the bottom of the terminal and press Enter or click the "Send" button. Use the line ending dropdown (default: CR+LF) to choose the line termination characters appended to each message.

Terminal Controls

The toolbar at the top of the terminal provides the following controls:

ButtonDescription
Connect / DisconnectConnect to or disconnect from a serial port. The button label changes depending on the connection state.
PausePause the terminal output. Incoming data is still received but the display stops scrolling. Click again to resume.
GraphOpen a graphing view to plot numeric data received from the serial port in real time (see Graph Mode below).
X (Clear Terminal)Clear all text currently displayed in the terminal window.
Hide TerminalCollapse the serial terminal panel to free up screen space. Click the "Serial Terminal" tab again to reopen it.
Graph Mode

Click the "Graph" button to switch the terminal into a real-time plotting view. The graph plots numeric data received over the serial port in CSV format — each line of text represents one data point in time, with comma-separated values mapping to individual channels.

Expected data format:

The PIC should send an optional header line followed by numeric data lines, all in CSV format terminated by a newline:

text
header1,header2,header3\n   ← optional: names for each channel
value1,value2,value3\n      ← numeric data (one sample per line)
value1,value2,value3\n
...

The first non-numeric line received is used as the channel names displayed in the graph legend. If no header is sent, channels are automatically named Ch1, Ch2, etc.

Tip: Always send a header line at PIC startup to get meaningful trace names. Without it, UART noise or partial bytes at connection time may produce garbled labels.

Example — single channel (e.g., ADC reading):

text
ADC
512
523
531
548

Example — multiple channels (e.g., temperature and humidity sensors):

text
Temperature,Humidity
23.5,65.2
23.6,64.8
23.7,65.0
23.8,64.5

Example C code to send plottable data from a PIC:

c
// Send header once at startup
printf("ADC,Temperature\r\n");

// Then send data periodically
while (1) {
    printf("%d,%d\r\n", adc_value, temperature);
    __delay_ms(100);
}

Each comma-separated value is plotted as a separate trace on the graph, allowing you to monitor multiple signals simultaneously. The example below shows two channels — one counting up from 0 to 10 and the other counting down from 10 to 0 — plotted in real time:

Graph Mode

Parts

400
QtyValueFootprintReferences
144680ΩAttila:R_Axial_L3.6mm_D1.6mm_P1.90mm_VerticalR1, R1, R1, R1, R1, R1, R1, R1, R10, R10, R10, R10, R10, R10, R10, R10 +128
2410kΩResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P5.08mm_HorizontalR11, R11, R11, R11, R11, R11, R11, R11, R18, R18, R18, R18, R18, R18, R18, R18 +8
81TestPoint:TestPoint_Pad_1.5x1.5mmTP1, TP1, TP1, TP1, TP1, TP1, TP1, TP1
82TestPoint:TestPoint_Pad_D1.5mmTP2, TP2, TP2, TP2, TP2, TP2, TP2, TP2
83TestPoint:TestPoint_Pad_D1.5mmTP3, TP3, TP3, TP3, TP3, TP3, TP3, TP3
84TestPoint:TestPoint_Pad_D1.5mmTP4, TP4, TP4, TP4, TP4, TP4, TP4, TP4
8470nFCapacitor_THT:C_Rect_L4.6mm_W2.0mm_P2.50mm_MKS02_FKP02C2, C2, C2, C2, C2, C2, C2, C2
84µ7FCapacitor_THT:CP_Radial_D4.0mm_P2.00mmC1, C1, C1, C1, C1, C1, C1, C1
85TestPoint:TestPoint_Pad_D1.5mmTP5, TP5, TP5, TP5, TP5, TP5, TP5, TP5
86TestPoint:TestPoint_Pad_D1.5mmTP6, TP6, TP6, TP6, TP6, TP6, TP6, TP6
87TestPoint:TestPoint_Pad_D1.5mmTP7, TP7, TP7, TP7, TP7, TP7, TP7, TP7
88TestPoint:TestPoint_Pad_D1.5mmTP8, TP8, TP8, TP8, TP8, TP8, TP8, TP8
88pin proto areaAttila:8pin_protoA1, A1, A1, A1, A1, A1, A1, A1
8ICSP_DEBUG_miniFPGAConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_HorizontalJ2, J2, J2, J2, J2, J2, J2, J2
8LOGOAttila:MClogoBW_18x4.2mmREF*, REF*, REF*, REF*, REF*, REF*, REF*, REF*
8PIC16F13145-IPPackage_DIP:DIP-20_W7.62mmU2, U2, U2, U2, U2, U2, U2, U2
8PIC16F1455-I/PPackage_DIP:DIP-14_W7.62mmU1, U1, U1, U1, U1, U1, U1, U1
8RA4Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP3, JP3, JP3, JP3, JP3, JP3, JP3, JP3
8RA4Button_Switch_THT:SW_PUSH_6mm_H5mmPB3, PB3, PB3, PB3, PB3, PB3, PB3, PB3
8RB4LED_THT:LED_D3.0mmLED5, LED5, LED5, LED5, LED5, LED5, LED5, LED5
8RC1LED_THT:LED_D3.0mmLED3, LED3, LED3, LED3, LED3, LED3, LED3, LED3
8RC2LED_THT:LED_D3.0mmLED4, LED4, LED4, LED4, LED4, LED4, LED4, LED4
8RC3Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP4, JP4, JP4, JP4, JP4, JP4, JP4, JP4
8RC3Button_Switch_THT:SW_PUSH_6mm_H5mmPB4, PB4, PB4, PB4, PB4, PB4, PB4, PB4
8RC4Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP1, JP1, JP1, JP1, JP1, JP1, JP1, JP1
8RC4Button_Switch_THT:SW_PUSH_6mm_H5mmPB1, PB1, PB1, PB1, PB1, PB1, PB1, PB1
8RC5Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP2, JP2, JP2, JP2, JP2, JP2, JP2, JP2
8RC5Button_Switch_THT:SW_PUSH_6mm_H5mmPB2, PB2, PB2, PB2, PB2, PB2, PB2, PB2
8RXLED_THT:LED_D3.0mmLED1, LED1, LED1, LED1, LED1, LED1, LED1, LED1
8TXLED_THT:LED_D3.0mmLED2, LED2, LED2, LED2, LED2, LED2, LED2, LED2
8USB_BConnector_USB:USB_A_CNCTech_1001-011-01101_HorizontalJ1, J1, J1, J1, J1, J1, J1, J1

More from MicrochipTech/veryVerilog

1
  • 2 layers24.9 × 57.4 mmMiniFPGA, the printed circuit board in 3D

    MiniFPGA

    MicrochipTech/veryVerilog

    Learn Verilog basics the easy way with the world's smallest FPGA.

    50 parts15

Similar boards

  • 2 layers146 × 64 mmFDRbox, the printed circuit board in 3D

    FDRbox

    yvrhdn/FDRbox

    DIY MIDI controller with 8 faders

    18 parts5MIT
  • 2 layers24 × 27.9 mmPowerFEC, the printed circuit board in 3D

    PowerFEC

    medo64/PowerFEC

    Non-isolated 5V output with a 500 mA current limit.

    28 partsMIT
  • 2 layers61 × 51.3 mmPTLino, the printed circuit board in 3D

    PTLino

    PostTenebrasLab/PTL-ino

    The PTL-ino (“petilino”) is a *uino-compatbile board that is fully made of easily solderable through-hole components.

    37 parts
  • 2 layers86.4 × 35.1 mmDAQ CAN support, the printed circuit board in 3D

    DAQ CAN support

    waterloo-rocketry/canhw

    Hardware monorepo avionics PCB

    36 parts15GPL-3.0
  • 2 layers215.8 × 159 mmSNSP CPU-01, the printed circuit board in 3D

    SNSP CPU-01

    stonedDiscord/nonSNES

    Super Nintendo Entertainment System PAL schematic and board layout

    400 parts66GPL-3.0
  • 2 layers191.3 × 181.7 mmIO Card G3, the printed circuit board in 3D

    IO Card G3

    PerMalmberg/IO-Card-G3

    This is my custom I/O card, third generation. Main purpose is to serve as an alarm system.

    400 parts7MIT
  • 2 layers172.2 × 211.6 mmSlider potentiometer, the printed circuit board in 3D

    Slider potentiometer

    SolderedElectronics/Slider-potentiometer-breakout-hardware-design

    Hardware design, BOM, gerbers and 3D files for Slider-potentiometer-breakout designed by Soldered Electronics.

    400 parts1

Questions

How big is the MiniFPGA panel PCB?

It measures 99.6 × 114.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the MiniFPGA panel use?

400 parts, built around the PIC16F1455-I/P. 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.

Where can I download the MiniFPGA panel KiCad files?

From the MicrochipTech/veryVerilog repository on GitHub, at the commit this page was made from: the board is PCB/miniFPGA/miniFPGA_panel.kicad_pcb and its schematic PCB/miniFPGA/miniFPGA.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the MiniFPGA panel design in my own project?

Its repository states no licence, so its author keeps all rights: ask MicrochipTech before reusing the design.