diff --git a/doc/assets/block_memory_architecture.png b/doc/assets/block_memory_architecture.png
deleted file mode 100644
index 26298c7..0000000
Binary files a/doc/assets/block_memory_architecture.png and /dev/null differ
diff --git a/doc/assets/bus_architecture.drawio.svg b/doc/assets/bus_architecture.drawio.svg
new file mode 100644
index 0000000..e4858e0
--- /dev/null
+++ b/doc/assets/bus_architecture.drawio.svg
@@ -0,0 +1,445 @@
+
\ No newline at end of file
diff --git a/doc/assets/bus_architecture.png b/doc/assets/bus_architecture.png
deleted file mode 100644
index 4badb26..0000000
Binary files a/doc/assets/bus_architecture.png and /dev/null differ
diff --git a/doc/assets/ethernet_packet.png b/doc/assets/ethernet_packet.png
deleted file mode 100644
index cd39e12..0000000
Binary files a/doc/assets/ethernet_packet.png and /dev/null differ
diff --git a/doc/assets/io_core_architecture.drawio.svg b/doc/assets/io_core_architecture.drawio.svg
new file mode 100644
index 0000000..d5b5064
--- /dev/null
+++ b/doc/assets/io_core_architecture.drawio.svg
@@ -0,0 +1,337 @@
+
\ No newline at end of file
diff --git a/doc/assets/io_core_architecture.png b/doc/assets/io_core_architecture.png
deleted file mode 100644
index bc446f5..0000000
Binary files a/doc/assets/io_core_architecture.png and /dev/null differ
diff --git a/doc/assets/io_core_memory_map.drawio.svg b/doc/assets/io_core_memory_map.drawio.svg
new file mode 100644
index 0000000..35576a4
--- /dev/null
+++ b/doc/assets/io_core_memory_map.drawio.svg
@@ -0,0 +1,251 @@
+
\ No newline at end of file
diff --git a/doc/assets/logic_analyzer_architecture.drawio.svg b/doc/assets/logic_analyzer_architecture.drawio.svg
new file mode 100644
index 0000000..c2123ab
--- /dev/null
+++ b/doc/assets/logic_analyzer_architecture.drawio.svg
@@ -0,0 +1,748 @@
+
\ No newline at end of file
diff --git a/doc/assets/logic_analyzer_architecture.png b/doc/assets/logic_analyzer_architecture.png
deleted file mode 100644
index 6e9ea24..0000000
Binary files a/doc/assets/logic_analyzer_architecture.png and /dev/null differ
diff --git a/doc/assets/manta.drawio.png b/doc/assets/manta.drawio.png
new file mode 100644
index 0000000..7d0cfd6
Binary files /dev/null and b/doc/assets/manta.drawio.png differ
diff --git a/doc/assets/manta_architecture.png b/doc/assets/manta_architecture.png
deleted file mode 100644
index d388fe2..0000000
Binary files a/doc/assets/manta_architecture.png and /dev/null differ
diff --git a/doc/assets/memory_architecture.drawio.svg b/doc/assets/memory_architecture.drawio.svg
new file mode 100644
index 0000000..ca3a1c9
--- /dev/null
+++ b/doc/assets/memory_architecture.drawio.svg
@@ -0,0 +1,608 @@
+
\ No newline at end of file
diff --git a/doc/assets/system_architecture.drawio.svg b/doc/assets/system_architecture.drawio.svg
new file mode 100644
index 0000000..930a0c7
--- /dev/null
+++ b/doc/assets/system_architecture.drawio.svg
@@ -0,0 +1,342 @@
+
\ No newline at end of file
diff --git a/doc/assets/uart.png b/doc/assets/uart.png
deleted file mode 100644
index c7455d5..0000000
Binary files a/doc/assets/uart.png and /dev/null differ
diff --git a/doc/assets/uart_packets.drawio.svg b/doc/assets/uart_packets.drawio.svg
new file mode 100644
index 0000000..b6c1fa6
--- /dev/null
+++ b/doc/assets/uart_packets.drawio.svg
@@ -0,0 +1,1148 @@
+
\ No newline at end of file
diff --git a/doc/how_it_works.md b/doc/how_it_works.md
index 6acdf30..0311b89 100644
--- a/doc/how_it_works.md
+++ b/doc/how_it_works.md
@@ -2,7 +2,7 @@
The whole system looks like the following:
-{:style="width:80%"}
+{:style="width:80%"}
Manta is operated via its Python API, which communicates with the connected FPGA over an interface API like `pySerial` or `Scapy`. These abstract away the OS device drivers, which function differently depending on the host machine's platform. The OS device drivers ultimately send out bytes to the FPGA, across either a USB or Ethernet cable.
@@ -12,7 +12,7 @@ Once sent across the wire, bytes are picked up by an interface transciever on th
The logic Manta places on the FPGA consists of a series of cores connected in a chain along a common bus. Each core provides a unique method for interacting with the user’s logic, which it connects to by routing signals (called _probes_) between the user’s logic and the cores that interface with it.
-{:style="width:40%"}
+{:style="width:40%"}
These probes are presented as addressable memory, and are be controlled by reading and writing to their corresponing memory - not unlike registers on a microcontroller. Each core is allotted a section of address space at compile time, and operations addressed to a core’s address space control the behavior of the core. These cores are then daisy-chained along an internal bus, which permits a chain arbitrarily many cores to be placed on the bus.
@@ -37,7 +37,7 @@ Each core has a bus input and output port, so that cores can be daisy-chained to
Ethernet and UART both allow a stream of bytes to be sent between the host and FPGA, but since they're just interfaces, they don't define how these bytes are structured. As a result, Manta implements its own messaging format, with the following structure:
-{:style="width:85%"}
+{:style="width:85%"}
Each of these messages is a string of ASCII characters consisting of a preamble, optional address and data fields, and an End of Line (EOL). The preamble denotes the type of operation, _R_ for a read and _W_ for a write. The address and data fields are encoded as hexadecimal digits, represented with the characters 0-9 and A-F in ASCII. As a result, four characters are needed to encode a 16-bit address or 16-bits of data. If the message specifies a write request, then it will contain a data field after the address field. Both request types will conclude with an End of Line, which consists of the two ASCII characters indicating a Carriage Return (CR) and a Line Feed (LF).
diff --git a/doc/io_core.md b/doc/io_core.md
index 16ff61e..ca777d1 100644
--- a/doc/io_core.md
+++ b/doc/io_core.md
@@ -90,7 +90,7 @@ While the IO core performs a very, very simple task, it carries a few caveats.
This is done with the architecture shown below:
-{:style="width:49%"}
+{:style="width:49%"}
Each of the probes is mapped to a register of Manta's internal memory. Since Manta's internal registers are 16 bits wide, probes less than 16 bits are mapped to a single register, but probes wider than 16 bits require multiple.
diff --git a/doc/logic_analyzer_core.md b/doc/logic_analyzer_core.md
index edd9d50..8dcb3e8 100644
--- a/doc/logic_analyzer_core.md
+++ b/doc/logic_analyzer_core.md
@@ -139,7 +139,7 @@ At present, this class contains methods used really only for capturing data, and
## How It Works
The Logic Analyzer Core's implementation on the FPGA consists of three primary components:
-{style="width:85%"}
+{style="width:85%"}
- The _Finite State Machine (FSM)_, which controls the operation of the core. The FSM's operation is driven by its associated registers, which are placed in a separate module. This permits simple CDC between the bus and user clock domains.
- The _Trigger Block_, which generates the core's trigger condition. The trigger block contains a trigger for each input probe, and the registers necessary to configure them. It also contains the $N$-logic gate (either AND or OR) that generates the core's trigger from the individual probe triggers. CDC is performed in exactly the same manner as the FSM. If an external trigger is specified, the trigger block is omitted from the Logic Analyzer Core, and the external trigger is routed to the FSM's `trig` input.
diff --git a/doc/block_memory_core.md b/doc/memory_core.md
similarity index 99%
rename from doc/block_memory_core.md
rename to doc/memory_core.md
index 1d8c464..2aa4749 100644
--- a/doc/block_memory_core.md
+++ b/doc/memory_core.md
@@ -68,7 +68,7 @@ A Block Memory core is used in the [video_sprite](https://github.com/fischermose
Each Block Memory core is actually a set of 16-bit wide BRAMs with their ports concatenated together, with any spare bits masked off. Here's a diagram:
-
+
This has one major consequence: if the core doesn't have a width that's an exact multiple of 16, synthesis engines (Vivado in particular) will throw some warnings as they optimize out the unused bits. This is expected behavior, and while the warnings are a little annoying, not having to manually deal with the unused bits simplifies the implementation immensely. No Python is needed to generate the core, and it'll configure itself just based on Verilog parameters. This turns the block memory core from a complicated conditionally-instantiated beast to a simple ~_100 line_ [Verilog file](https://github.com/fischermoseley/manta/blob/main/src/manta/block_memory.v).
diff --git a/mkdocs.yml b/mkdocs.yml
index bc6c8f8..f027bdc 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -61,7 +61,7 @@ nav:
- Getting Started: getting_started.md
- IO Core: io_core.md
- Logic Analyzer Core: logic_analyzer_core.md
- - Block Memory Core: block_memory_core.md
+ - Memory Core: memory_core.md
- UART Interace: uart_interface.md
- Ethernet Interface: ethernet_interface.md
- For Developers: