Add pic docs

This commit is contained in:
Byron Lathi
2023-11-19 22:09:45 -08:00
parent 013f47fb3f
commit 7f01b79abf
3 changed files with 60 additions and 0 deletions

405
doc/pic/pic.drawio Normal file
View File

@@ -0,0 +1,405 @@
<mxfile host="Electron" modified="2023-11-01T06:11:06.013Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.2.8 Chrome/112.0.5615.165 Electron/24.2.0 Safari/537.36" etag="4tOil3yPLSnD9o39OaK8" version="21.2.8" type="device">
<diagram name="Page-1" id="aqkBykuImbnj1wh3Ue84">
<mxGraphModel dx="2096" dy="855" 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="3cJaNxErLRnUAumjy6m_-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.25;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-1" target="3cJaNxErLRnUAumjy6m_-32">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-1" value="priority encoder" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="440" y="430" width="80" height="160" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-2" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="3.552713678800501e-15" y="470" as="sourcePoint" />
<mxPoint x="80" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-7" value="irq[0]" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-2">
<mxGeometry x="-0.6683" relative="1" as="geometry">
<mxPoint x="-33" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-3" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.188;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="3.552713678800501e-15" y="490" as="sourcePoint" />
<mxPoint x="80" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-8" value="irq[1]" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-3">
<mxGeometry x="-0.4849" y="-1" relative="1" as="geometry">
<mxPoint x="-41" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-4" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.188;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="3.552713678800501e-15" y="510" as="sourcePoint" />
<mxPoint x="80" y="510" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-9" value="irq[2]" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-4">
<mxGeometry x="-0.8014" relative="1" as="geometry">
<mxPoint x="-28" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-5" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.188;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="3.552713678800501e-15" y="560" as="sourcePoint" />
<mxPoint x="80" y="560" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-10" value="irq[n]" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-5">
<mxGeometry x="-0.7326" relative="1" as="geometry">
<mxPoint x="-31" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-6" value="..." style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="20.000000000000004" y="520" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-103" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-11" target="3cJaNxErLRnUAumjy6m_-102">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="240" y="660" />
<mxPoint x="710" y="660" />
<mxPoint x="710" y="500" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-11" value="edge/&lt;br&gt;level/&lt;br&gt;trigger" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="430" width="80" height="160" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-12" value="register" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="320" y="430" width="80" height="160" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-13" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="280" y="470" as="sourcePoint" />
<mxPoint x="320" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-15" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="280" y="490" as="sourcePoint" />
<mxPoint x="320" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-16" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="280" y="509.86" as="sourcePoint" />
<mxPoint x="320" y="509.86" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-17" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="280" y="560" as="sourcePoint" />
<mxPoint x="320" y="560" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-18" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="470" as="sourcePoint" />
<mxPoint x="440" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-19" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="490" as="sourcePoint" />
<mxPoint x="440" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-20" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="509.86" as="sourcePoint" />
<mxPoint x="440" y="509.86" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-21" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="560" as="sourcePoint" />
<mxPoint x="440" y="560" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-22" value="..." style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="280" y="520" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-23" value="..." style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="400" y="520" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-24" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="3cJaNxErLRnUAumjy6m_-11">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="220" y="400" as="sourcePoint" />
<mxPoint x="260" y="360" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-25" value="clk" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-24">
<mxGeometry x="-0.7388" relative="1" as="geometry">
<mxPoint y="-14" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-26" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="340" y="400" as="sourcePoint" />
<mxPoint x="340" y="430" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-27" value="clk" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-26">
<mxGeometry x="-0.7388" relative="1" as="geometry">
<mxPoint y="-14" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-64" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;shape=flexArrow;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-32" target="3cJaNxErLRnUAumjy6m_-102">
<mxGeometry relative="1" as="geometry">
<mxPoint x="720" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-66" value="irq_val_out" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-64">
<mxGeometry x="0.2445" y="5" relative="1" as="geometry">
<mxPoint x="-11" y="-15" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-111" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-32" target="3cJaNxErLRnUAumjy6m_-109">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="710" y="470" />
<mxPoint x="710" y="120" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-32" value="irq_val" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="440" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-34" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.75;exitDx=0;exitDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="600" y="540" as="sourcePoint" />
<mxPoint x="600" y="550" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-35" value="irq_out" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-34">
<mxGeometry x="0.5991" y="-1" relative="1" as="geometry">
<mxPoint x="52" y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-36" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-99" target="3cJaNxErLRnUAumjy6m_-11">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="260" y="400" as="sourcePoint" />
<mxPoint x="310" y="350" as="targetPoint" />
<Array as="points">
<mxPoint x="310" y="200" />
<mxPoint x="310" y="340" />
<mxPoint x="260" y="340" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-44" value="trigger_type" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-36">
<mxGeometry x="-0.5646" y="-2" relative="1" as="geometry">
<mxPoint x="-28" y="107" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-104" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-38" target="3cJaNxErLRnUAumjy6m_-102">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="120" y="700" />
<mxPoint x="760" y="700" />
<mxPoint x="760" y="530" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-38" value="enable" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="80" y="430" width="80" height="160" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-39" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160" y="470" as="sourcePoint" />
<mxPoint x="200" y="470" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-40" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160" y="490" as="sourcePoint" />
<mxPoint x="200" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-41" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160" y="509.86" as="sourcePoint" />
<mxPoint x="200" y="509.86" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-42" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160" y="560" as="sourcePoint" />
<mxPoint x="200" y="560" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-43" value="..." style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
<mxGeometry x="160" y="520" width="30" height="30" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-45" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="99.88999999999999" y="400" as="sourcePoint" />
<mxPoint x="99.88999999999999" y="430" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-46" value="clk" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-45">
<mxGeometry x="-0.7388" relative="1" as="geometry">
<mxPoint y="-14" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-47" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-99">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="139.89" y="400" as="sourcePoint" />
<mxPoint x="139.89" y="430" as="targetPoint" />
<Array as="points">
<mxPoint x="290" y="260" />
<mxPoint x="290" y="310" />
<mxPoint x="140" y="310" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-48" value="int_en" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-47">
<mxGeometry x="-0.5646" y="-2" relative="1" as="geometry">
<mxPoint x="-147" y="83" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-98" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-90" target="3cJaNxErLRnUAumjy6m_-96">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-101" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-90" target="3cJaNxErLRnUAumjy6m_-99">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-90" value="data_in mux" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;" vertex="1" parent="1">
<mxGeometry x="15.030000000000015" y="119.74000000000001" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-91" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="3cJaNxErLRnUAumjy6m_-90">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-34.969999999999985" y="149.74" as="sourcePoint" />
<mxPoint x="-24.969999999999985" y="109.74000000000001" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-92" value="data_in" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-91">
<mxGeometry x="-0.5289" y="-1" relative="1" as="geometry">
<mxPoint x="-49" y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-93" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="3cJaNxErLRnUAumjy6m_-90">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="75.03000000000002" y="39.739999999999995" as="sourcePoint" />
<mxPoint x="85.03000000000002" y="-10.260000000000005" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-94" value="addr" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-93">
<mxGeometry x="-0.8263" y="1" relative="1" as="geometry">
<mxPoint x="-1" y="-15" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-100" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-96" target="3cJaNxErLRnUAumjy6m_-99">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-105" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-96" target="3cJaNxErLRnUAumjy6m_-102">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="245" y="160" />
<mxPoint x="840" y="160" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-112" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-96" target="3cJaNxErLRnUAumjy6m_-109">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-118" value="cmd=EOI" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-112">
<mxGeometry x="-0.2899" relative="1" as="geometry">
<mxPoint x="16" y="-20" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-120" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-96" target="3cJaNxErLRnUAumjy6m_-38">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="215" y="160" />
<mxPoint x="120" y="160" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-121" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-96" target="3cJaNxErLRnUAumjy6m_-11">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="215" y="160" />
<mxPoint x="120" y="160" />
<mxPoint x="120" y="370" />
<mxPoint x="240" y="370" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-122" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-96" target="3cJaNxErLRnUAumjy6m_-12">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="215" y="160" />
<mxPoint x="120" y="160" />
<mxPoint x="120" y="370" />
<mxPoint x="360" y="370" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-123" value="byte_en" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-122">
<mxGeometry x="-0.7727" relative="1" as="geometry">
<mxPoint y="-10" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-96" value="CMD register" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="185.03000000000003" y="89.74000000000001" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-99" value="data_sel_mux" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=-90;" vertex="1" parent="1">
<mxGeometry x="185.03" y="200" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-106" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-102">
<mxGeometry relative="1" as="geometry">
<mxPoint x="920" y="499.85185185185173" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-107" value="data_out" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="3cJaNxErLRnUAumjy6m_-106">
<mxGeometry x="0.3413" y="-9" relative="1" as="geometry">
<mxPoint y="-39" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-102" value="" style="shape=trapezoid;perimeter=trapezoidPerimeter;whiteSpace=wrap;html=1;fixedSize=1;rotation=90;" vertex="1" parent="1">
<mxGeometry x="780" y="470" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-114" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-109" target="3cJaNxErLRnUAumjy6m_-113">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-109" value="EOI shifter" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="90" width="90" height="59.74" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-115" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;shape=flexArrow;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-113" target="3cJaNxErLRnUAumjy6m_-12">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="365" y="360" />
<mxPoint x="380" y="360" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-113" value="&amp;amp;" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxGeometry x="340" y="280" width="50" height="50" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-116" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.138;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="3cJaNxErLRnUAumjy6m_-12" target="3cJaNxErLRnUAumjy6m_-113">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="410" y="452" as="sourcePoint" />
<mxPoint x="460" y="330" as="targetPoint" />
<Array as="points">
<mxPoint x="420" y="452" />
<mxPoint x="420" y="305" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-117" value="&lt;h1&gt;EOI shifter&lt;/h1&gt;&lt;p&gt;EOI shifter will do 1 &amp;lt;&amp;lt; IRQN&amp;nbsp;&lt;span style=&quot;background-color: initial;&quot;&gt;and then clear that interrupt in the register&lt;/span&gt;&lt;/p&gt;" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
<mxGeometry x="420" y="170" width="190" height="120" as="geometry" />
</mxCell>
<mxCell id="3cJaNxErLRnUAumjy6m_-119" value="&lt;h1&gt;data_sel_mux&lt;/h1&gt;&lt;p&gt;The upper 3 bits of CMD determine where data goes. The lower 5 bits of cmd determine which of the 32 8 bit registers gets updated. The registers below all of byte enable signals that this is passed to.&lt;/p&gt;" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-160" y="210" width="220" height="150.26" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
doc/pic/pic.drawio.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

