optimizing a gate level bcm to the end of the earth and back
1/*
2 * BCD to 7-segment decoder (exact synthesis)
3 * 12 gates, 24 total gate inputs
4 * Method: exact_12gates
5 */
6
7#include <stdint.h>
8
9uint8_t bcd_to_7seg(uint8_t bcd) {
10 // Extract individual bits
11 uint8_t A = (bcd >> 3) & 1;
12 uint8_t B = (bcd >> 2) & 1;
13 uint8_t C = (bcd >> 1) & 1;
14 uint8_t D = bcd & 1;
15
16 // Gate outputs
17 uint8_t g0 = (A | !D);
18 uint8_t g1 = (B ^ C);
19 uint8_t g2 = (C | !g0);
20 uint8_t g3 = (g0 ^ g1);
21 uint8_t g4 = !(A | g1);
22 uint8_t g5 = !(B & g3);
23 uint8_t g6 = (C | g3);
24 uint8_t g7 = (!D & g6);
25 uint8_t g8 = !(g4 & g5);
26 uint8_t g9 = (g3 | g7);
27 uint8_t g10 = !(g2 & g5);
28 uint8_t g11 = (g3 | !g9);
29
30 // Pack segment outputs (bit 6 = a, bit 0 = g)
31 return (g6 << 6) | (g5 << 5) | (g11 << 4) | (g9 << 3) | (g7 << 2) | (g10 << 1) | (g8 << 0);
32}