summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-03-20 23:08:31 -0600
committerAlejandro Soto <alejandro@34project.org>2024-03-20 23:08:31 -0600
commit19be5b2df2209ed22a1ab0aea10eccc6c02dbd19 (patch)
tree358fe51667114efd97e22bb8bb71b8ff76d0c70f
parentf1270a246570eacc093c836337dc55546aabd399 (diff)
doc/diagrams: update to match design doc
-rw-r--r--doc/diagrams/ready-valid.json7
-rw-r--r--doc/diagrams/shadercore.drawio17
-rw-r--r--doc/diagrams/systemlevel.drawio39
-rw-r--r--doc/diagrams/toplevel.drawio151
-rw-r--r--doc/diagrams/usecases.drawio94
5 files changed, 259 insertions, 49 deletions
diff --git a/doc/diagrams/ready-valid.json b/doc/diagrams/ready-valid.json
new file mode 100644
index 0000000..92b21e4
--- /dev/null
+++ b/doc/diagrams/ready-valid.json
@@ -0,0 +1,7 @@
+{"signal": [
+ {"name": "clk", "wave": "P................"},
+ {"name": "ready", "wave": "0.....1...0...10."},
+ {"name": "valid", "wave": "0..1....01.....0."},
+ {},
+ {"name": "data", "wave": "x..2...3x45....x.", "data": ["d0", "d1", "d2", "d3"]}
+]}
diff --git a/doc/diagrams/shadercore.drawio b/doc/diagrams/shadercore.drawio
index 3a736b6..faa83f5 100644
--- a/doc/diagrams/shadercore.drawio
+++ b/doc/diagrams/shadercore.drawio
@@ -1,6 +1,6 @@
-<mxfile host="app.diagrams.net" modified="2024-03-09T19:39:22.318Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="wiLOeqs3MdpZ5lo9C1Iq" version="24.0.4" type="device">
+<mxfile host="app.diagrams.net" modified="2024-03-13T07:39:41.440Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="qHIianCc7u_M4J3qsU5C" version="24.0.5" type="device">
<diagram name="Page-1" id="0X3vbdrHx6FdADkMzNYM">
- <mxGraphModel dx="1505" dy="1479" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <mxGraphModel dx="1474" dy="1438" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
@@ -192,9 +192,6 @@
<mxCell id="gaYdnUDOfFCHFR6QDy4r-104" value="&lt;div&gt;Mem response&lt;br&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="60" y="396.73" width="120" height="30" as="geometry" />
</mxCell>
- <mxCell id="WTEnEo_Mk6_HzpezZbvf-2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="gaYdnUDOfFCHFR6QDy4r-107" target="gaYdnUDOfFCHFR6QDy4r-108">
- <mxGeometry relative="1" as="geometry" />
- </mxCell>
<mxCell id="gaYdnUDOfFCHFR6QDy4r-107" value="&lt;div&gt;ready/valid&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="620" y="320" width="60" height="30" as="geometry" />
</mxCell>
@@ -240,9 +237,6 @@
<mxCell id="gaYdnUDOfFCHFR6QDy4r-125" value="&lt;div&gt;valid&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="300" y="320" width="60" height="30" as="geometry" />
</mxCell>
- <mxCell id="gaYdnUDOfFCHFR6QDy4r-126" value="Text" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
- <mxGeometry x="590" y="80" width="60" height="30" as="geometry" />
- </mxCell>
<mxCell id="gaYdnUDOfFCHFR6QDy4r-137" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=none;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="310" y="-160" as="targetPoint" />
@@ -302,8 +296,8 @@
<mxCell id="gaYdnUDOfFCHFR6QDy4r-154" value="Scheduler" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="850" y="500" width="60" height="30" as="geometry" />
</mxCell>
- <mxCell id="gaYdnUDOfFCHFR6QDy4r-155" value="&lt;div&gt;flag que indica terminación (irq?)&lt;br&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
- <mxGeometry x="730" y="426.73" width="140" height="30" as="geometry" />
+ <mxCell id="gaYdnUDOfFCHFR6QDy4r-155" value="irq que indica terminación" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="750" y="441.73" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="gaYdnUDOfFCHFR6QDy4r-157" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" target="gaYdnUDOfFCHFR6QDy4r-129" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
@@ -350,9 +344,6 @@
<mxPoint x="930" y="420" as="targetPoint" />
</mxGeometry>
</mxCell>
- <mxCell id="NUNQSg8QHiQw5XYEKLLS-2" value="&lt;div&gt;p4: Texture sampling&lt;/div&gt;&lt;div&gt;Dependerá del tiempo&lt;br&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="660" y="171" width="120" height="60" as="geometry" />
- </mxCell>
</root>
</mxGraphModel>
</diagram>
diff --git a/doc/diagrams/systemlevel.drawio b/doc/diagrams/systemlevel.drawio
index 914cbaf..797b7a0 100644
--- a/doc/diagrams/systemlevel.drawio
+++ b/doc/diagrams/systemlevel.drawio
@@ -1,6 +1,6 @@
-<mxfile host="app.diagrams.net" modified="2024-03-09T19:39:40.597Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="Mm2voV-u_1cDmMAsNbS4" version="24.0.4" type="device">
+<mxfile host="app.diagrams.net" modified="2024-03-13T22:50:33.701Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="PAWtuiVG_ZUraCSPmPm4" version="24.0.6" type="device">
<diagram name="Page-1" id="Q2LszdOE8oD0aeODJamO">
- <mxGraphModel dx="696" dy="1503" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <mxGraphModel dx="874" dy="1573" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
@@ -19,9 +19,6 @@
<mxCell id="-E1Ao5R2xKxs-zW9gW03-7" value="Shader core" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="130" y="260" width="80" height="80" as="geometry" />
</mxCell>
- <mxCell id="-E1Ao5R2xKxs-zW9gW03-8" value="Boot ROM" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="260" y="510" width="70" height="60" as="geometry" />
- </mxCell>
<mxCell id="-E1Ao5R2xKxs-zW9gW03-9" value="Scheduler SRAM" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="370" y="380" width="120" height="60" as="geometry" />
</mxCell>
@@ -43,12 +40,6 @@
<mxPoint x="500" y="450" as="targetPoint" />
</mxGeometry>
</mxCell>
- <mxCell id="-E1Ao5R2xKxs-zW9gW03-23" value="" style="shape=link;html=1;rounded=0;entryX=0.429;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="-E1Ao5R2xKxs-zW9gW03-8" edge="1">
- <mxGeometry width="100" relative="1" as="geometry">
- <mxPoint x="290" y="450" as="sourcePoint" />
- <mxPoint x="475" y="420" as="targetPoint" />
- </mxGeometry>
- </mxCell>
<mxCell id="-E1Ao5R2xKxs-zW9gW03-26" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="100" relative="1" as="geometry">
<mxPoint x="500" y="170" as="sourcePoint" />
@@ -148,12 +139,6 @@
<mxCell id="-E1Ao5R2xKxs-zW9gW03-53" value="&lt;div&gt;Graphics DRAM&lt;/div&gt;&lt;div&gt;Al menos 64MiB&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="110" y="-140" width="520" height="60" as="geometry" />
</mxCell>
- <mxCell id="s-TU3r22yMbpCtiJYlU4-91" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="-E1Ao5R2xKxs-zW9gW03-54" target="-E1Ao5R2xKxs-zW9gW03-62" edge="1">
- <mxGeometry relative="1" as="geometry" />
- </mxCell>
- <mxCell id="-E1Ao5R2xKxs-zW9gW03-54" value="Display controller (VDC)" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="560" y="510" width="120" height="60" as="geometry" />
- </mxCell>
<mxCell id="-E1Ao5R2xKxs-zW9gW03-55" value="Memory controller" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="100" y="-30" width="530" height="60" as="geometry" />
</mxCell>
@@ -166,24 +151,6 @@
<mxCell id="-E1Ao5R2xKxs-zW9gW03-58" value="&lt;div&gt;32Mx16bit DDR3 en DE1-SoC&lt;br&gt;32Mx16bitx2bancos en DE2i-150&lt;br&gt;&lt;/div&gt;&lt;div&gt;Irrelevante en Verilator&lt;br&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
<mxGeometry x="370" y="-90" width="200" height="60" as="geometry" />
</mxCell>
- <mxCell id="-E1Ao5R2xKxs-zW9gW03-60" value="&lt;div&gt;Tengo la extravagante hipótesis de que es posible obtener un surplus de bandwidth en Cyclone V de esta manera:&lt;/div&gt;&lt;div&gt;- Usar bridge f2s (poco documentado)&lt;/div&gt;&lt;div&gt;- Provocar un hard lock-up intencional en HPS&lt;br&gt;&lt;/div&gt;&lt;div&gt;- Agarrar lock de AXI desde FPGA y nunca soltarlo&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
- <mxGeometry x="52" y="-250" width="630" height="70" as="geometry" />
- </mxCell>
- <mxCell id="-E1Ao5R2xKxs-zW9gW03-62" value="Video DAC" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="560" y="620" width="120" height="60" as="geometry" />
- </mxCell>
- <mxCell id="-E1Ao5R2xKxs-zW9gW03-65" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
- <mxGeometry width="100" relative="1" as="geometry">
- <mxPoint x="500" y="450" as="sourcePoint" />
- <mxPoint x="620" y="450" as="targetPoint" />
- </mxGeometry>
- </mxCell>
- <mxCell id="-E1Ao5R2xKxs-zW9gW03-66" value="" style="shape=link;html=1;rounded=0;" parent="1" target="-E1Ao5R2xKxs-zW9gW03-54" edge="1">
- <mxGeometry width="100" relative="1" as="geometry">
- <mxPoint x="620" y="450" as="sourcePoint" />
- <mxPoint x="740" y="540" as="targetPoint" />
- </mxGeometry>
- </mxCell>
<mxCell id="s-TU3r22yMbpCtiJYlU4-5" value="Virtual FIFO" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;direction=south;" parent="1" vertex="1">
<mxGeometry x="1055" y="600" width="60" height="120" as="geometry" />
</mxCell>
@@ -262,7 +229,7 @@
<mxGeometry x="655" y="-32" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="s-TU3r22yMbpCtiJYlU4-42" value="&lt;b&gt;Nota: &lt;/b&gt;&quot;AXI4*&quot; es AXI4-Lite + IDs + bursts" style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
- <mxGeometry x="60" y="-280" width="231" height="40" as="geometry" />
+ <mxGeometry x="110" y="-170" width="231" height="40" as="geometry" />
</mxCell>
<mxCell id="s-TU3r22yMbpCtiJYlU4-51" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="s-TU3r22yMbpCtiJYlU4-44" target="s-TU3r22yMbpCtiJYlU4-11" edge="1">
<mxGeometry relative="1" as="geometry" />
diff --git a/doc/diagrams/toplevel.drawio b/doc/diagrams/toplevel.drawio
new file mode 100644
index 0000000..44f408d
--- /dev/null
+++ b/doc/diagrams/toplevel.drawio
@@ -0,0 +1,151 @@
+<mxfile host="app.diagrams.net" modified="2024-03-13T05:38:02.087Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="yiHlR6A42D_C2ZT4gc8G" version="24.0.5" type="device">
+ <diagram name="Page-1" id="rwhLFNzuSwDDQGD2A5Sg">
+ <mxGraphModel dx="874" dy="1573" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-1" value="&lt;div&gt;CPU&lt;br&gt;&lt;/div&gt;&lt;div&gt;VexRiscv&lt;/div&gt;" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="380" y="210" width="140" height="140" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-2" value="&lt;div&gt;Memoria de sistema&lt;/div&gt;&lt;div&gt;Al menos 16MiB&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="380" y="110" width="140" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-3" value="&lt;div&gt;GPU&lt;/div&gt;&lt;div&gt;Implementada como parte del producto&lt;br&gt;&lt;/div&gt;" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
+ <mxGeometry x="650" y="210" width="140" height="140" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-4" value="Memoria de vídeo" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="650" y="110" width="140" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-5" value="SGDMA AXI 32bits" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="520" y="20" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-6" target="RUWsAF9ddRFt_Wxrr_4N-7" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-6" value="Controlador de salida de vídeo (VDC)" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="850" y="110" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-7" value="Convertidor D/A de triple canal " style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="850" y="210" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-8" value="Pantalla o salida" style="shape=cube;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;darkOpacity=0.05;darkOpacity2=0.1;" parent="1" vertex="1">
+ <mxGeometry x="850" y="300" width="120" height="80" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-7" target="RUWsAF9ddRFt_Wxrr_4N-8" edge="1">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-12" value="" style="shape=link;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="RUWsAF9ddRFt_Wxrr_4N-3" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="520" y="279.58" as="sourcePoint" />
+ <mxPoint x="620" y="279.58" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-15" value="&lt;div&gt;Interfaz de&lt;/div&gt;&lt;div&gt;calendarizador&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
+ <mxGeometry x="560" y="240" width="100" height="40" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-16" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="640" y="49.58000000000001" as="sourcePoint" />
+ <mxPoint x="720" y="50" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-17" value="" style="shape=link;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="RUWsAF9ddRFt_Wxrr_4N-4" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="720" y="50" as="sourcePoint" />
+ <mxPoint x="700" y="100" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-18" value="" style="shape=link;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="RUWsAF9ddRFt_Wxrr_4N-5" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="440" y="50" as="sourcePoint" />
+ <mxPoint x="525" y="49.58000000000001" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-19" value="" style="shape=link;html=1;rounded=0;exitX=0.425;exitY=-0.011;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-2" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="520" y="200" as="sourcePoint" />
+ <mxPoint x="440" y="50" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-20" value="" style="shape=link;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-3" target="RUWsAF9ddRFt_Wxrr_4N-4" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="700" y="200" as="sourcePoint" />
+ <mxPoint x="620" y="200" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-21" value="" style="shape=link;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-4" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="780" y="130" as="sourcePoint" />
+ <mxPoint x="850" y="139.57999999999998" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-22" value="" style="shape=link;html=1;rounded=0;exitX=0.985;exitY=0.33;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-27" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="350" y="200" as="sourcePoint" />
+ <mxPoint x="530" y="200" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-23" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="530" y="200" as="sourcePoint" />
+ <mxPoint x="530" y="280" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-24" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="440" y="170" as="sourcePoint" />
+ <mxPoint x="440" y="200" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-25" value="Periféricos de baja velocidad ofrecidos por la plataforma (switches, botones, ...)" style="shape=label;whiteSpace=wrap;html=1;fixedSize=1;rounded=0;" parent="1" vertex="1">
+ <mxGeometry x="160" y="90" width="180" height="70" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-27" value="&lt;div&gt;Temporizador&lt;/div&gt;&lt;div&gt;Granularidad mín: 1ms&lt;br&gt;&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="180" y="180" width="130" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-29" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="340" y="124.71" as="sourcePoint" />
+ <mxPoint x="360" y="125" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-30" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="360" y="-10" as="sourcePoint" />
+ <mxPoint x="360" y="390" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-31" value="UART" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="185" y="270" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-32" value="&lt;div&gt;ROM&lt;/div&gt;" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+ <mxGeometry x="185" y="360" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-33" value="" style="shape=link;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-32" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="310" y="390" as="sourcePoint" />
+ <mxPoint x="360" y="390" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-34" value="" style="shape=link;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="305" y="299.71" as="sourcePoint" />
+ <mxPoint x="360" y="299.71" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-35" value="" style="shape=link;html=1;rounded=0;" parent="1" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="360" y="-10" as="sourcePoint" />
+ <mxPoint x="580" y="-10" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="RUWsAF9ddRFt_Wxrr_4N-36" value="" style="shape=link;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="RUWsAF9ddRFt_Wxrr_4N-5" edge="1">
+ <mxGeometry width="100" relative="1" as="geometry">
+ <mxPoint x="520" y="140" as="sourcePoint" />
+ <mxPoint x="580" y="-10" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+</mxfile>
diff --git a/doc/diagrams/usecases.drawio b/doc/diagrams/usecases.drawio
new file mode 100644
index 0000000..19896bf
--- /dev/null
+++ b/doc/diagrams/usecases.drawio
@@ -0,0 +1,94 @@
+<mxfile host="app.diagrams.net" modified="2024-03-14T02:10:05.956Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0" etag="a7uSP3LApET3o-PU5paG" version="24.0.6" type="device">
+ <diagram name="Page-1" id="sW1qzQkao8cC7eieJrQE">
+ <mxGraphModel dx="603" dy="326" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
+ <root>
+ <mxCell id="0" />
+ <mxCell id="1" parent="0" />
+ <mxCell id="Qmx1keI5x_QG-CHELu95-35" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="340" y="315" width="480" height="125" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-2" value="&lt;h1 style=&quot;margin-top: 0px;&quot;&gt;Actores&lt;/h1&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
+ <mxGeometry x="230" y="155" width="90" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-3" value="&lt;h1 style=&quot;margin-top: 0px;&quot;&gt;Servicios&lt;br&gt;&lt;/h1&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
+ <mxGeometry x="220" y="330" width="110" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-4" value="&lt;h1 style=&quot;margin-top: 0px;&quot;&gt;Producto&lt;br&gt;&lt;/h1&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
+ <mxGeometry x="530" y="400" width="110" height="30" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-7" value="Desarrolladores e investigadores" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="350" y="140" width="470" height="80" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-6" value="Usuarios finales" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="360" y="150" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-8" value="Renderizar gráficos en una aplicación interactiva" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="350" y="330" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-12" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.136;exitY=0.975;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="Qmx1keI5x_QG-CHELu95-6">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="510" y="330" as="sourcePoint" />
+ <mxPoint x="376" y="329" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-13" value="&lt;div&gt;Movimientos,&lt;/div&gt;&lt;div&gt;comandos&lt;br&gt;&lt;/div&gt;" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="Qmx1keI5x_QG-CHELu95-12">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-16" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.136;exitY=0.975;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="450" y="330" as="sourcePoint" />
+ <mxPoint x="450" y="210" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-17" value="&lt;div&gt;Vídeo en&lt;/div&gt;&lt;div&gt;pantalla&lt;br&gt;&lt;/div&gt;" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="Qmx1keI5x_QG-CHELu95-16">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-18" value="Escribir aplicaciones gráficas" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="520" y="330" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-19" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="530" y="218" as="sourcePoint" />
+ <mxPoint x="530" y="330" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-20" value="&lt;div&gt;Sombreadores,&lt;/div&gt;&lt;div&gt;Escenas,&lt;/div&gt;&lt;div&gt;Programas&lt;br&gt;&lt;/div&gt;" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="Qmx1keI5x_QG-CHELu95-19">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-22" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="630" y="332" as="sourcePoint" />
+ <mxPoint x="630" y="220" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-23" value="&lt;div&gt;Simulaciones&lt;br&gt;&lt;/div&gt;" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="Qmx1keI5x_QG-CHELu95-22">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-27" value="Extender o alterar las funciones del sistema" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="690" y="330" width="120" height="60" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-28" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.081;exitY=0.994;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="Qmx1keI5x_QG-CHELu95-34">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="700" y="218" as="sourcePoint" />
+ <mxPoint x="700" y="330" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-29" value="&lt;div&gt;RTL,&lt;/div&gt;&lt;div&gt;&lt;i&gt;firmware&lt;/i&gt;&lt;br&gt;&lt;/div&gt;" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="Qmx1keI5x_QG-CHELu95-28">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-30" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.957;entryY=0.875;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="Qmx1keI5x_QG-CHELu95-7">
+ <mxGeometry relative="1" as="geometry">
+ <mxPoint x="800" y="332" as="sourcePoint" />
+ <mxPoint x="800" y="220" as="targetPoint" />
+ </mxGeometry>
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-31" value="&lt;div&gt;Sistema de gráficos&lt;/div&gt;&lt;div&gt;modificado&lt;br&gt;&lt;/div&gt;" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="Qmx1keI5x_QG-CHELu95-30">
+ <mxGeometry relative="1" as="geometry" />
+ </mxCell>
+ <mxCell id="Qmx1keI5x_QG-CHELu95-34" value="Diseñadores" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
+ <mxGeometry x="690" y="150" width="120" height="60" as="geometry" />
+ </mxCell>
+ </root>
+ </mxGraphModel>
+ </diagram>
+</mxfile>