60
doc/pic/pic.md Normal file
View File

@@ -0,0 +1,60 @@
# PIC
## Overview
The PIC (Programmable Interrupt Controller) supports 256 edge or level
triggered interrupts.
Interrupts can only be rising edge or positive level trigger. Negative edge or
low level trigger can be accomplished by inverting the input to this module.
When an interrupt is triggered, it remains triggered until cleared with an
`EOI`. Currently, only the highest priority interrupt can be cleared. This
is bad design and will be fixed soon(tm).
![pic.drawio.png](pic.drawio.png)
## Interface
The PIC is controlled through two 8-bit registers, `CMD` and `DAT`.
The upepr 3 bits of `CMD` control which register is accessed, and the lower 5
bits control the byte select.
`EOI` is a special case: when `CMD` is 0xFF, the highest priority interrupt is
cleared.
### CMD
| [7:5] | [4:0] |
|------------------ |------------- |
| Register Address | Byte Select |
### DAT
| [7:0] |
|----------------------- |
| Data[8*Byte_sel +: 8] |
## Registers
### Register Map
| Address | Read | Write |
|--------- |------------ |-------- |
| 0 | IRQ Number | ~ |
| 1 | Enable | Enable |
| 2 | Type | Type |
### IRQ Number
8 bit register outputs the highest priority interrupt currently active. When
no interrupt is active, it will output 255.
### Enable
256 bit enable register. When bit _n_ is set to 1, the corresponding interrupt
_n_.
### Type
256 bit type register. When bit _n_ is set to 0, the corresponding interrupt
_n_ will be edge triggered. If the bit is set to 1, the interrupt will be level
triggered.