# adakhaddad/progleprot architecture

> Architecture diagram of the GitHub repository adakhaddad/progleprot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/adakhaddad/progleprot
- Repository: https://github.com/adakhaddad/progleprot

## Overview

The tree indicates a Verilog hardware design for detecting and identifying digital-interface activity, with multiple top-level design revisions and fingerprint-based matching. The supplied README is the generic Tiny Tapeout template, and no RTL excerpts or design-specific documentation were provided, so the functional stages and their wiring cannot be verified. The graph therefore groups the apparent capabilities by module names and uses only dashed, unverified relationships; it does not assert a specific top-level runtime sequence.

Main entry points: [`rtl/fingerprint_matcher.v`](https://github.com/adakhaddad/progleprot/blob/main/rtl/fingerprint_matcher.v) (Fingerprint Matcher), [`rtl/pdis_sequencer.v`](https://github.com/adakhaddad/progleprot/blob/main/rtl/pdis_sequencer.v) (PDIS Sequencer), [`rtl/histogram.v`](https://github.com/adakhaddad/progleprot/blob/main/rtl/histogram.v) (Signal Histogram), [`rtl/peak_detect.v`](https://github.com/adakhaddad/progleprot/blob/main/rtl/peak_detect.v) (Peak Detection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_input["Signal Detection"]
  node_can["CAN Detector<br/>[can_detect.v]"]
  node_i2c["I2C Detector<br/>[i2c_detect.v]"]
  node_ps2["PS/2 Detector<br/>[ps2_detect.v]"]
  node_spi["SPI Detector<br/>[spi_detect.v]"]
  node_uart["UART Framer<br/>[uart_framer.v]"]
end

subgraph group_analysis["Fingerprint Analysis"]
  node_interval["Edge Intervals<br/>[edge_interval.v]"]
  node_histogram["Signal Histogram<br/>[histogram.v]"]
  node_peak["Peak Detection<br/>[peak_detect.v]"]
  node_logbucket["Log Buckets<br/>[log_bucket.v]"]
  node_matcher["Fingerprint Matcher"]
  node_fingerprintrom[("Fingerprint ROM<br/>[fingerprint_rom.v]")]
  node_encoding["Encoding Layer<br/>[encoding_layer.v]"]
end

subgraph group_control["Sequencing and Output"]
  node_roles["Pin Role Discovery"]
  node_sequencer["PDIS Sequencer<br/>[pdis_sequencer.v]"]
  node_compiler["Sequencer Compiler"]
  node_ranked["Ranked Output<br/>[ranked_output.v]"]
  node_progrom[("Program ROM<br/>[prog_rom.v]")]
end

subgraph group_tops["Design Variants"]
  node_m1["M1 Top<br/>[m1_top.v]"]
  node_m2["M2 Top<br/>[m2_top.v]"]
  node_m3["M3 Top<br/>[m3_top.v]"]
  node_m4["M4 Top<br/>[m4_top.v]"]
  node_m5["M5 Top<br/>[m5_top.v]"]
  node_m6["M6 Top<br/>[m6_top.v]"]
end

node_signals(("Digital Inputs"))

node_signals -.->|"samples signals"| node_can
node_signals -.->|"samples signals"| node_i2c
node_signals -.->|"samples signals"| node_ps2
node_signals -.->|"samples signals"| node_spi
node_signals -.->|"samples signals"| node_uart
node_interval -.->|"feeds analysis"| node_histogram
node_histogram -.->|"feeds analysis"| node_peak
node_peak -.->|"provides features"| node_matcher
node_fingerprintrom -.->|"stores patterns"| node_matcher
node_matcher -.->|"provides match"| node_encoding
node_roles -.->|"guides sequencing"| node_sequencer
node_progrom -.->|"provides program"| node_sequencer
node_sequencer -.->|"supplies sequence"| node_compiler
node_matcher -.->|"provides candidates"| node_ranked
node_encoding -.->|"provides encoding"| node_ranked
node_m1 -.->|"variant relationship"| node_m2
node_m2 -.->|"variant relationship"| node_m3
node_m3 -.->|"variant relationship"| node_m4
node_m4 -.->|"variant relationship"| node_m5
node_m5 -.->|"variant relationship"| node_m6

click node_can "https://github.com/adakhaddad/progleprot/blob/main/rtl/can_detect.v"
click node_i2c "https://github.com/adakhaddad/progleprot/blob/main/rtl/i2c_detect.v"
click node_ps2 "https://github.com/adakhaddad/progleprot/blob/main/rtl/ps2_detect.v"
click node_spi "https://github.com/adakhaddad/progleprot/blob/main/rtl/spi_detect.v"
click node_uart "https://github.com/adakhaddad/progleprot/blob/main/rtl/uart_framer.v"
click node_interval "https://github.com/adakhaddad/progleprot/blob/main/rtl/edge_interval.v"
click node_histogram "https://github.com/adakhaddad/progleprot/blob/main/rtl/histogram.v"
click node_peak "https://github.com/adakhaddad/progleprot/blob/main/rtl/peak_detect.v"
click node_logbucket "https://github.com/adakhaddad/progleprot/blob/main/rtl/log_bucket.v"
click node_matcher "https://github.com/adakhaddad/progleprot/blob/main/rtl/fingerprint_matcher.v"
click node_fingerprintrom "https://github.com/adakhaddad/progleprot/blob/main/rtl/fingerprint_rom.v"
click node_encoding "https://github.com/adakhaddad/progleprot/blob/main/rtl/encoding_layer.v"
click node_roles "https://github.com/adakhaddad/progleprot/blob/main/rtl/pin_role_discovery.v"
click node_sequencer "https://github.com/adakhaddad/progleprot/blob/main/rtl/pdis_sequencer.v"
click node_compiler "https://github.com/adakhaddad/progleprot/blob/main/rtl/sequencer_compiler.v"
click node_ranked "https://github.com/adakhaddad/progleprot/blob/main/rtl/ranked_output.v"
click node_progrom "https://github.com/adakhaddad/progleprot/blob/main/rtl/prog_rom.v"
click node_m1 "https://github.com/adakhaddad/progleprot/blob/main/rtl/m1_top.v"
click node_m2 "https://github.com/adakhaddad/progleprot/blob/main/rtl/m2_top.v"
click node_m3 "https://github.com/adakhaddad/progleprot/blob/main/rtl/m3_top.v"
click node_m4 "https://github.com/adakhaddad/progleprot/blob/main/rtl/m4_top.v"
click node_m5 "https://github.com/adakhaddad/progleprot/blob/main/rtl/m5_top.v"
click node_m6 "https://github.com/adakhaddad/progleprot/blob/main/rtl/m6_top.v"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_can,node_i2c,node_ps2,node_spi,node_uart toneBlue
class node_interval,node_histogram,node_peak,node_logbucket,node_matcher,node_fingerprintrom,node_encoding toneAmber
class node_roles,node_sequencer,node_compiler,node_ranked,node_progrom toneMint
class node_m1,node_m2,node_m3,node_m4,node_m5,node_m6 toneRose
class node_signals toneIndigo
```

## Components

### Signal Detection

- [CAN Detector](https://github.com/adakhaddad/progleprot/blob/main/rtl/can_detect.v): `rtl/can_detect.v`
- [I2C Detector](https://github.com/adakhaddad/progleprot/blob/main/rtl/i2c_detect.v): `rtl/i2c_detect.v`
- [PS/2 Detector](https://github.com/adakhaddad/progleprot/blob/main/rtl/ps2_detect.v): `rtl/ps2_detect.v`
- [SPI Detector](https://github.com/adakhaddad/progleprot/blob/main/rtl/spi_detect.v): `rtl/spi_detect.v`
- [UART Framer](https://github.com/adakhaddad/progleprot/blob/main/rtl/uart_framer.v): `rtl/uart_framer.v`

### Fingerprint Analysis

- [Edge Intervals](https://github.com/adakhaddad/progleprot/blob/main/rtl/edge_interval.v): `rtl/edge_interval.v`
- [Signal Histogram](https://github.com/adakhaddad/progleprot/blob/main/rtl/histogram.v): `rtl/histogram.v`
- [Peak Detection](https://github.com/adakhaddad/progleprot/blob/main/rtl/peak_detect.v): `rtl/peak_detect.v`
- [Log Buckets](https://github.com/adakhaddad/progleprot/blob/main/rtl/log_bucket.v): `rtl/log_bucket.v`
- [Fingerprint Matcher](https://github.com/adakhaddad/progleprot/blob/main/rtl/fingerprint_matcher.v): `rtl/fingerprint_matcher.v`
- [Fingerprint ROM](https://github.com/adakhaddad/progleprot/blob/main/rtl/fingerprint_rom.v): `rtl/fingerprint_rom.v`
- [Encoding Layer](https://github.com/adakhaddad/progleprot/blob/main/rtl/encoding_layer.v): `rtl/encoding_layer.v`

### Sequencing and Output

- [Pin Role Discovery](https://github.com/adakhaddad/progleprot/blob/main/rtl/pin_role_discovery.v): `rtl/pin_role_discovery.v`
- [PDIS Sequencer](https://github.com/adakhaddad/progleprot/blob/main/rtl/pdis_sequencer.v): `rtl/pdis_sequencer.v`
- [Sequencer Compiler](https://github.com/adakhaddad/progleprot/blob/main/rtl/sequencer_compiler.v): `rtl/sequencer_compiler.v`
- [Ranked Output](https://github.com/adakhaddad/progleprot/blob/main/rtl/ranked_output.v): `rtl/ranked_output.v`
- [Program ROM](https://github.com/adakhaddad/progleprot/blob/main/rtl/prog_rom.v): `rtl/prog_rom.v`

### Design Variants

- [M1 Top](https://github.com/adakhaddad/progleprot/blob/main/rtl/m1_top.v): `rtl/m1_top.v`
- [M2 Top](https://github.com/adakhaddad/progleprot/blob/main/rtl/m2_top.v): `rtl/m2_top.v`
- [M3 Top](https://github.com/adakhaddad/progleprot/blob/main/rtl/m3_top.v): `rtl/m3_top.v`
- [M4 Top](https://github.com/adakhaddad/progleprot/blob/main/rtl/m4_top.v): `rtl/m4_top.v`
- [M5 Top](https://github.com/adakhaddad/progleprot/blob/main/rtl/m5_top.v): `rtl/m5_top.v`
- [M6 Top](https://github.com/adakhaddad/progleprot/blob/main/rtl/m6_top.v): `rtl/m6_top.v`

### Other components

- **Digital Inputs**

## Connections

- Digital Inputs → CAN Detector: samples signals
- Digital Inputs → I2C Detector: samples signals
- Digital Inputs → PS/2 Detector: samples signals
- Digital Inputs → SPI Detector: samples signals
- Digital Inputs → UART Framer: samples signals
- Edge Intervals → Signal Histogram: feeds analysis
- Signal Histogram → Peak Detection: feeds analysis
- Peak Detection → Fingerprint Matcher: provides features
- Fingerprint ROM → Fingerprint Matcher: stores patterns
- Fingerprint Matcher → Encoding Layer: provides match
- Pin Role Discovery → PDIS Sequencer: guides sequencing
- Program ROM → PDIS Sequencer: provides program
- PDIS Sequencer → Sequencer Compiler: supplies sequence
- Fingerprint Matcher → Ranked Output: provides candidates
- Encoding Layer → Ranked Output: provides encoding
- M1 Top → M2 Top: variant relationship
- M2 Top → M3 Top: variant relationship
- M3 Top → M4 Top: variant relationship
- M4 Top → M5 Top: variant relationship
- M5 Top → M6 Top: variant relationship
