# dbond762/fpga-lesson_10-string_of_lights-zynq_ps architecture

> Architecture diagram of the GitHub repository dbond762/fpga-lesson_10-string_of_lights-zynq_ps, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps
- Repository: https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps

## Overview

This is bare-metal firmware for a Zynq-based LED pattern controller. After initialization, the application rotates a four-bit LED pattern at a configurable interval and direction; button interrupts trigger debounced reads that change speed or pause/resume playback. The tree identifies the AXI GPIO and timer hardware, but the block-design wiring was not sampled, so the diagram shows only documented peripheral roles and firmware interactions.

Main entry points: [`app_component/src/main.c`](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/app_component/src/main.c) (Application loop), [`HW_10_1.srcs/sources_1/bd/design_1/design_1.bd`](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/design_1.bd) (Zynq block design), [`HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_1/design_1_axi_gpio_0_1.xci`](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_1/design_1_axi_gpio_0_1.xci) (Button GPIO), [`HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_timer_0_0/design_1_axi_timer_0_0.xci`](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_timer_0_0/design_1_axi_timer_0_0.xci) (AXI timer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_firmware["Firmware"]
  node_main["Application loop<br/>[main.c]"]
  node_rotation["Four-bit rotation<br/>[rotate.c]"]
end

subgraph group_hardware["Programmable hardware"]
  node_timer["AXI timer"]
  node_led_gpio["LED GPIO"]
  node_button_gpio["Button GPIO"]
  node_switch_gpio["Switch GPIO"]
  node_block_design["Zynq block design<br/>[design_1.bd]"]
end

subgraph group_controls["Physical controls"]
  node_buttons(("Buttons"))
  node_switches(("Direction switch"))
end

node_user(("User"))
node_leds(("LEDs"))

node_main -->|"configures tick"| node_timer
node_timer -->|"tick interrupt"| node_main
node_main -->|"configures and writes"| node_led_gpio
node_main -->|"configures and reads"| node_button_gpio
node_button_gpio -->|"button interrupt"| node_main
node_main -->|"configures and reads"| node_switch_gpio
node_main -->|"rotates pattern"| node_rotation
node_main -->|"drives output"| node_leds
node_user -->|"presses"| node_buttons
node_user -->|"sets direction"| node_switches
node_buttons -->|"input signals"| node_button_gpio
node_switches -->|"input signals"| node_switch_gpio
node_led_gpio -->|"output signals"| node_leds
node_block_design -->|"instantiates"| node_timer
node_block_design -->|"instantiates"| node_led_gpio
node_block_design -->|"instantiates"| node_button_gpio
node_block_design -->|"instantiates"| node_switch_gpio

click node_main "https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/app_component/src/main.c"
click node_rotation "https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/app_component/src/rotate.c"
click node_timer "https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_timer_0_0/design_1_axi_timer_0_0.xci"
click node_led_gpio "https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_0/design_1_axi_gpio_0_0.xci"
click node_button_gpio "https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_1/design_1_axi_gpio_0_1.xci"
click node_switch_gpio "https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_2/design_1_axi_gpio_0_2.xci"
click node_block_design "https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/design_1.bd"

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_main,node_rotation,node_user toneBlue
class node_timer,node_led_gpio,node_button_gpio,node_switch_gpio,node_block_design toneAmber
class node_buttons,node_switches toneMint
class node_leds toneIndigo
```

## Components

### Firmware

- [Application loop](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/app_component/src/main.c): `app_component/src/main.c`
- [Four-bit rotation](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/app_component/src/rotate.c): `app_component/src/rotate.c`

### Programmable hardware

- [AXI timer](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_timer_0_0/design_1_axi_timer_0_0.xci): `HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_timer_0_0/design_1_axi_timer_0_0.xci`
- [LED GPIO](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_0/design_1_axi_gpio_0_0.xci): `HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_0/design_1_axi_gpio_0_0.xci`
- [Button GPIO](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_1/design_1_axi_gpio_0_1.xci): `HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_1/design_1_axi_gpio_0_1.xci`
- [Switch GPIO](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_2/design_1_axi_gpio_0_2.xci): `HW_10_1.srcs/sources_1/bd/design_1/ip/design_1_axi_gpio_0_2/design_1_axi_gpio_0_2.xci`
- [Zynq block design](https://github.com/dbond762/fpga-lesson_10-string_of_lights-zynq_ps/blob/master/HW_10_1.srcs/sources_1/bd/design_1/design_1.bd): `HW_10_1.srcs/sources_1/bd/design_1/design_1.bd`

### Physical controls

- **Buttons**
- **Direction switch**

### Other components

- **User**
- **LEDs**

## Connections

- Application loop → AXI timer: configures tick
- AXI timer → Application loop: tick interrupt
- Application loop → LED GPIO: configures and writes
- Application loop → Button GPIO: configures and reads
- Button GPIO → Application loop: button interrupt
- Application loop → Switch GPIO: configures and reads
- Application loop → Four-bit rotation: rotates pattern
- Application loop → LEDs: drives output
- User → Buttons: presses
- User → Direction switch: sets direction
- Buttons → Button GPIO: input signals
- Direction switch → Switch GPIO: input signals
- LED GPIO → LEDs: output signals
- Zynq block design → AXI timer: instantiates
- Zynq block design → LED GPIO: instantiates
- Zynq block design → Button GPIO: instantiates
- Zynq block design → Switch GPIO: instantiates
