From 02e3847b22e7783809e5900656eebf3d02cbabd5 Mon Sep 17 00:00:00 2001
From: vauban353 <vauban353@gmail.com>
Date: Sun, 5 Feb 2023 10:03:39 +0000
Subject: [PATCH] Documentation: Add skeleton documentation for gateware
 overview and GPIO.

---
 .../BeagleVFire-ImmutableConnections.svg      | 324 ++++++++++
 doc/diagrams/BeagleVFire-overview.svg         | 578 ++++++++++++++++++
 doc/gateware_design_overview.md               |   9 +
 doc/mss_gpio.md                               |  41 ++
 doc/user_leds.md                              |  20 +
 5 files changed, 972 insertions(+)
 create mode 100644 doc/diagrams/BeagleVFire-ImmutableConnections.svg
 create mode 100644 doc/diagrams/BeagleVFire-overview.svg
 create mode 100644 doc/gateware_design_overview.md
 create mode 100644 doc/mss_gpio.md
 create mode 100644 doc/user_leds.md

diff --git a/doc/diagrams/BeagleVFire-ImmutableConnections.svg b/doc/diagrams/BeagleVFire-ImmutableConnections.svg
new file mode 100644
index 0000000..3843cc9
--- /dev/null
+++ b/doc/diagrams/BeagleVFire-ImmutableConnections.svg
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export BeagleVFire-ImmutableConnections.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="11.6929in" height="8.26772in"
+		viewBox="0 0 841.89 595.276" xml:space="preserve" color-interpolation-filters="sRGB" class="st9">
+	<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
+		<v:userDefs>
+			<v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
+			<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
+		</v:userDefs>
+	</v:documentProperties>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#fff2cc;fill-opacity:0.5;stroke:#000000;stroke-width:0.5}
+		.st2 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+		.st3 {fill:#f2f2f2;stroke:#000000;stroke-width:0.5}
+		.st4 {fill:#000000;font-family:Calibri;font-size:0.833336em;font-weight:bold}
+		.st5 {font-size:1em}
+		.st6 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st7 {fill:none;stroke:none;stroke-width:0.25}
+		.st8 {fill:#000000;font-family:Calibri;font-size:0.666664em}
+		.st9 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<v:userDefs>
+			<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
+		</v:userDefs>
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+				v:shadowOffsetY="-8.50394"/>
+		<v:layer v:name="Connector" v:index="0"/>
+		<g id="shape7-1" v:mID="7" v:groupContext="shape" transform="translate(155.906,-127.559)">
+			<title>Rectangle.7</title>
+			<desc>Immutable Connections</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+			<v:textRect cx="248.031" cy="382.677" width="496.07" height="425.197"/>
+			<rect x="0" y="170.079" width="496.063" height="425.197" class="st1"/>
+			<text x="4" y="186.68" class="st2" v:langID="6153"><v:paragraph/><v:tabList/>Immutable Connections</text>		</g>
+		<g id="shape1-4" v:mID="1" v:groupContext="shape" transform="translate(283.465,-255.118)">
+			<title>Rectangle</title>
+			<desc>Microprocessor Subsystem</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="92.126" cy="467.717" width="184.26" height="255.118"/>
+			<rect x="0" y="340.157" width="184.252" height="255.118" class="st3"/>
+			<text x="59.76" y="464.72" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Microprocessor<v:newlineChar/><tspan
+						x="69.72" dy="1.2em" class="st5">Subsystem</tspan></text>		</g>
+		<g id="shape2-8" v:mID="2" v:groupContext="shape" transform="translate(170.079,-297.638)">
+			<title>Rectangle.2</title>
+			<desc>USB</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st3"/>
+			<text x="19.92" y="584.1" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>USB</text>		</g>
+		<g id="shape3-11" v:mID="3" v:groupContext="shape" transform="translate(170.079,-481.89)">
+			<title>Rectangle.3</title>
+			<desc>Debug UART</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st3"/>
+			<text x="14.94" y="578.1" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Debug <tspan x="16.76"
+						dy="1.2em" class="st5">UART</tspan></text>		</g>
+		<g id="shape5-15" v:mID="5" v:groupContext="shape" transform="translate(524.409,-467.717)">
+			<title>Rectangle.5</title>
+			<desc>Ethernet</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="574.016" width="113.39" height="42.5197"/>
+			<rect x="0" y="552.756" width="113.386" height="42.5197" class="st3"/>
+			<text x="38.61" y="577.02" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Ethernet</text>		</g>
+		<g id="shape6-18" v:mID="6" v:groupContext="shape" transform="translate(524.409,-340.157)">
+			<title>Rectangle.6</title>
+			<desc>SYZYGY Connector</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="574.016" width="113.39" height="42.5197"/>
+			<rect x="0" y="552.756" width="113.386" height="42.5197" class="st3"/>
+			<text x="40.96" y="571.02" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>SYZYGY<v:newlineChar/><tspan
+						x="35.18" dy="1.2em" class="st5">Connector</tspan></text>		</g>
+		<g id="shape8-22" v:mID="8" v:groupContext="shape" transform="translate(170.079,-411.024)">
+			<title>Rectangle.8</title>
+			<desc>User Button</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st3"/>
+			<text x="18.79" y="578.1" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>User <tspan x="14.02"
+						dy="1.2em" class="st5">Button</tspan></text>		</g>
+		<g id="shape9-26" v:mID="9" v:groupContext="shape" transform="translate(170.079,-255.118)">
+			<title>Rectangle.9</title>
+			<desc>eMMC</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st3"/>
+			<text x="14.44" y="584.1" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>eMMC</text>		</g>
+		<g id="shape10-29" v:mID="10" v:groupContext="shape" v:layerMember="0" transform="translate(226.772,-262.205)">
+			<title>Dynamic connector</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 588.19 L56.69 588.19" class="st6"/>
+		</g>
+		<g id="shape11-32" v:mID="11" v:groupContext="shape" v:layerMember="0" transform="translate(226.772,-304.724)">
+			<title>Dynamic connector.11</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 588.19 L56.69 588.19" class="st6"/>
+		</g>
+		<g id="shape12-35" v:mID="12" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-361.417)">
+			<title>Dynamic connector.12</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 602.36 L56.69 602.36" class="st6"/>
+		</g>
+		<g id="shape13-38" v:mID="13" v:groupContext="shape" transform="translate(425.197,-432.283)">
+			<title>Sheet.13</title>
+			<desc>I2C0</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="21.2598" cy="588.189" width="42.52" height="14.1732"/>
+			<rect x="0" y="581.102" width="42.5197" height="14.1732" class="st7"/>
+			<text x="24.13" y="590.59" class="st8" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>I2C0</text>		</g>
+		<g id="shape15-41" v:mID="15" v:groupContext="shape" transform="translate(425.197,-262.205)">
+			<title>Sheet.15</title>
+			<desc>I2C1</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="21.2598" cy="588.189" width="42.52" height="14.1732"/>
+			<rect x="0" y="581.102" width="42.5197" height="14.1732" class="st7"/>
+			<text x="24.13" y="590.59" class="st8" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>I2C1</text>		</g>
+		<g id="shape16-44" v:mID="16" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-446.457)">
+			<title>Dynamic connector.16</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 602.36 L56.69 602.36" class="st6"/>
+		</g>
+		<g id="shape18-47" v:mID="18" v:groupContext="shape" transform="translate(425.197,-488.976)">
+			<title>Sheet.18</title>
+			<desc>SGMII0</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="21.2598" cy="588.189" width="42.52" height="14.1732"/>
+			<rect x="0" y="581.102" width="42.5197" height="14.1732" class="st7"/>
+			<text x="14.87" y="590.59" class="st8" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>SGMII0</text>		</g>
+		<g id="shape19-50" v:mID="19" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-488.976)">
+			<title>Dynamic connector.19</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 588.19 L56.69 588.19" class="st6"/>
+		</g>
+		<g id="shape20-53" v:mID="20" v:groupContext="shape" transform="translate(411.024,-474.803)">
+			<title>Sheet.20</title>
+			<desc>MAC0_MDIO</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="588.189" width="56.7" height="14.1732"/>
+			<rect x="0" y="581.102" width="56.6929" height="14.1732" class="st7"/>
+			<text x="9.85" y="590.59" class="st8" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>MAC0_MDIO</text>		</g>
+		<g id="shape21-56" v:mID="21" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-474.803)">
+			<title>Dynamic connector.21</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 588.19 L56.69 588.19" class="st6"/>
+		</g>
+		<g id="shape22-59" v:mID="22" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-439.37)">
+			<title>Dynamic connector.22</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L10.63 595.28 L10.63 666.73 L56.69 666.73" class="st6"/>
+		</g>
+		<g id="shape23-62" v:mID="23" v:groupContext="shape" transform="translate(425.197,-347.244)">
+			<title>Sheet.23</title>
+			<desc>SGMII1</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="21.2598" cy="588.189" width="42.52" height="14.1732"/>
+			<rect x="0" y="581.102" width="42.5197" height="14.1732" class="st7"/>
+			<text x="14.87" y="590.59" class="st8" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>SGMII1</text>		</g>
+		<g id="shape24-65" v:mID="24" v:groupContext="shape" transform="translate(524.409,-255.118)">
+			<title>Rectangle.24</title>
+			<desc>EEPROM</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st3"/>
+			<text x="10.24" y="584.1" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>EEPROM</text>		</g>
+		<g id="shape25-68" v:mID="25" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-276.378)">
+			<title>Dynamic connector.25</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 602.36 L56.69 602.36" class="st6"/>
+		</g>
+		<g id="shape26-71" v:mID="26" v:groupContext="shape" transform="translate(524.409,-198.425)">
+			<title>Rectangle.26</title>
+			<desc>M.2 Connectors</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="574.016" width="113.39" height="42.5197"/>
+			<rect x="0" y="552.756" width="113.386" height="42.5197" class="st3"/>
+			<text x="48.45" y="571.02" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>M.2<v:newlineChar/><tspan
+						x="33.19" dy="1.2em" class="st5">Connectors</tspan></text>		</g>
+		<g id="shape27-75" v:mID="27" v:groupContext="shape" transform="translate(524.409,-141.732)">
+			<title>Rectangle.27</title>
+			<desc>MIPI-CSI Connectors</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="574.016" width="113.39" height="42.5197"/>
+			<rect x="0" y="552.756" width="113.386" height="42.5197" class="st3"/>
+			<text x="39.12" y="571.02" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>MIPI-CSI<v:newlineChar/><tspan
+						x="33.19" dy="1.2em" class="st5">Connectors</tspan></text>		</g>
+		<g id="shape28-79" v:mID="28" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-269.291)">
+			<title>Dynamic connector.28</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L10.63 595.28 L10.63 701.57 L56.69 701.57" class="st6"/>
+		</g>
+		<g id="shape29-82" v:mID="29" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-269.291)">
+			<title>Dynamic connector.29</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L10.63 595.28 L10.63 644.88 L56.69 644.88" class="st6"/>
+		</g>
+		<g id="shape30-85" v:mID="30" v:groupContext="shape" transform="translate(283.465,-488.976)">
+			<title>Sheet.30</title>
+			<desc>MMUART0</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="588.189" width="56.7" height="14.1732"/>
+			<rect x="0" y="581.102" width="56.6929" height="14.1732" class="st7"/>
+			<text x="4" y="590.59" class="st8" v:langID="6153"><v:paragraph/><v:tabList/>MMUART0</text>		</g>
+		<g id="shape31-88" v:mID="31" v:groupContext="shape" v:layerMember="0" transform="translate(226.772,-488.976)">
+			<title>Dynamic connector.31</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 588.19 L56.69 588.19" class="st6"/>
+		</g>
+		<g id="group32-91" transform="translate(524.409,-396.85)" v:mID="32" v:groupContext="group">
+			<title>Sheet.32</title>
+			<g id="shape4-92" v:mID="4" v:groupContext="shape">
+				<title>Rectangle.4</title>
+				<desc>Cape Connectors</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+				<v:textRect cx="56.6929" cy="566.929" width="113.39" height="56.6929"/>
+				<rect x="0" y="538.583" width="113.386" height="56.6929" class="st3"/>
+				<text x="46.38" y="563.93" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Cape<v:newlineChar/><tspan
+							x="33.19" dy="1.2em" class="st5">Connectors</tspan></text>			</g>
+			<g id="shape17-96" v:mID="17" v:groupContext="shape" transform="translate(7.99361E-15,-42.5197)">
+				<title>Sheet.17</title>
+				<desc>P9 (19, 20)</desc>
+				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+				<v:textRect cx="28.3465" cy="590.551" width="56.7" height="9.44882"/>
+				<rect x="0" y="585.827" width="56.6929" height="9.44882" class="st7"/>
+				<text x="4" y="592.95" class="st8" v:langID="6153"><v:paragraph/><v:tabList/>P9 (19, 20)</text>			</g>
+		</g>
+		<g id="shape33-99" v:mID="33" v:groupContext="shape" v:layerMember="0" transform="translate(226.772,-418.11)">
+			<title>Dynamic connector.33</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 588.19 L56.69 588.19" class="st6"/>
+		</g>
+		<g id="shape34-102" v:mID="34" v:groupContext="shape" transform="translate(524.409,-297.638)">
+			<title>Rectangle.34</title>
+			<desc>ADC</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st3"/>
+			<text x="19.52" y="584.1" class="st4" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>ADC</text>		</g>
+		<g id="shape35-105" v:mID="35" v:groupContext="shape" transform="translate(425.197,-304.724)">
+			<title>Sheet.35</title>
+			<desc>QSPI</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="21.2598" cy="588.189" width="42.52" height="14.1732"/>
+			<rect x="0" y="581.102" width="42.5197" height="14.1732" class="st7"/>
+			<text x="23.31" y="590.59" class="st8" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>QSPI</text>		</g>
+		<g id="shape36-108" v:mID="36" v:groupContext="shape" v:layerMember="0" transform="translate(467.717,-304.724)">
+			<title>Dynamic connector.36</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 588.19 L56.69 588.19" class="st6"/>
+		</g>
+	</g>
+</svg>
diff --git a/doc/diagrams/BeagleVFire-overview.svg b/doc/diagrams/BeagleVFire-overview.svg
new file mode 100644
index 0000000..77c1bba
--- /dev/null
+++ b/doc/diagrams/BeagleVFire-overview.svg
@@ -0,0 +1,578 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export BeagleVFire-overview.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="11.6929in" height="8.26772in"
+		viewBox="0 0 841.89 595.276" xml:space="preserve" color-interpolation-filters="sRGB" class="st15">
+	<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
+		<v:userDefs>
+			<v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
+			<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
+		</v:userDefs>
+	</v:documentProperties>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#e2efd9;fill-opacity:0.5;stroke:#c7c8c8;stroke-width:0.25}
+		.st2 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-weight:bold}
+		.st3 {fill:#fbe5d5;stroke:#c7c8c8;stroke-width:0.25}
+		.st4 {fill:#000000;font-family:Calibri;font-size:1.16666em;font-style:italic}
+		.st5 {fill:#deebf6;stroke:#c7c8c8;stroke-width:0.25}
+		.st6 {font-size:1em}
+		.st7 {fill:#e2efd9;stroke:#c7c8c8;stroke-width:0.25}
+		.st8 {fill:#dae2f3;stroke:#c7c8c8;stroke-width:0.25}
+		.st9 {fill:#ededed;stroke:#000000;stroke-width:0.5}
+		.st10 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st11 {marker-end:url(#mrkr4-67);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st12 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.35714285714286}
+		.st13 {marker-end:url(#mrkr4-248);stroke:#000000;stroke-dasharray:2.25,2.25;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st14 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.29411764705882}
+		.st15 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Markers">
+		<g id="lend4">
+			<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
+		</g>
+		<marker id="mrkr4-67" class="st12" v:arrowType="4" v:arrowSize="1" v:setback="5.6" refX="-5.6" orient="auto"
+				markerUnits="strokeWidth" overflow="visible">
+			<use xlink:href="#lend4" transform="scale(-2.8,-2.8) "/>
+		</marker>
+		<marker id="mrkr4-248" class="st14" v:arrowType="4" v:arrowSize="1" v:setback="6.8" refX="-6.8" orient="auto"
+				markerUnits="strokeWidth" overflow="visible">
+			<use xlink:href="#lend4" transform="scale(-3.4,-3.4) "/>
+		</marker>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<v:userDefs>
+			<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
+		</v:userDefs>
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+				v:shadowOffsetY="-8.50394"/>
+		<v:layer v:name="Connector" v:index="0"/>
+		<g id="shape59-1" v:mID="59" v:groupContext="shape" transform="translate(105.732,-78.5197)">
+			<title>Rectangle.59</title>
+			<desc>BeagleV-Fire</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+			<v:textRect cx="304.724" cy="354.331" width="609.45" height="481.89"/>
+			<rect x="0" y="113.386" width="609.449" height="481.89" class="st1"/>
+			<text x="532.07" y="129.99" class="st2" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>BeagleV-Fire</text>		</g>
+		<g id="shape46-4" v:mID="46" v:groupContext="shape" transform="translate(119.906,-135.213)">
+			<title>Rectangle.46</title>
+			<desc>PolarFire SoC FPGA</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+			<v:textRect cx="290.551" cy="439.37" width="581.11" height="311.811"/>
+			<rect x="0" y="283.465" width="581.102" height="311.811" class="st3"/>
+			<text x="468.59" y="300.06" class="st4" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>PolarFire SoC FPGA</text>		</g>
+		<g id="shape26-7" v:mID="26" v:groupContext="shape" transform="translate(148.252,-149.386)">
+			<title>Rectangle.26</title>
+			<desc>FPGA I/Os</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+			<v:textRect cx="262.205" cy="545.669" width="524.41" height="99.2126"/>
+			<rect x="0" y="496.063" width="524.409" height="99.2126" class="st5"/>
+			<text x="489.81" y="512.66" class="st4" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>FPGA<v:newlineChar/><tspan
+						x="496.85" dy="1.2em" class="st6">I/Os</tspan></text>		</g>
+		<g id="shape14-11" v:mID="14" v:groupContext="shape" transform="translate(148.252,-248.598)">
+			<title>Rectangle.14</title>
+			<desc>FPGA Fabric</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+			<v:textRect cx="262.205" cy="559.843" width="524.41" height="70.8661"/>
+			<rect x="0" y="524.409" width="524.409" height="70.8661" class="st7"/>
+			<text x="489.81" y="541.01" class="st4" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>FPGA<v:newlineChar/><tspan
+						x="485.74" dy="1.2em" class="st6">Fabric</tspan></text>		</g>
+		<g id="shape13-15" v:mID="13" v:groupContext="shape" transform="translate(148.252,-319.465)">
+			<title>Rectangle</title>
+			<desc>Microprocessor Subsystem</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197" v:verticalAlign="0"/>
+			<v:textRect cx="262.205" cy="545.669" width="524.41" height="99.2126"/>
+			<rect x="0" y="496.063" width="524.409" height="99.2126" class="st8"/>
+			<text x="432.85" y="512.66" class="st4" v:langID="6153"><v:paragraph v:horizAlign="2"/><v:tabList/>Microprocessor<v:newlineChar/><tspan
+						x="460.08" dy="1.2em" class="st6">Subsystem</tspan></text>		</g>
+		<g id="shape2-19" v:mID="2" v:groupContext="shape" transform="translate(360.85,-348.402)">
+			<title>Rectangle.2</title>
+			<desc>RISC-V Microprocessor Subsystem</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="566.929" width="85.04" height="56.6929"/>
+			<rect x="0" y="538.583" width="85.0394" height="56.6929" class="st9"/>
+			<text x="29.21" y="557.93" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>RISC-V<v:newlineChar/><tspan
+						x="10.7" dy="1.2em" class="st6">Microprocessor<v:newlineChar/></tspan><tspan x="20.64" dy="1.2em"
+						class="st6">Subsystem</tspan></text>		</g>
+		<g id="shape4-24" v:mID="4" v:groupContext="shape" transform="translate(346.677,-475.37)">
+			<title>Rectangle.4</title>
+			<desc>eMMC</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="14.64" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>eMMC</text>		</g>
+		<g id="shape5-27" v:mID="5" v:groupContext="shape" transform="translate(162.425,-92.6929)">
+			<title>Rectangle.5</title>
+			<desc>User LEDs</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="8.25" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>User LEDs</text>		</g>
+		<g id="shape6-30" v:mID="6" v:groupContext="shape" transform="translate(474.236,-517.89)">
+			<title>Rectangle.6</title>
+			<desc>Ethernet</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="10.58" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Ethernet</text>		</g>
+		<g id="shape7-33" v:mID="7" v:groupContext="shape" transform="translate(162.425,-298.205)">
+			<title>Rectangle.7</title>
+			<desc>Clocks And Reset</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="574.016" width="56.7" height="42.5197"/>
+			<rect x="0" y="552.756" width="56.6929" height="42.5197" class="st9"/>
+			<text x="15.55" y="565.02" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Clocks<v:newlineChar/><tspan
+						x="20.2" dy="1.2em" class="st6">And<v:newlineChar/></tspan><tspan x="17.03" dy="1.2em" class="st6">Reset</tspan></text>		</g>
+		<g id="shape8-38" v:mID="8" v:groupContext="shape" transform="translate(162.425,-517.89)">
+			<title>Rectangle.8</title>
+			<desc>Reset Button</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="17.03" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Reset<v:newlineChar/><tspan
+						x="14.39" dy="1.2em" class="st6">Button</tspan></text>		</g>
+		<g id="shape9-42" v:mID="9" v:groupContext="shape" transform="translate(233.291,-517.89)">
+			<title>Rectangle.9</title>
+			<desc>User Button</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="18.95" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>User<v:newlineChar/><tspan
+						x="14.39" dy="1.2em" class="st6">Button</tspan></text>		</g>
+		<g id="shape10-46" v:mID="10" v:groupContext="shape" transform="translate(346.677,-262.772)">
+			<title>Rectangle.10</title>
+			<desc>Cape FPGA Block</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="574.016" width="85.04" height="42.5197"/>
+			<rect x="0" y="552.756" width="85.0394" height="42.5197" class="st9"/>
+			<text x="32.34" y="571.02" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Cape<v:newlineChar/><tspan
+						x="19.57" dy="1.2em" class="st6">FPGA Block</tspan></text>		</g>
+		<g id="shape11-50" v:mID="11" v:groupContext="shape" transform="translate(247.465,-262.772)">
+			<title>Rectangle.11</title>
+			<desc>M.2 FPGA Block</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="574.016" width="85.04" height="42.5197"/>
+			<rect x="0" y="552.756" width="85.0394" height="42.5197" class="st9"/>
+			<text x="34.45" y="571.02" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>M.2<v:newlineChar/><tspan
+						x="19.57" dy="1.2em" class="st6">FPGA Block</tspan></text>		</g>
+		<g id="shape12-54" v:mID="12" v:groupContext="shape" transform="translate(545.102,-262.772)">
+			<title>Rectangle.12</title>
+			<desc>High-Speed I/Os FPGA Block</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="574.016" width="85.04" height="42.5197"/>
+			<rect x="0" y="552.756" width="85.0394" height="42.5197" class="st9"/>
+			<text x="9.63" y="571.02" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>High-Speed I/Os<v:newlineChar/><tspan
+						x="19.57" dy="1.2em" class="st6">FPGA Block</tspan></text>		</g>
+		<g id="shape15-58" v:mID="15" v:groupContext="shape" transform="translate(431.717,-475.37)">
+			<title>Rectangle.15</title>
+			<desc>LPDDR4 Memory</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="12.26" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>LPDDR4<v:newlineChar/><tspan
+						x="10.95" dy="1.2em" class="st6">Memory</tspan></text>		</g>
+		<g id="shape16-62" v:mID="16" v:groupContext="shape" v:layerMember="0" transform="translate(183.685,-517.89)">
+			<title>Dynamic connector</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M7.09 595.28 L7.09 766.84" class="st11"/>
+		</g>
+		<g id="shape17-68" v:mID="17" v:groupContext="shape" v:layerMember="0" transform="translate(261.638,-517.89)">
+			<title>Dynamic connector.17</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 662.3 L120.47 662.3 L120.47 702.47" class="st11"/>
+		</g>
+		<g id="shape18-73" v:mID="18" v:groupContext="shape" v:layerMember="0" transform="translate(460.063,-475.37)">
+			<title>Dynamic connector.18</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L-0 609.45 L-49.61 609.45 L-49.61 659.95" class="st11"/>
+		</g>
+		<g id="shape19-78" v:mID="19" v:groupContext="shape" v:layerMember="0" transform="translate(375.024,-475.37)">
+			<title>Dynamic connector.19</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 609.45 L21.26 609.45 L21.26 659.95" class="st11"/>
+		</g>
+		<g id="shape20-83" v:mID="20" v:groupContext="shape" v:layerMember="0" transform="translate(502.583,-517.89)">
+			<title>Dynamic connector.20</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 654.92 L-85.04 654.92 L-85.04 702.47" class="st11"/>
+		</g>
+		<g id="shape21-88" v:mID="21" v:groupContext="shape" v:layerMember="0" transform="translate(367.937,-348.402)">
+			<title>Dynamic connector.21</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 611.22 L-134.65 611.22 L-134.65 746.17" class="st11"/>
+		</g>
+		<g id="shape22-93" v:mID="22" v:groupContext="shape" v:layerMember="0" transform="translate(431.717,-348.402)">
+			<title>Dynamic connector.22</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 611.22 L155.91 611.22 L155.91 632.79" class="st11"/>
+		</g>
+		<g id="shape23-98" v:mID="23" v:groupContext="shape" v:layerMember="0" transform="translate(384.095,-348.402)">
+			<title>Dynamic connector.23</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 617.48 L-94.11 617.48 L-94.11 632.79" class="st11"/>
+		</g>
+		<g id="shape24-103" v:mID="24" v:groupContext="shape" v:layerMember="0" transform="translate(403.37,-348.402)">
+			<title>Dynamic connector.24</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M-0 595.28 L-0 616.42 L-14.17 616.42 L-14.17 632.79" class="st11"/>
+		</g>
+		<g id="shape25-108" v:mID="25" v:groupContext="shape" transform="translate(559.276,-92.6929)">
+			<title>Rectangle.25</title>
+			<desc>SYZYGY Connector</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="13.24" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>SYZYGY<v:newlineChar/><tspan
+						x="7.13" dy="1.2em" class="st6">Connector</tspan></text>		</g>
+		<g id="shape27-112" v:mID="27" v:groupContext="shape" transform="translate(516.756,-475.37)">
+			<title>Rectangle.27</title>
+			<desc>SD-Card</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="12.01" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>SD-Card</text>		</g>
+		<g id="shape28-115" v:mID="28" v:groupContext="shape" transform="translate(261.638,-92.6929)">
+			<title>Rectangle.28</title>
+			<desc>M.2 Key E Connector</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="8.22" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>M.2 Key E<v:newlineChar/><tspan
+						x="7.13" dy="1.2em" class="st6">Connector</tspan></text>		</g>
+		<g id="shape29-119" v:mID="29" v:groupContext="shape" transform="translate(360.85,-92.6929)">
+			<title>Rectangle.29</title>
+			<desc>Cape Connectors</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="18.17" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Cape<v:newlineChar/><tspan
+						x="5.18" dy="1.2em" class="st6">Connectors</tspan></text>		</g>
+		<g id="shape30-123" v:mID="30" v:groupContext="shape" transform="translate(530.929,-206.079)">
+			<title>Rectangle.30</title>
+			<desc>Transceiver lanes 1, 2, 3</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="4.95" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Transceiver<v:newlineChar/><tspan
+						x="4.25" dy="1.2em" class="st6">lanes 1, 2, 3</tspan></text>		</g>
+		<g id="shape31-127" v:mID="31" v:groupContext="shape" transform="translate(261.638,-206.079)">
+			<title>Rectangle.31</title>
+			<desc>Transceiver lane 0</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="4.95" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Transceiver<v:newlineChar/><tspan
+						x="16.02" dy="1.2em" class="st6">lane 0</tspan></text>		</g>
+		<g id="shape32-131" v:mID="32" v:groupContext="shape" transform="translate(360.85,-163.559)">
+			<title>Rectangle.32</title>
+			<desc>I/Os</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="19.89" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>I/Os</text>		</g>
+		<g id="shape34-134" v:mID="34" v:groupContext="shape" transform="translate(204.945,-163.559)">
+			<title>Rectangle.34</title>
+			<desc>I/Os</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="19.89" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>I/Os</text>		</g>
+		<g id="shape35-137" v:mID="35" v:groupContext="shape" transform="translate(587.622,-163.559)">
+			<title>Rectangle.35</title>
+			<desc>High-Speed I/Os</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="5.05" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>High-Speed<v:newlineChar/><tspan
+						x="19.89" dy="1.2em" class="st6">I/Os</tspan></text>		</g>
+		<g id="shape36-141" v:mID="36" v:groupContext="shape" v:layerMember="0" transform="translate(233.291,-163.559)">
+			<title>Dynamic connector.36</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 601.75 L-42.52 601.75 L-42.52 632.2" class="st11"/>
+		</g>
+		<g id="shape37-146" v:mID="37" v:groupContext="shape" v:layerMember="0" transform="translate(382.11,-163.559)">
+			<title>Dynamic connector.37</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M7.09 595.28 L7.09 632.2" class="st11"/>
+		</g>
+		<g id="shape38-151" v:mID="38" v:groupContext="shape" v:layerMember="0" transform="translate(396.283,-262.772)">
+			<title>Dynamic connector.38</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M-7.09 595.28 L-7.09 660.54" class="st11"/>
+		</g>
+		<g id="shape39-156" v:mID="39" v:groupContext="shape" v:layerMember="0" transform="translate(282.898,-262.772)">
+			<title>Dynamic connector.39</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M7.09 595.28 L7.09 618.02" class="st11"/>
+		</g>
+		<g id="shape40-161" v:mID="40" v:groupContext="shape" v:layerMember="0" transform="translate(552.189,-262.772)">
+			<title>Dynamic connector.40</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M7.09 595.28 L7.09 618.02" class="st11"/>
+		</g>
+		<g id="shape41-166" v:mID="41" v:groupContext="shape" v:layerMember="0" transform="translate(623.055,-262.772)">
+			<title>Dynamic connector.41</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M-7.09 595.28 L-7.09 660.54" class="st11"/>
+		</g>
+		<g id="shape42-171" v:mID="42" v:groupContext="shape" v:layerMember="0" transform="translate(297.071,-206.079)">
+			<title>Dynamic connector.42</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M-7.09 595.28 L-7.09 674.71" class="st11"/>
+		</g>
+		<g id="shape43-176" v:mID="43" v:groupContext="shape" v:layerMember="0" transform="translate(559.276,-206.079)">
+			<title>Dynamic connector.43</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 643.09 L14.17 643.09 L14.17 674.71" class="st11"/>
+		</g>
+		<g id="shape44-181" v:mID="44" v:groupContext="shape" v:layerMember="0" transform="translate(615.969,-163.559)">
+			<title>Dynamic connector.44</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M-0 595.28 L-0 601.16 L-14.17 601.16 L-14.17 632.2" class="st11"/>
+		</g>
+		<g id="shape45-186" v:mID="45" v:groupContext="shape" v:layerMember="0" transform="translate(545.102,-475.37)">
+			<title>Dynamic connector.45</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 615.94 L-120.47 615.94 L-120.47 659.95" class="st11"/>
+		</g>
+		<g id="shape48-191" v:mID="48" v:groupContext="shape" transform="translate(389.197,-517.89)">
+			<title>Rectangle.48</title>
+			<desc>ADC</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="19.71" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>ADC</text>		</g>
+		<g id="shape49-194" v:mID="49" v:groupContext="shape" transform="translate(559.276,-517.89)">
+			<title>Rectangle.49</title>
+			<desc>USB</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="20.12" y="584.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>USB</text>		</g>
+		<g id="shape51-197" v:mID="51" v:groupContext="shape" transform="translate(460.063,-92.6929)">
+			<title>Rectangle.51</title>
+			<desc>MIPI-CSI Connector</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="11.22" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>MIPI-CSI<v:newlineChar/><tspan
+						x="7.13" dy="1.2em" class="st6">Connector</tspan></text>		</g>
+		<g id="shape52-201" v:mID="52" v:groupContext="shape" transform="translate(445.89,-262.772)">
+			<title>Rectangle.52</title>
+			<desc>MIPI CSI FPGA Block</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="574.016" width="85.04" height="42.5197"/>
+			<rect x="0" y="552.756" width="85.0394" height="42.5197" class="st9"/>
+			<text x="25.79" y="571.02" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>MIPI CSI<v:newlineChar/><tspan
+						x="19.57" dy="1.2em" class="st6">FPGA Block</tspan></text>		</g>
+		<g id="shape53-205" v:mID="53" v:groupContext="shape" transform="translate(460.063,-163.559)">
+			<title>Rectangle.53</title>
+			<desc>High-Speed I/Os</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="5.05" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>High-Speed<v:newlineChar/><tspan
+						x="19.89" dy="1.2em" class="st6">I/Os</tspan></text>		</g>
+		<g id="shape54-209" v:mID="54" v:groupContext="shape" v:layerMember="0" transform="translate(481.323,-163.559)">
+			<title>Dynamic connector.54</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M7.09 595.28 L7.09 632.2" class="st11"/>
+		</g>
+		<g id="shape55-214" v:mID="55" v:groupContext="shape" v:layerMember="0" transform="translate(481.323,-262.772)">
+			<title>Dynamic connector.55</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M7.09 595.28 L7.09 660.54" class="st11"/>
+		</g>
+		<g id="shape56-219" v:mID="56" v:groupContext="shape" v:layerMember="0" transform="translate(417.543,-348.402)">
+			<title>Dynamic connector.56</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 617.13 L70.87 617.13 L70.87 632.79" class="st11"/>
+		</g>
+		<g id="shape57-224" v:mID="57" v:groupContext="shape" v:layerMember="0" transform="translate(417.543,-517.89)">
+			<title>Dynamic connector.57</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M-0 595.28 L-0 648.72 L-14.17 648.72 L-14.17 702.47" class="st11"/>
+		</g>
+		<g id="shape58-229" v:mID="58" v:groupContext="shape" v:layerMember="0" transform="translate(587.622,-517.89)">
+			<title>Dynamic connector.58</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 661.89 L-155.91 661.89 L-155.91 702.47" class="st11"/>
+		</g>
+		<g id="shape61-234" v:mID="61" v:groupContext="shape" transform="translate(304.157,-517.89)">
+			<title>Rectangle.61</title>
+			<desc>Debug UART</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="28.3465" cy="581.102" width="56.7" height="28.3465"/>
+			<rect x="0" y="566.929" width="56.6929" height="28.3465" class="st9"/>
+			<text x="15.17" y="578.1" class="st10" v:langID="6153"><v:paragraph v:horizAlign="1"/><v:tabList/>Debug <v:newlineChar/><tspan
+						x="17.09" dy="1.2em" class="st6">UART</tspan></text>		</g>
+		<g id="shape62-238" v:mID="62" v:groupContext="shape" v:layerMember="0" transform="translate(332.504,-517.89)">
+			<title>Dynamic connector.62</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L0 657.87 L56.69 657.87 L56.69 702.47" class="st11"/>
+		</g>
+		<g id="shape63-243" v:mID="63" v:groupContext="shape" v:layerMember="0" transform="translate(360.85,-376.748)">
+			<title>Dynamic connector.63</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L-167.72 595.28 A2.3622 2.3622 -180 0 0 -172.44 595.28 L-228.57 595.28 L-228.57 888.17 L28.35 888.17
+						 L28.35 884.43" class="st13"/>
+		</g>
+		<g id="shape64-249" v:mID="64" v:groupContext="shape" v:layerMember="0" transform="translate(445.89,-376.748)">
+			<title>Dynamic connector.64</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+			</v:userDefs>
+			<path d="M0 595.28 L239.74 595.28 L239.74 886.98 L42.52 886.98 L42.52 884.43" class="st13"/>
+		</g>
+	</g>
+</svg>
diff --git a/doc/gateware_design_overview.md b/doc/gateware_design_overview.md
new file mode 100644
index 0000000..4449f78
--- /dev/null
+++ b/doc/gateware_design_overview.md
@@ -0,0 +1,9 @@
+# Gateware Design Overview
+
+## BeagleV-Fire Overview
+![Overview diagram](./diagrams/BeagleVFire-overview.svg)
+
+
+Part of the gateware design is not flexible, mainly due to physical connections of dedicated PolarFire SoC I/Os. These parts of the design are concentrated within the base core gateware design [TODO: nomenclature].
+
+![Immutable connections diagram](./diagrams/BeagleVFire-ImmutableConnections.svg)
diff --git a/doc/mss_gpio.md b/doc/mss_gpio.md
new file mode 100644
index 0000000..d7d1fc4
--- /dev/null
+++ b/doc/mss_gpio.md
@@ -0,0 +1,41 @@
+# Microprocessor Subsystem GPIO Controllers Pin Assignment
+The Microprocess Subsystem's (MSS) includes 3 GPIO controllers.
+
+
+|  Name  | Base Address | Linux Name |
+|--------|--------------|------------|
+| GPIO_0 |  0x20120000  |    gpio0   |
+| GPIO_1 |  0x20121000  |    gpio1   |
+| GPIO_2 |  0x20122000  |    gpio2   |
+
+
+## GPIO_0 pin assignment
+1.8V I/Os connected to I/O bank4. These GPIOs share pins with other MSS functions. As a result only a limited number of GPIOs from this controller are usable.
+
+| GPIO # | Type  | Function       |
+|--------|-------|----------------|
+|  0-11  |  n/a  | Unused         |
+|   12   |  out  | SD_CARD_CS     |
+|   13   |   in  | User button    |
+
+
+## GPIO_1 pin assignment
+3.3V I/Os connected to I/O bank2. These GPIOs share pins with other MSS functions. As a result only a limited number of GPIOs from this controller are usable.
+
+| GPIO # | Type  | Function       |
+|--------|-------|----------------|
+|  0-19  |  n/a  | Unused         |
+|   20   |   in  | ADC_IRQn       |
+|  21-22 |  n/a  | Unused         |
+|   23   |   in  | USB_OCn        |
+
+## GPIO_2 pin assignment
+The MSS GPIO_2 block's inputs and output are routed through the FPGA fabric to the PolarFire SoC's pins. The function of these GPIOs can be customized by the content of the FPGA. However, there is GPIOs expected to remain constant across designs.
+
+| GPIO # | Type  | Function       |
+|--------|-------|----------------|
+|  0-26  | inout | Routed to FPGA |
+| 27-29  |  n/a  | Non-assigned   |
+|   30   |  out  | VIO_ENABLE     |
+|   31   |   in  | SD_DET         |
+
diff --git a/doc/user_leds.md b/doc/user_leds.md
new file mode 100644
index 0000000..7e13407
--- /dev/null
+++ b/doc/user_leds.md
@@ -0,0 +1,20 @@
+# User LEDs
+The user LEDs are controlled from an FPGA fabric GPIO controller included within the RISC-V Processor Subsystem. GPIOs are connected to their respective pins through a User LED Pads FPGA logic block. Keeping the USer LED Pads block at the top of the gateware design allows esily overiding LEDs control by logic from another part of the FPGA design.
+
+The GPIO controller for the user LEDs is located at address 0x40000000.
+
+| LED # | GPIO # | Cape pin # |
+|-------|--------|------------|
+|   0   |    0   |  P8 pin 3  |
+|   1   |    1   |  P8 pin 4  |
+|   2   |    2   |  P8 pin 5  |
+|   3   |    3   |  P8 pin 6  |
+|   4   |    4   |  P8 pin 7  |
+|   5   |    5   |  P8 pin 8  |
+|   6   |    6   |  P8 pin 9  |
+|   7   |    7   |  P8 pin 10 |
+|   8   |    8   |  P8 pin 11 |
+|   9   |    9   |  P8 pin 12 |
+|  10   |   10   |  P8 pin 13 |
+|  11   |   11   |  P8 pin 14 |
+
-- 
GitLab