This design executes over 200 cells of an elementary cellular automaton every cycle applying Rule 110 to all of them in parallel. Roughly 115 cells with parallel read/write bus can be placed on 1x1 TinyTapeout tile. Without read/write bus, up to 240 cells fit on a 1x1 tile!
The edge of chaos - Rule 110 exhibits complex behavior on the boundary between stability and chaos. It could be explored for pseudo random number generator and data compression.
Gliders - periodic structures with complex behaviour, universal computation and self-reproduction can be implemented with Rule 110.
Turing complete - with a particular repeating background pattern Rule 110 is known to be Turing complete. This implies that, in principle, any calculation or computer program can be simulated using such automaton!
Definition of Rule 110
The following rule is applied to each triplet of the neighboring cells. Binary representation 01101110 of 110 defines the transformation pattern.
1. Current iteration of the automaton
            111  110  101  100  011  010  001  000
             |    |    |    |    |    |    |    |
             v    v    v    v    v    v    v    v
2. The next iteration of the automaton
            .0.  .1.  .1.  .0.  .1.  .1.  .1.  .0.
Interesting links for further reading
After RESET all cells will be set to 0 except the rightmost that is going to be 1. Automaton will immediately start running. Automaton produce new state every cycle for all the cells in parallel. One hardware cycle is one iteration of the automaton. Automaton will run until /HALT pin is pulled low.
The following diagram shows 10 first iteration of the automaton after RESET.
                                                      X
                                                     XX
                                                    XXX
                                                   XX X
                                                  XXXXX
                                                 XX   X
                                                XXX  XX
                                               XX X XXX
                                              XXXXXXX X
          automaton state on the             XX     XXX
        10th iteration after RESET  ---->   XXX    XX X
To read automaton state
Cells are read in 8 cell blocks and are addressed sequentially from right to left. Adress #0 represents the rightmost 8 cells. Adress #1 represents the cells from 16 to 9 on the rights and so forth.
          automaton state on the 
        10th iteration after RESET  ---->   XXX    XX X
        00000000  ...  00000000000000000000011100001101
        |      |              |       |       |       |
        [adr#14]  ...  [addr#3][addr#2][addr#1][addr#0]
            cells are addressed in blocks of 8 bits
The state of the 8 cells in the block will appear on the Output pins once the cell block address is set.
Timing diagram
CLK   ___     ___     ___     ___     ___     ___           ___
   __/   `___/   `___/   `___/   `___/   `___/   `___ ... _/   `___
     |       |       |       |       |       |             |
     |       |       |       |       |       |             |
WRITE  ____                                                 _______
    X__HALT__________________________________________ ... _/ 
WRITE_______________  ______________  _______________
   _/ ADDR#0        `/ ADDR#1       `/ ADDR#2 
READ OUTPUT_______         ________        ________
   ______/00001101`_______/00000111`______/00000000`_  
              ^                ^
              |                |
       these are the expected values on
          the 10th cycle after RESET
      ____
      HALT  - /HALT, inverted halt automata
      ADDR# - cell block address bits 0..4
(Over)write automaton state
To write state of the cells, 1) pull /HALT pin low, 2) set the cell block address pins, 3) set the new desired cell state on the Input pins and 4) finally pull /WE pin low.
Cells are updated in 8 cell blocks and are addressed sequentially from right to left. Adress #0 represents the rightmost 8 cells. Adress #1 represents the cells from 16 to 9 on the rights and so forth.
Timing diagram
CLK   ___     ___     ___     ___     ___     ___           ___
   __/   `___/   `___/   `___/   `___/   `___/   `___ ... _/   `___
     |       |       |       |       |       |             |
     |       |       |       |       |       |             |
WRITE  ____                                                 _______
    X__HALT__________________________________________ ... _/ 
WRITE_______________  ______________  _______________
   _/ ADDR#0        `/ ADDR#1       `/ ADDR#2
WRITE INPUT_________  ______________  _____________
   __/ 00000111     `/ 11100110     `/ 11010111    `_
WRITE______  __    ________  __    ________  __    __ ... _________
           `_WE___/        `_WE___/        `_WE___/
                 wait 1 cycle    wait 1 cycle
         __
    ____ WE   - /WE, inverted write enable 
    HALT      - /HALT, inverted halt automata
        ADDR# - cell block address bits 0..4
The following diagram shows 10 cycles of automaton after /HALT pulled back to high.
      [adr#14]  ...  [addr#3][addr#2][addr#1][addr#0]
      |      |              |       |       |       |
      00000000  ...  00000000110101111110011000000111
                             XX X XXXXXX  XX      XXX
                            XXXXXXX    X XXX     XX X
                           XX     X   XXXX X    XXXXX
                          XXX    XX  XX  XXX   XX   X
                         XX X   XXX XXX XX X  XXX  XX
                        XXXXX  XX XXX XXXXXX XX X XXX
                       XX   X XXXXX XXX    XXXXXXXX X
                      XXX  XXXX   XXX X   XX      XXX
                     XX X XX  X  XX XXX  XXX     XX X
10 cyles later ->   XXXXXXXX XX XXXXX X XX X    XXXXX

| # | Input | Output | Bidirectional | 
|---|---|---|---|
| 0 | write cell 0 state | read cell 0 state | /WE, inverted write enable | 
| 1 | write cell 1 state | read cell 1 state | /HALT, inverted halt automata | 
| 2 | write cell 2 state | read cell 2 state | ADDR#, cell block address bit 0 | 
| 3 | write cell 3 state | read cell 3 state | ADDR#, cell block address bit 1 | 
| 4 | write cell 4 state | read cell 4 state | ADDR#, cell block address bit 2 | 
| 5 | write cell 5 state | read cell 5 state | ADDR#, cell block address bit 3 | 
| 6 | write cell 6 state | read cell 6 state | ADDR#, cell block address bit 4 | 
| 7 | write cell 7 state | read cell 7 state |