

Nandboard
NANDboard: hands-on Boolean algebra
- Size
- 163 × 66 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 74
- Nets
- 103
- Pads
- 493
- Tracks, vias
- 758, 78
- Pours
- 1
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 5 Oct 2015
- Updated
- 7 Jan 2025
Overview
Nandboard is an open-source printed circuit board by danpage, from the danpage/nandboard repository on GitHub, published under the CC-BY-SA-4.0 licence. It is a 2-layer board of 163 × 66 mm with 74 parts on 103 nets, routed with 758 tracks and 78 vias.
It is built around the APT2012SGC and B3FS-1010. Its parts include 20 diodes, 18 connectors, 4 ICs, 4 switches and 2 capacitors.
Main components
2APT2012SGC
0805-40℃~+85℃ 12mcd 160° 2.2V 20mA 565nm 568nm 62.5mW Discrete Diode Emerald Green Water Clear 0805 LED Indication - Discrete ROHSKingbrightLED Indication - DiscreteB3FS-1010
SMD-4P,6.8x7mm-25℃~+70℃ 1,000,000 cycles 1N 24V 4.3mm 50mA 6.3mm 6mm Gull Wing Round Button SPST-NO Surface Mount,Vertical SMD-4P,6.8x7mm Tactile Switches ROHSOmronTactile Switches
README
rev_f/README.mdHigh-level structure
At a high level, (the top-side of) a given NANDboard is organised into a set of somewhat groups (or regions) reflected by annotation on the PCB:
+----------+----------+----------+----------+----------+
| input | NAND | NAND | output | power |
| group | group | group | group | group |
| | #0 | #1 | | |
| +----------+----------+ | |~~~~ USB
| | NAND | NAND | | |
| | group | group | | |
| | #2 | #3 | | |
+----------+----------+----------+----------+----------+Each group designed to support a specific purpose, as explained
in detail below. Again
at a high level,
however, use of the
NANDboard
can be summarised as follows. Imagine you are tasked with using
a
NANDboard
to implement some 4-input, 1-output Boolean function
R = f( X_0, X_1, X_2, X_3 )
To do so, the idea is you
- use the input group to model (and control) the input,
- use the NAND groups to implement
fby decomposing it into a NAND-based expression, - use the output group to model (and visualise) the output,
using jumper wire to form connections to inputs, outputs, and between intermediate signals.
Low-level detail
The power group
Viewed from top-to-bottom, the power group comprises
- an 8x2 pin header,
- a type-C USB connector,
- an 8x2 pin header.
The basic idea is that:
-
The USB connector supplies the NANDboard with power from some host (e.g., a workstation).
-
The pin headers allow multiple NANDboards to be "daisy-chained" together, e.g., to implement larger, more complex designs: doing so basically means
- supplying one "powered" NANDboard with power via the USB connector
- supplying other "tethered" NANDboards with power via their pin headers by connecting their 5V and GND pins to those of the "powered" NANDboard.
This demands care, however, because misconnection can potentially damage the board and/or workstation: the safest approach would be to cover the pins with jumpers when not in use.
The input group
Viewed from left-to-right, the input group comprises
- 4 switches (or buttons), and
- an 8x2 pin header.
so can be thought of conceptually as the following block diagram:
switches pins
__|__ _____|_____
/ \ / \
+-----+-----+
+-----+ | X_0 | X_0 |
| X_0 | ~~~> +-----+-----+
+-----+ | X_0 | X_0 |
+-----+-----+
+-----+ | X_1 | X_1 |
| X_1 | ~~~> +-----+-----+
+-----+ | X_1 | X_1 |
+-----+-----+
+-----+ | X_2 | X_2 |
| X_2 | ~~~> +-----+-----+
+-----+ | X_2 | X_2 |
+-----+-----+
+-----+ | X_3 | X_3 |
| X_3 | ~~~> +-----+-----+
+-----+ | X_3 | X_3 |
+-----+-----+The basic idea is that each switch is connected to a group of 4 pins: the state of each group of pins (i.e., 0 or 1) is determined by that of the associated switch, so when the switch is pressed (resp. not pressed) the pins will be 1 (resp. 0).
The output group
Viewed from left-to-right, the output group comprises
- an 8x2 pin header, and
- 4 LEDs.
pins LEDs
_____|_____ __|__
/ \ / \
+-----+-----+
| R_0 | R_0 | +-----+
+-----+-----+ ~~~> | R_0 |
| R_0 | R_0 | +-----+
+-----+-----+
| R_1 | R_1 | +-----+
+-----+-----+ ~~~> | R_1 |
| R_1 | R_1 | +-----+
+-----+-----+
| R_2 | R_2 | +-----+
+-----+-----+ ~~~> | R_2 |
| R_2 | R_2 | +-----+
+-----+-----+
| R_3 | R_3 | +-----+
+-----+-----+ ~~~> | R_3 |
| R_3 | R_3 | +-----+
+-----+-----+The basic idea is that each LED is connected to a group of 4 pins: the state of each group of pins (i.e., 0 or 1) determines that of the associated LED, so when the pins are 1 (resp. 0) the LED will be on (resp. off).
The NAND group(s)
Viewed from left-to-right, each NAND group comprises
- an 4x2 constant pin header,
- an 8x2 input pin header,
- an IC that houses 4 NAND gates,
- an 8x2 output pin header. and
- 4 LEDs.
so can be thought of conceptually as the following block diagram:
constant pins
_____|_____
/ \
+-----+-----+
| 1 | 1 |
+-----+-----+
| 1 | 1 |
+-----+-----+
input pins NAND gates output pins LEDs
_____|_____ ___________|__________ _____|_____ __|__
/ \ / \ / \ / \
+-----+-----+ +----------------------+ +-----+-----+
| x_0 | x_0 | ~~~> | | | r_0 | r_0 | +-----+
+-----+-----+ | r_0 = ~( x_0 & y_0 ) | ~~~> +-----+-----+ ~~~> | r_0 |
| y_0 | y_0 | ~~~> | | | r_0 | r_0 | +-----+
+-----+-----+ | | +-----+-----+
| x_1 | x_1 | ~~~> | | | r_1 | r_1 | +-----+
+-----+-----+ | r_1 = ~( x_1 & y_1 ) | ~~~> +-----+-----+ ~~~> | r_1 |
| y_1 | y_1 | ~~~> | | | r_1 | r_1 | +-----+
+-----+-----+ | | +-----+-----+
| x_2 | x_2 | ~~~> | | | r_2 | r_2 | +-----+The basic idea is that:
-
Each group houses 4 replicated instances of the same structure, the
i-th of which computesr_i = ~( x_i & y_i ). We use on the 0-th, top-most instance as an example throughout the following. -
The computation of
r_0 = ~( x_0 & y_0 )relates to the top 4 pins (i.e., top 2 rows) of both the input and output pins headers: the input pins markedx_0andy_0provided an input to the NAND gate, which produces a result reflected on the output pins markedr_0.
Each output pin is also connected to an LED, allowing the state (i.e., 0 or 1) to be visualised. -
Note there are 2 pins marked
x_0andy_0on the input pin header: since they are connected together, either of the 2 pins (i.e., the left- or right-hand pin markedx_0) can be used to provide the associated input. Likewise, there are 4 pins markedr_0on the output pin header: the NAND gate output is replicated on each of those pins. -
Each input pin is pulled-down, meaning that
x_0andy_0are 0 andr_0is 1 by default. However, an input pin can be freely connected (via jumper wire) to any other- constant pin,
- input group pin,
- NAND group input pin,
- NAND group output pin
elsewhere on the NANDboard.
-
Since each input pin is 0-by-default, the constant pins can be used to "override" this. Imagine that rather than
r_0 = ~( x_0 & y_0 ), you need to computer_0 = ~( x_0 & 1 )for some reason: a reasonable approach is to connect they_0input pin of the NAND gate to one of the 1-by-default constant pins. -
The NAND groups and hence operators are independent, meaning you can form inter- and intra-group connections (i.e., inside one group and between two groups).
Misc.
The bottom-side of the NANDboard includes a 10-pin TagConnect header: those pins connect to
- the 5V and GND pins in the power group,
- each
pin in the input group, i.e.,
X_0,X_1,X_2, andX_3, and - each
pin in the output group, i.e.,
R_0,R_1,R_2, andR_3.
By connecting the NANDboard to a host using a compliant pogo-pin style cable, one can therefore programmatically control input to and inspect output generated by it; an example use-case would be to automatically, and exhaustively test whether the NANDboard correctly implements a given function.
Parts
74| Qty | Value | Footprint | References |
|---|---|---|---|
| 20 | APT2012SGC | LED_SMD:LED_0805_2012Metric | D5.1, D5.2, D5.3, D5.4, D6.1, D6.2, D6.3, D6.4, D7.1, D7.2, D7.3, D7.4, D8.1, D8.2, D8.3, D8.4 +4 |
| 10 | 10k ohm | RN-1206-Convex-LongSideTerminals:RN-1206-Convex-LongSideTerminals | RN4, RN5.1, RN6.1, RN6.2, RN7.1, RN7.2, RN8.1, RN8.2, RN9.1, RN9.2 |
| 10 | Conn_02x08_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_Vertical_SMD | J4, J5, J6.1, J6.2, J7.1, J7.2, J8.1, J8.2, J9.1, J9.2 |
| 5 | 560 ohm | RN-1206-Convex-LongSideTerminals:RN-1206-Convex-LongSideTerminals | RN5.2, RN6.3, RN7.3, RN8.3, RN9.3 |
| 4 | 1k ohm | RN-1206-Convex-LongSideTerminals:RN-1206-Convex-LongSideTerminals | RN6.4, RN7.4, RN8.4, RN9.4 |
| 4 | 7400 | Package_SO:SOIC-14_3.9x8.7mm_P1.27mm | U1, U2, U3, U4 |
| 4 | B3FS-1010 | Button_Switch_SMD:SW_SPST_Omron_B3FS-101xP | SW1, SW2, SW3, SW4 |
| 4 | Conn_02x02_Odd_Even | Connector_PinHeader_2.54mm:PinHeader_2x02_P2.54mm_Vertical_SMD | J6.3, J7.3, J8.3, J9.3 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H1, H2, H3, H4 |
| 2 | 5.1k ohm | Resistor_SMD:R_0603_1608Metric | R1.1, R1.2 |
| 2 | Conn_02x02_Counter_Clockwise | Connector_PinHeader_2.54mm:PinHeader_2x02_P2.54mm_Vertical_SMD | J2.1, J2.2 |
| 1 | 0.1 uF | Capacitor_SMD:C_0805_2012Metric | C1.2 |
| 1 | 100 uF | Capacitor_SMD:C_1210_3225Metric | C1.1 |
| 1 | Conn_02x05_Counter_Clockwise | Connector:Tag-Connect_TC2050-IDC-NL_2x05_P1.27mm_Vertical | J3 |
| 1 | Fuse_Polarized | Fuse:Fuse_1206_3216Metric | F1 |
| 1 | USB_C_Receptacle_USB2.0 | GSB1C41110SSHR:AMPHENOL_GSB1C41110SSHR | J1 |
Questions
How big is the Nandboard PCB?
It measures 163 × 66 mm and has 2 copper layers, 1.6 mm thick.
What parts does the Nandboard use?
74 parts, built around the APT2012SGC and B3FS-1010. 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 Nandboard KiCad files?
From the danpage/nandboard repository on GitHub, at the commit this page was made from: the board is rev_f/nandboard.kicad_pcb and its schematic rev_f/nandboard.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Nandboard design in my own project?
Its repository publishes it under the CC-BY-SA-4.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 2 layers94 × 85 mm

- 2 layers53.3 × 47.2 mm

RAMPS WiFi Adapter
ODDepot/RAMPS-WiFi-Adapter
The RAMPS WiFi Adapter provides wireless networking for RepRap's RAMPS (Arduino Mega Pololu Shield) controller.
21 parts10 - 2 layers105 × 90 mm

Ws uc06
wildsystems/ws-uc06
Custom ESP32-C6 development board with power input protection, relay outputs, opto-isolated I/O, NTC sensor input, and JTAG debugging. Designed as a DIY-friendly controller base.
84 parts2 - 2 layers160 × 100 mm

Interface board
cepr/daly-to-lithium-balance-adapter
Replacement traction battery for a 2018 Energica Ego. The original Lithium Balance s-BMS master (BMCU) stays in the bike.
112 parts - 2 layers90 × 60 mm

Flappy esp32c3-revb
Soulboy420/BP_flappyBird
Eigenständiger KiCad-10-Entwurf für das HAW-Bachelorprojekt. Der ursprüngliche Entwurf unter hardware/ und absichtliche Benutzerlöschungen wurden nicht überschrieben. Es wurde nichts bestellt, committed oder gepusht.
111 parts - 4 layers159.9 × 99.9 mm

- 2 layers159.9 × 99.9 mm

- 2 layers141.1 × 126.8 mm

Calculator
hackclub/OnBoard
💡 Join 1,000 teenagers and make your first PCB with a $100 grant!
74 parts915