提交 f9299273 创建 作者: 赵鹏翀's avatar 赵鹏翀

make template

上级 f1d5ef01
添加文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="2132" version="1.1" width="2244" xmlns="http://www.w3.org/2000/svg">
<polyline fill="none" points="1121 588, 1371 588, 1371 1788, 1121 1788" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 608, 1391 608, 1391 1808, 1121 1808" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 628, 1411 628, 1411 1828, 1121 1828" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 648, 1431 648, 1431 1848, 1121 1848" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 668, 1451 668, 1451 1868, 1121 1868" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 688, 1471 688, 1471 1888, 1121 1888" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 568, 1351 568, 1351 1768, 1121 1768" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 1748, 1331 1748, 1331 548, 1121 548" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 528, 1311 528, 1311 1728, 1121 1728" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 1708, 1291 1708, 1291 508, 1121 508" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 488, 1271 488, 1271 1688, 1121 1688" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 1668, 1251 1668, 1251 468, 1121 468" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 708, 1491 708, 1491 1908, 1121 1908" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 1928, 1511 1928, 1511 728, 1121 728" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 748, 1531 748, 1531 1948, 1121 1948" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1121 1968, 1551 1968, 1551 768, 1121 768" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1251 468, 1771 468" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1271 488, 1771 488" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1291 508, 1771 508" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1311 528, 1771 528" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1331 548, 1771 548" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1351 568, 1771 568" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1371 588, 1771 588" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1391 608, 1771 608" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1411 628, 1771 628" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1431 648, 1771 648" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1451 668, 1771 668" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1471 688, 1771 688" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1491 708, 1771 708" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1511 728, 1771 728" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1531 748, 1771 748" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1551 768, 1771 768" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="468" y2="418"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="488" y2="438"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="508" y2="458"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="528" y2="478"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="548" y2="498"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="568" y2="518"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="588" y2="538"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="608" y2="558"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="628" y2="578"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="648" y2="598"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="668" y2="618"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="688" y2="638"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="708" y2="658"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="728" y2="678"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="748" y2="698"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1771" x2="1821" y1="768" y2="718"/>
<polyline fill="none" points="1821 768, 1821 398, 1971 398" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="1971 398, 1971 373, 2196 373, 2221 398, 2196 423, 1971 423, 1971 398" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1971" y="398">S[15..0]</text>
<polyline fill="none" points="871 468, 371 468" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 488, 371 488" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 508, 371 508" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 528, 371 528" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 548, 371 548" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 568, 371 568" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 588, 371 588" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 608, 371 608" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 628, 371 628" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 648, 371 648" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 668, 371 668" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 688, 371 688" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 708, 371 708" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 728, 371 728" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 748, 371 748" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 768, 371 768" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1668, 371 1668" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1688, 371 1688" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1708, 371 1708" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1728, 371 1728" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1748, 371 1748" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1768, 371 1768" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1788, 371 1788" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1808, 371 1808" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1828, 371 1828" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1848, 371 1848" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1868, 371 1868" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1888, 371 1888" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1908, 371 1908" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1928, 381 1928, 371 1928" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1948, 371 1948" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="871 1968, 371 1968" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="2018" y2="1968"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1998" y2="1948"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1978" y2="1928"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1958" y2="1908"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1938" y2="1888"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1918" y2="1868"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1898" y2="1848"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1878" y2="1828"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1858" y2="1808"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1838" y2="1788"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1818" y2="1768"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1798" y2="1748"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1778" y2="1728"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1758" y2="1708"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1738" y2="1688"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1718" y2="1668"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="818" y2="768"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="798" y2="748"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="778" y2="728"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="758" y2="708"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="738" y2="688"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="718" y2="668"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="698" y2="648"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="678" y2="628"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="658" y2="608"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="638" y2="588"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="618" y2="568"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="598" y2="548"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="578" y2="528"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="558" y2="508"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="538" y2="488"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="518" y2="468"/>
<polyline fill="none" points="321 858, 321 448, 181 448" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="321 2048, 321 1628, 171 1628" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="31 448, 31 423, 156 423, 181 448, 156 473, 31 473, 31 448" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="31" y="448">A[15..0]</text>
<polygon fill="#ffff80" points="21 1628, 21 1603, 146 1603, 171 1628, 146 1653, 21 1653, 21 1628" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="1628">B[15..0]</text>
<polygon fill="#ffff80" points="21 1178, 21 1153, 146 1153, 171 1178, 146 1203, 21 1203, 21 1178" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="1178">Select</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="771" x2="771" y1="1008" y2="1068"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="771" x2="771" y1="928" y2="868"/>
<circle cx="771" cy="932" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="721 1008, 821 1008, 771 938, 721 1008" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" transform="rotate(-90 735 988)" x="735" y="988">U1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" transform="rotate(-90 867 1008)" x="867" y="1008">NOT</text>
<polyline fill="none" points="871 2018, 771 2018, 771 1478, 771 1068" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="468">A0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="488">A1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="508">A2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="528">A3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="548">A4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="568">A5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="588">A6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="608">A7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="628">A8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="648">A9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="668">A10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="688">A11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="708">A12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="728">A13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="748">A14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="768">A15</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1668">B0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1688">B1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1708">B2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1728">B3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1748">B4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1768">B5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1788">B6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1808">B7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1828">B8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1848">B9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1868">B10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1888">B11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1908">B12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1928">B13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1948">B14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="471" y="1968">B15</text>
<polyline fill="none" points="871 818, 771 818, 771 868" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="171 1178, 771 1178" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1251" y="468">S0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1271" y="488">S1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1291" y="508">S2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1311" y="528">S3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1331" y="548">S4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1351" y="568">S5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1371" y="588">S6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1391" y="608">S7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1411" y="628">S8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1431" y="648">S9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1451" y="668">S10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1471" y="688">S11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1491" y="708">S12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1511" y="728">S13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1531" y="748">S14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1551" y="768">S15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="468" y2="468"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="468">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="488" y2="488"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="488">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="508" y2="508"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="508">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="528" y2="528"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="528">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="548" y2="548"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="548">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="568" y2="568"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="568">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="588" y2="588"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="588">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="608" y2="608"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="608">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="628" y2="628"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="628">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="648" y2="648"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="648">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="668" y2="668"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="668">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="688" y2="688"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="688">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="708" y2="708"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="708">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="728" y2="728"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="728">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="748" y2="748"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="748">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="768" y2="768"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="768">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="468" y2="468"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="468">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="488" y2="488"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="488">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="508" y2="508"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="508">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="528" y2="528"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="528">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="548" y2="548"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="548">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="568" y2="568"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="568">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="588" y2="588"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="588">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="608" y2="608"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="608">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="628" y2="628"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="628">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="648" y2="648"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="648">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="668" y2="668"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="668">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="688" y2="688"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="688">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="708" y2="708"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="708">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="728" y2="728"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="728">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="748" y2="748"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="748">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="768" y2="768"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="768">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="911" x2="871" y1="818" y2="818"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="818">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="921" y="438"/>
<circle cx="916" cy="818" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="60" font-weight="700" text-anchor="start" x="871" y="418">A_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="881" y="908">BUS_TRANS161</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1668" y2="1668"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1668">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1688" y2="1688"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1688">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1708" y2="1708"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1708">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1728" y2="1728"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1728">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1748" y2="1748"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1748">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1768" y2="1768"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1768">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1788" y2="1788"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1788">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1808" y2="1808"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1808">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1828" y2="1828"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1828">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1848" y2="1848"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="1848">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1868" y2="1868"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="1868">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1888" y2="1888"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="1888">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1908" y2="1908"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="1908">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1928" y2="1928"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="1928">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1948" y2="1948"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="1948">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="921" x2="871" y1="1968" y2="1968"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="974" y="1968">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1668" y2="1668"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1668">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1688" y2="1688"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1688">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1708" y2="1708"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1708">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1728" y2="1728"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1728">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1748" y2="1748"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1748">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1768" y2="1768"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1768">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1788" y2="1788"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1788">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1808" y2="1808"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1808">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1828" y2="1828"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1828">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1848" y2="1848"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1848">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1868" y2="1868"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1868">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1888" y2="1888"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1888">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1908" y2="1908"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1908">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1928" y2="1928"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1928">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1948" y2="1948"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1948">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1071" x2="1121" y1="1968" y2="1968"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1028" y="1968">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="911" x2="871" y1="2018" y2="2018"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="964" y="2018">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="921" y="1638"/>
<circle cx="916" cy="2018" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="60" font-weight="700" text-anchor="start" x="871" y="1618">B_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="881" y="2108">BUS_TRANS161</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="180" font-weight="700" text-anchor="start" x="471" y="268">2选1复用器</text>
<circle cx="1551" cy="768" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1531" cy="748" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1511" cy="728" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1491" cy="708" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1471" cy="688" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1451" cy="668" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1431" cy="648" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1411" cy="628" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1391" cy="608" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1371" cy="588" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1351" cy="568" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1331" cy="548" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1311" cy="528" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1291" cy="508" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1271" cy="488" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1251" cy="468" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="771" cy="1178" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
</svg>
添加文件
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="3081" version="1.1" width="2343" xmlns="http://www.w3.org/2000/svg">
<polyline fill="none" points="1221 986, 1471 986, 1471 2186, 1221 2186" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1006, 1491 1006, 1491 2206, 1221 2206" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1026, 1511 1026, 1511 2226, 1221 2226" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1046, 1531 1046, 1531 2246, 1221 2246" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1066, 1551 1066, 1551 2266, 1221 2266" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1086, 1571 1086, 1571 2286, 1221 2286" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 966, 1451 966, 1451 2166, 1221 2166" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2146, 1431 2146, 1431 946, 1221 946" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 926, 1411 926, 1411 2126, 1221 2126" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2106, 1391 2106, 1391 906, 1221 906" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 886, 1371 886, 1371 2086, 1221 2086" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2066, 1351 2066, 1351 866, 1221 866" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1106, 1591 1106, 1591 2306, 1221 2306" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2326, 1611 2326, 1611 1126, 1221 1126" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1146, 1631 1146, 1631 2346, 1221 2346" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2366, 1651 2366, 1651 1166, 1221 1166" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1466, 1351 1466" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1486, 1371 1486" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1506, 1391 1506" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1526, 1411 1526" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1546, 1431 1546" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1566, 1451 1566" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1586, 1471 1586" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1606, 1491 1606" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1626, 1511 1626" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1646, 1531 1646" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1666, 1551 1666" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1686, 1571 1686" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1706, 1591 1706" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1726, 1611 1726" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1746, 1631 1746" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 1766, 1651 1766" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1351 866, 1871 866" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1371 886, 1871 886" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1391 906, 1871 906" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1411 926, 1871 926" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1431 946, 1871 946" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1451 966, 1871 966" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1471 986, 1871 986" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1491 1006, 1871 1006" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1511 1026, 1871 1026" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1531 1046, 1871 1046" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1551 1066, 1871 1066" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1571 1086, 1871 1086" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1591 1106, 1871 1106" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1611 1126, 1871 1126" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1631 1146, 1871 1146" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1651 1166, 1871 1166" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="866" y2="816"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="886" y2="836"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="906" y2="856"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="926" y2="876"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="946" y2="896"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="966" y2="916"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="986" y2="936"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1006" y2="956"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1026" y2="976"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1046" y2="996"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1066" y2="1016"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1086" y2="1036"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1106" y2="1056"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1126" y2="1076"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1146" y2="1096"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1871" x2="1921" y1="1166" y2="1116"/>
<polyline fill="none" points="971 866, 471 866" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 886, 471 886" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 906, 471 906" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 926, 471 926" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 946, 471 946" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 966, 471 966" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 986, 471 986" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1006, 471 1006" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1026, 471 1026" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1046, 471 1046" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1066, 471 1066" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1086, 471 1086" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1106, 471 1106" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1126, 471 1126" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1146, 471 1146" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1166, 471 1166" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1466, 471 1466" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1486, 471 1486" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1506, 471 1506" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1526, 471 1526" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1546, 471 1546" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1566, 471 1566" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1586, 471 1586" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1606, 471 1606" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1626, 471 1626" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1646, 471 1646" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1666, 471 1666" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1686, 471 1686" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1706, 471 1706" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1726, 471 1726" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1746, 471 1746" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 1766, 471 1766" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2066, 471 2066" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2086, 471 2086" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2106, 471 2106" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2126, 471 2126" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2146, 471 2146" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2166, 471 2166" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2186, 471 2186" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2206, 471 2206" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2226, 471 2226" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2246, 471 2246" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2266, 471 2266" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2286, 471 2286" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2306, 471 2306" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2326, 481 2326, 471 2326" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2346, 471 2346" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2366, 471 2366" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2416" y2="2366"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2396" y2="2346"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2376" y2="2326"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2356" y2="2306"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2336" y2="2286"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2316" y2="2266"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2296" y2="2246"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2276" y2="2226"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2256" y2="2206"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2236" y2="2186"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2216" y2="2166"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2196" y2="2146"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2176" y2="2126"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2156" y2="2106"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2136" y2="2086"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2116" y2="2066"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1816" y2="1766"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1796" y2="1746"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1776" y2="1726"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1756" y2="1706"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1736" y2="1686"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1716" y2="1666"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1696" y2="1646"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1676" y2="1626"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1656" y2="1606"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1636" y2="1586"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1616" y2="1566"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1596" y2="1546"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1576" y2="1526"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1556" y2="1506"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1536" y2="1486"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1516" y2="1466"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1216" y2="1166"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1196" y2="1146"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1176" y2="1126"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1156" y2="1106"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1136" y2="1086"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1116" y2="1066"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1096" y2="1046"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1076" y2="1026"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1056" y2="1006"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1036" y2="986"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="1016" y2="966"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="996" y2="946"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="976" y2="926"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="956" y2="906"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="936" y2="886"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="916" y2="866"/>
<polygon fill="#ffff80" points="21 866, 21 841, 246 841, 271 866, 246 891, 21 891, 21 866" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="866">A[15..0]</text>
<polygon fill="#ffff80" points="21 1466, 21 1441, 246 1441, 271 1466, 246 1491, 21 1491, 21 1466" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="1466">B[15..0]</text>
<polygon fill="#ffff80" points="21 2066, 21 2041, 246 2041, 271 2066, 246 2091, 21 2091, 21 2066" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="2066">C[15..0]</text>
<polyline fill="none" points="421 1216, 421 866, 271 866" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="421 1816, 421 1466, 271 1466" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="421 2416, 421 2066, 271 2066" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="1921 1116, 1921 786, 2071 786" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="2071 786, 2071 761, 2296 761, 2321 786, 2296 811, 2071 811, 2071 786" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2071" y="786">F[15..0]</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="866">A0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="886">A1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="906">A2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="926">A3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="946">A4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="966">A5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="986">A6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1006">A7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1026">A8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1046">A9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1066">A10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1086">A11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1106">A12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1126">A13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1146">A14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1166">A15</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1466">B0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1486">B1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1506">B2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1526">B3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1546">B4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1566">B5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1586">B6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1606">B7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1626">B8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1646">B9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1666">B10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1686">B11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1706">B12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1726">B13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1746">B14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="1766">B15</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2066">C0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2086">C1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2106">C2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2126">C3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2146">C4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2166">C5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2186">C6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2206">C7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2226">C8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2246">C9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2266">C10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2286">C11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2306">C12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2326">C13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2346">C14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2366">C15</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="866">F0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="886">F1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="906">F2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="926">F3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="946">F4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="966">F5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="986">F6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1006">F7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1026">F8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1046">F9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1066">F10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1086">F11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1106">F12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1126">F13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1146">F14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1651" y="1166">F15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="866" y2="866"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="866">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="886" y2="886"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="886">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="906" y2="906"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="906">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="926" y2="926"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="926">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="946" y2="946"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="946">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="966" y2="966"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="966">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="986" y2="986"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="986">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1006" y2="1006"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1006">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1026" y2="1026"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1026">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1046" y2="1046"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1046">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1066" y2="1066"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1066">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1086" y2="1086"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1086">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1106" y2="1106"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1106">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1126" y2="1126"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1126">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1146" y2="1146"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1146">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1166" y2="1166"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1166">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="866" y2="866"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="866">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="886" y2="886"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="886">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="906" y2="906"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="906">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="926" y2="926"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="926">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="946" y2="946"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="946">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="966" y2="966"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="966">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="986" y2="986"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="986">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1006" y2="1006"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1006">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1026" y2="1026"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1026">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1046" y2="1046"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1046">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1066" y2="1066"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1066">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1086" y2="1086"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1086">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1106" y2="1106"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1106">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1126" y2="1126"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1126">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1146" y2="1146"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1146">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1166" y2="1166"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1166">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1011" x2="971" y1="1216" y2="1216"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1216">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="1021" y="836"/>
<circle cx="1016" cy="1216" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="55" font-weight="700" text-anchor="start" x="991" y="826">A_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="981" y="1306">BUS_TRANS161</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1466" y2="1466"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1466">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1486" y2="1486"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1486">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1506" y2="1506"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1506">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1526" y2="1526"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1526">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1546" y2="1546"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1546">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1566" y2="1566"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1566">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1586" y2="1586"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1586">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1606" y2="1606"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1606">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1626" y2="1626"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1626">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1646" y2="1646"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1646">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1666" y2="1666"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1666">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1686" y2="1686"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1686">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1706" y2="1706"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1706">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1726" y2="1726"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1726">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1746" y2="1746"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1746">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="1766" y2="1766"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="1766">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1466" y2="1466"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1466">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1486" y2="1486"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1486">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1506" y2="1506"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1506">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1526" y2="1526"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1526">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1546" y2="1546"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1546">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1566" y2="1566"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1566">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1586" y2="1586"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1586">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1606" y2="1606"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1606">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1626" y2="1626"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1626">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1646" y2="1646"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1646">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1666" y2="1666"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1666">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1686" y2="1686"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1686">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1706" y2="1706"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1706">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1726" y2="1726"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1726">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1746" y2="1746"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1746">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="1766" y2="1766"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="1766">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1011" x2="971" y1="1816" y2="1816"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="1816">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="1021" y="1436"/>
<circle cx="1016" cy="1816" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="55" font-weight="700" text-anchor="start" x="991" y="1426">B_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="981" y="1906">BUS_TRANS161</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2066" y2="2066"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2066">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2086" y2="2086"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2086">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2106" y2="2106"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2106">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2126" y2="2126"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2126">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2146" y2="2146"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2146">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2166" y2="2166"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2166">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2186" y2="2186"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2186">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2206" y2="2206"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2206">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2226" y2="2226"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2226">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2246" y2="2246"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2246">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2266" y2="2266"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2266">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2286" y2="2286"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2286">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2306" y2="2306"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2306">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2326" y2="2326"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2326">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2346" y2="2346"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2346">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2366" y2="2366"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2366">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2066" y2="2066"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2066">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2086" y2="2086"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2086">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2106" y2="2106"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2106">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2126" y2="2126"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2126">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2146" y2="2146"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2146">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2166" y2="2166"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2166">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2186" y2="2186"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2186">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2206" y2="2206"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2206">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2226" y2="2226"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2226">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2246" y2="2246"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2246">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2266" y2="2266"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2266">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2286" y2="2286"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2286">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2306" y2="2306"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2306">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2326" y2="2326"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2326">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2346" y2="2346"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2346">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2366" y2="2366"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2366">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1011" x2="971" y1="2416" y2="2416"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2416">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="1021" y="2036"/>
<circle cx="1016" cy="2416" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="55" font-weight="700" text-anchor="start" x="991" y="2026">C_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="981" y="2506">BUS_TRANS161</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2616" y2="2616"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2616">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2636" y2="2636"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2636">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2656" y2="2656"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2656">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2676" y2="2676"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2676">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2696" y2="2696"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2696">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2716" y2="2716"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2716">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2736" y2="2736"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2736">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2756" y2="2756"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2756">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2776" y2="2776"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2776">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2796" y2="2796"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2796">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2816" y2="2816"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2816">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2836" y2="2836"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2836">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2856" y2="2856"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2856">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2876" y2="2876"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2876">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2896" y2="2896"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2896">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="971" y1="2916" y2="2916"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1074" y="2916">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2616" y2="2616"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2616">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2636" y2="2636"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2636">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2656" y2="2656"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2656">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2676" y2="2676"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2676">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2696" y2="2696"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2696">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2716" y2="2716"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2716">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2736" y2="2736"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2736">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2756" y2="2756"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2756">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2776" y2="2776"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2776">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2796" y2="2796"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2796">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2816" y2="2816"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2816">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2836" y2="2836"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2836">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2856" y2="2856"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2856">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2876" y2="2876"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2876">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2896" y2="2896"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2896">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1171" x2="1221" y1="2916" y2="2916"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="1128" y="2916">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1011" x2="971" y1="2966" y2="2966"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="1064" y="2966">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="1021" y="2586"/>
<circle cx="1016" cy="2966" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="55" font-weight="700" text-anchor="start" x="991" y="2576">D_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="981" y="3056">BUS_TRANS161</text>
<polyline fill="none" points="1221 2616, 1351 2616, 1351 2066" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2636, 1371 2636, 1371 2086" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2656, 1391 2656, 1391 2106" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2676, 1411 2676, 1411 2126" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2696, 1431 2696, 1431 2146" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2716, 1451 2716, 1451 2166" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2736, 1471 2736, 1471 2186" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2756, 1491 2756, 1491 2206" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2776, 1511 2776, 1511 2226" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2796, 1531 2796, 1531 2246" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2816, 1551 2816, 1551 2266" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2836, 1571 2836, 1571 2286" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2856, 1591 2856, 1591 2306" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2876, 1611 2876, 1611 2326" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2896, 1631 2896, 1631 2346" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1221 2916, 1651 2916, 1651 2366" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2616, 471 2616" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2636, 471 2636" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2656, 471 2656" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2676, 471 2676" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2696, 471 2696" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2716, 471 2716" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2736, 471 2736" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2756, 471 2756" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2776, 471 2776" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2796, 471 2796" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2816, 471 2816" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2836, 471 2836" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2856, 471 2856" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2876, 471 2876" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2896, 471 2896" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="971 2916, 471 2916" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2666" y2="2616"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2686" y2="2636"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2706" y2="2656"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2726" y2="2676"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2746" y2="2696"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2766" y2="2716"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2786" y2="2736"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2806" y2="2756"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2826" y2="2776"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2846" y2="2796"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2866" y2="2816"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2886" y2="2836"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2906" y2="2856"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2926" y2="2876"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2946" y2="2896"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="421" x2="471" y1="2966" y2="2916"/>
<polyline fill="none" points="421 2966, 421 2616, 271 2616" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="21 2616, 21 2591, 246 2591, 271 2616, 246 2641, 21 2641, 21 2616" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="2616">D[15..0]</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2616">D0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2636">D1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2656">D2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2676">D3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2696">D4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2716">D5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2736">D6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2756">D7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2776">D8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2796">D9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2816">D10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2836">D11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2856">D12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2876">D13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2896">D14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="571" y="2916">D15</text>
<polygon fill="#ffff80" points="31 406, 31 381, 156 381, 181 406, 156 431, 31 431, 31 406" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="31" y="406">S0</text>
<polygon fill="#ffff80" points="31 506, 31 481, 156 481, 181 506, 156 531, 31 531, 31 506" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="31" y="506">S1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="421" x2="381" y1="496" y2="496"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="483" y="493">^1G</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="404" y="496">1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="431" x2="381" y1="406" y2="406"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="464" y="407">A</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="403" y="405">2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="431" x2="381" y1="436" y2="436"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="464" y="436">B</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="403" y="435">3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="591" x2="631" y1="406" y2="406"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="550" y="412">Y0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="610" y="406">4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="591" x2="631" y1="436" y2="436"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="551" y="440">Y1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="610" y="436">5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="591" x2="631" y1="466" y2="466"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="551" y="468">Y2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="610" y="466">6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="591" x2="631" y1="496" y2="496"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="551" y="496">Y3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="611" y="497">7</text>
<circle cx="426" cy="496" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="586" cy="406" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="587" cy="496" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="586" cy="467" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="586" cy="436" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<rect fill="#ffffff" fill-opacity="0.5" height="124" stroke="#000000" stroke-width="5" width="146" x="433" y="390"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="500" y="384">U1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="435" y="556">74LS139D</text>
<polyline fill="none" points="181 406, 381 406" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="381 436, 181 436, 181 506" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="631 406, 881 406, 881 1216, 971 1216" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="631 436, 861 436, 861 1816, 971 1816" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="631 466, 841 466, 841 2416, 971 2416" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="631 496, 821 496, 821 2966, 971 2966" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="150" font-weight="700" text-anchor="start" x="471" y="226">4选1复用器</text>
<circle cx="1651" cy="2366" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1631" cy="2346" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1611" cy="2326" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1591" cy="2306" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1571" cy="2286" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1551" cy="2266" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1531" cy="2246" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1511" cy="2226" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1491" cy="2206" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1471" cy="2186" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1451" cy="2166" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1431" cy="2146" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1411" cy="2126" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1391" cy="2106" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1371" cy="2086" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1351" cy="2066" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1651" cy="1166" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1631" cy="1146" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1611" cy="1126" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1591" cy="1106" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1571" cy="1086" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1551" cy="1066" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1531" cy="1046" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1511" cy="1026" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1491" cy="1006" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1471" cy="986" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1451" cy="966" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1431" cy="946" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1411" cy="926" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1391" cy="906" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1371" cy="886" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1351" cy="866" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1651" cy="1766" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1631" cy="1746" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1611" cy="1726" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1591" cy="1706" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1571" cy="1686" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1551" cy="1666" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1531" cy="1646" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1511" cy="1626" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1491" cy="1606" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1471" cy="1586" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1451" cy="1566" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1431" cy="1546" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1411" cy="1526" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1391" cy="1506" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1371" cy="1486" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1351" cy="1466" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="1303" version="1.1" width="1522" xmlns="http://www.w3.org/2000/svg">
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="288" y2="288"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="288">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="308" y2="308"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="308">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="328" y2="328"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="328">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="348" y2="348"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="348">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="368" y2="368"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="368">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="388" y2="388"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="388">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="408" y2="408"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="408">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="428" y2="428"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="428">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="448" y2="448"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="448">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="468" y2="468"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="468">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="488" y2="488"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="488">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="508" y2="508"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="508">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="528" y2="528"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="528">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="548" y2="548"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="548">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="568" y2="568"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="568">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="588" y2="588"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="588">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="288" y2="288"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="288">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="308" y2="308"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="308">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="328" y2="328"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="328">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="348" y2="348"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="348">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="368" y2="368"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="368">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="388" y2="388"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="388">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="408" y2="408"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="408">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="428" y2="428"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="428">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="448" y2="448"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="448">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="468" y2="468"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="468">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="488" y2="488"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="488">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="508" y2="508"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="508">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="528" y2="528"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="528">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="548" y2="548"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="548">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="568" y2="568"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="568">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="588" y2="588"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="588">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="610" x2="570" y1="638" y2="638"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="638">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="620" y="258"/>
<circle cx="615" cy="638" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="40" font-weight="700" text-anchor="start" x="590" y="248">Sign_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="580" y="728">BUS_TRANS16</text>
<polyline fill="none" points="570 308, 320 308" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 328, 320 328" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 348, 320 348" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 368, 320 368" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 388, 320 388" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 408, 320 408" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 588, 570 428, 320 428" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 288, 1020 288, 1170 288" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 308, 1020 308, 1170 308" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 328, 1020 328, 1170 328" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 348, 1020 348, 1170 348" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 368, 1020 368, 1170 368" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 388, 1020 388, 1170 388" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 408, 1020 408, 1170 408" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 428, 1020 428, 1170 428" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 448, 1020 448, 1170 448" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 468, 1020 468, 1170 468" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 488, 1020 488, 1170 488" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 508, 1020 508, 1170 508" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 528, 1020 528, 1170 528" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 548, 1020 548, 1170 548" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 568, 1020 568, 1170 568" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 588, 1020 588, 1170 588" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="288" y2="238"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="308" y2="258"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="328" y2="278"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="348" y2="298"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="368" y2="318"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="388" y2="338"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="408" y2="358"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="428" y2="378"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="448" y2="398"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="468" y2="418"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="488" y2="438"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="508" y2="458"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="528" y2="478"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="548" y2="498"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="568" y2="518"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1170" x2="1220" y1="588" y2="538"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="358" y2="308"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="378" y2="328"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="398" y2="348"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="418" y2="368"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="438" y2="388"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="458" y2="408"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="478" y2="428"/>
<polygon fill="#ffff80" points="20 288, 20 263, 145 263, 170 288, 145 313, 20 313, 20 288" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="20" y="288">Instr[7..0]</text>
<polyline fill="none" points="570 288, 320 288" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="270" x2="320" y1="338" y2="288"/>
<polygon fill="#ffff80" points="20 1188, 20 1163, 145 1163, 170 1188, 145 1213, 20 1213, 20 1188" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="20" y="1188">u\s</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="838" y2="838"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="838">A0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="858" y2="858"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="858">A1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="878" y2="878"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="878">A2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="898" y2="898"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="898">A3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="918" y2="918"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="918">A4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="938" y2="938"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="938">A5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="958" y2="958"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="958">A6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="978" y2="978"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="978">A7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="998" y2="998"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="998">A8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="1018" y2="1018"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="1018">A9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="1038" y2="1038"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="1038">A10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="1058" y2="1058"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="1058">A11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="1078" y2="1078"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="1078">A12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="1098" y2="1098"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="1098">A13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="1118" y2="1118"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="1118">A14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="620" x2="570" y1="1138" y2="1138"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="673" y="1138">A15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="838" y2="838"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="838">D0</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="858" y2="858"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="858">D1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="878" y2="878"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="878">D2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="898" y2="898"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="898">D3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="918" y2="918"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="918">D4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="938" y2="938"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="938">D5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="958" y2="958"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="958">D6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="978" y2="978"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="978">D7</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="998" y2="998"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="998">D8</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="1018" y2="1018"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="1018">D9</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="1038" y2="1038"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="1038">D10</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="1058" y2="1058"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="1058">D11</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="1078" y2="1078"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="1078">D12</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="1098" y2="1098"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="1098">D13</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="1118" y2="1118"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="1118">D14</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="770" x2="820" y1="1138" y2="1138"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="727" y="1138">D15</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="610" x2="570" y1="1188" y2="1188"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="663" y="1188">^EN</text>
<rect fill="#a0c0ff" fill-opacity="0.5" height="420" stroke="#000000" stroke-width="5" width="150" x="620" y="808"/>
<circle cx="615" cy="1188" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="40" font-weight="700" text-anchor="start" x="590" y="798">Bit_gate</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="580" y="1278">BUS_TRANS16</text>
<polyline fill="none" points="570 838, 520 838, 520 288" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 858, 510 858, 510 308" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 878, 500 878, 500 328" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 898, 490 898, 490 348" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 918, 480 918, 480 368" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 938, 470 938, 470 388" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 958, 460 958, 460 408" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 978, 450 978, 450 428" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 838, 840 838, 840 288" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 858, 850 858, 850 308" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 878, 860 878, 860 328" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 898, 870 898, 870 348" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 918, 880 918, 880 368" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 938, 890 938, 890 388" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 958, 900 958, 900 408" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 978, 910 978, 910 428" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 998, 920 998, 920 448" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 1018, 930 1018, 930 468" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 1038, 940 1038, 940 488" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 1058, 950 1058, 950 508" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 1078, 960 1078, 960 528" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 1098, 970 1098, 970 548" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 1118, 980 1118, 980 568" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="820 1138, 990 1138, 990 588" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="288">Instr0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="308">Instr1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="328">Instr2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="348">Instr3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="368">Instr4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="388">Instr5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="408">Instr6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="340" y="428">Instr7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="288">imm0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="308">imm1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="328">imm2</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="348">imm3</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="368">imm4</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="388">imm5</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="408">imm6</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="428">imm7</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="448">imm8</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="468">imm9</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="488">imm10</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="508">imm11</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="528">imm12</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="548">imm13</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="568">imm14</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="15" font-weight="400" text-anchor="start" x="1010" y="588">imm15</text>
<polyline fill="none" points="270 478, 270 288, 170 288" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="1220 538, 1220 188, 1320 188" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="1320 188, 1320 163, 1475 163, 1500 188, 1475 213, 1320 213, 1320 188" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1320" y="188">imm[15..0]</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="270" x2="270" y1="928" y2="988"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="270" x2="270" y1="848" y2="788"/>
<circle cx="270" cy="852" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="220 928, 320 928, 270 858, 220 928" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" transform="rotate(-90 234 908)" x="234" y="908">U1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" transform="rotate(-90 366 928)" x="366" y="928">NOT</text>
<polyline fill="none" points="570 1188, 170 1188" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="570 638, 270 638, 270 788" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="270 988, 270 1188" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="90" font-weight="700" text-anchor="start" x="460" y="138">位扩展器</text>
<circle cx="570" cy="428" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="570" cy="448" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="570" cy="468" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="570" cy="488" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="570" cy="508" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="570" cy="528" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="570" cy="548" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="570" cy="568" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="270" cy="1188" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="990" cy="588" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="980" cy="568" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="970" cy="548" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="960" cy="528" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="950" cy="508" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="940" cy="488" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="930" cy="468" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="920" cy="448" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="910" cy="428" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="900" cy="408" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="890" cy="388" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="880" cy="368" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="870" cy="348" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="860" cy="328" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="850" cy="308" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="840" cy="288" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="450" cy="428" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="460" cy="408" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="470" cy="388" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="480" cy="368" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="490" cy="348" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="500" cy="328" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="510" cy="308" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="520" cy="288" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
</svg>
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
# 说明 # 说明
空白项目 16 位 MIPS 多周期微处理器
# 使用方法
可根据需要自行添加原理图等文件。
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project id="73bfb951-3609-4a62-8c77-b373026f1088" name="mips-multi-cycle" version="1">
<files>
<filefolder id="c0a181af-d67c-4dd0-9275-aa277475c77c" name="子模块">
<file relativepath="2mux1.dlsche"/>
<file relativepath="4mux1.dlsche"/>
<file relativepath="alu.dlsche"/>
<file relativepath="regdst_mux.dlsche"/>
<file relativepath="al.dlsche"/>
<file relativepath="8signto16.dlsche"/>
<file relativepath="reg.dlsche"/>
<file relativepath="fsm.dlsche"/>
<file relativepath="multi_mux.dlsche"/>
</filefolder>
<filefolder id="2156f6c8-84d5-409f-859c-fddce752753a" name="存储器映射文件">
<file relativepath="ram.rxm"/>
</filefolder>
<filefolder id="3463ada9-1cc7-4838-ab12-f98af0a12bf2" name="源程序文件">
<file relativepath="ram.asm"/>
<file relativepath="ram.bat"/>
</filefolder>
<file relativepath="MIPS.dlsche"/>
<file relativepath="README.md"/>
</files>
</project>
添加文件
/*******************************************************************************
Copyright (c) 2008 - 2018 北京英真时代科技有限公司。保留所有权利。
*******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef unsigned char BYTE;
typedef long BOOL;
#define FALSE 0
#define TRUE 1
#define MAX_LINE_LENGTH 256 // 一行代码最多可以有多少个字符
#define MAX_LINE_COUNT 1024 // 源代码文件最多可以有多少行
#define MAX_SYMBOL_LENGTH 64 // 一个符号最多可以包含多少个字符
#define MAX_SYMBOL_COUNT 256 // 源代码文件中最多可以包含多少个符号
#define MAX_INSTR_KEY_WORD_LENGTH 32 // 一个指令关键字最多可以包含多少个字符
#ifndef MAX_PATH
#define MAX_PATH 256 // 文件路径最多可以包含多少个字符
#endif
// 代码行数据库。记录源代码文件中所有代码行的信息(包括注释行、空行)
struct LINE_RECORD
{
char line_string[MAX_LINE_LENGTH]; // 代码行的内容
unsigned long line_num; // 行号
unsigned long address; // 此行代码转换的机器码在映像文件中的地址(偏移)
int machine_code_count; // 此行代码转换的机器码的字节数量
unsigned long flag; // 代码行标志位,32位
};
struct LINE_RECORD line_database[MAX_LINE_COUNT] = {0};
int line_count = 0;
int machine_code_line_count = 0; // 记录产生了机器码的代码行的数量
// 在此定义所有的代码行标志位。注意,代码行标志位是按位或的关系。
#define LF_INSTRUCTION 0x00000001 // 代码行标志位的最低位是1,表示此行是一条指令,否则表示此行是数据
// 重定位表。如果指令中使用了标号、变量名等符号,在第一次扫描时无法确定他们的地址,需要
// 在第二次扫描时进行重定位。
struct REALLOCATE
{
unsigned long address; // 第一次扫描时,在这里记录了需要重定位的机器码的地址(偏移),
// 第二次扫描时,根据符号的地址进行重定位。
char symbol_name[MAX_SYMBOL_LENGTH]; // 需要重定位的符号名称。
int line_num; // 行号。
char instr_key_word[MAX_INSTR_KEY_WORD_LENGTH]; // 指令关键字
};
struct REALLOCATE reallocate_table[MAX_LINE_COUNT] = {0};
int reallocate_count = 0;
// 符号表。符号包括源代码中的标号、变量名。
struct SYMBOL
{
char name[MAX_SYMBOL_LENGTH]; // 符号名称
unsigned long address; // 符号表示的地址。重定位时需要用到。
int machine_code_count; // 符号生成的机器码的数量(以字节为单位)。
int line_num; // 行号
int ref_count; // 引用计数
};
struct SYMBOL symbol_table[MAX_SYMBOL_COUNT] = {0};
int symbol_count = 0;
// 汇编过程的状态
enum
{
AS_BEGIN // 起始状态。在遇到代码段名称前,处于此状态
,AS_TEXT // 正在处理代码段。遇到代码段名称后,遇到数据的名称前,处于此状态
,AS_DATA // 正在处理数据段。遇到数据段名称后,处于此状态
};
unsigned long assembler_state = AS_BEGIN;
//
// 在下面定义所有的关键字
//
// 段名称
const char* code_section_keyword = ".text"; // 代码段标志
char const* data_section_keyword = ".data"; // 数据段标志
// 指令名称
// R型指令
const char* or_instruction_keyword = "or";
const char* and_instruction_keyword = "and";
const char* add_instruction_keyword = "add";
const char* sub_instruction_keyword = "sub";
const char* sllv_instruction_keyword = "sllv";
const char* srlv_instruction_keyword = "srlv";
const char* srav_instruction_keyword = "srav";
const char* slt_instruction_keyword = "slt";
const char* jr_instruction_keyword = "jr"; // jr rs 跳转寄存器,PC=[rs]
const char* jalr_instruction_keyword = "jalr"; // jalr rs 跳转和链接寄存器,$ra = PC+2,PC=[rs]
const char* sll_instruction_keyword = "sll";
const char* srl_instruction_keyword = "srl";
const char* sra_instruction_keyword = "sra";
const char* xor_instruction_keyword = "xor";
const char* nor_instruction_keyword = "nor";
// I型指令
const char* ori_instruction_keyword = "ori";
const char* andi_instruction_keyword = "andi";
const char* addi_instruction_keyword = "addi";
const char* lw_instruction_keyword = "lw";
const char* sw_instruction_keyword = "sw";
const char* beq_instruction_keyword = "beq";
const char* bne_instruction_keyword = "bne";
const char* bgt_instruction_keyword = "bgt";
const char* bltz_instruction_keyword = "bltz";// bltz rs, lable 如果rs小于0则转移
const char* bgez_instruction_keyword = "bgez";// bgez rs, lable 如果rs大于或等于0则转移
// J型指令
const char* jump_instruction_keyword = "jump";
const char* jal_instruction_keyword = "jal"; // jal lable 跳转并链接,$ra = PC+2,PC=跳转目标地址
// 通用寄存器名称
const char* r0_register_keyword = "$r0";
const char* r1_register_keyword = "$r1";
const char* r2_register_keyword = "$r2";
const char* r3_register_keyword = "$r3";
const char* ra_register_keyword = "$ra"; // 返回地址寄存器
const char* t0_register_keyword = "$t0"; // 常数0寄存器
const char* delimit_char = "\n\t\r "; // 需要忽略的空白字符
const char* delimit_char_comma = "\n\t\r, "; // 需要忽略的空白字符,包括英文逗号
// 汇编产生的机器码
#define MAX_MACHINE_CODE 1024
BYTE machine_code[MAX_MACHINE_CODE];
unsigned long machine_code_address = 0;
unsigned long machine_code_old_address = 0;
const char* assembly_file_name = NULL; // 汇编文件路径
const char* target_file_name = NULL; // 目标文件路径
const char* list_file_name = NULL; // 列表文件路径
const char* dbg_file_name = NULL; // 调试信息文件路径
const unsigned long dbg_file_magic = 58;
const unsigned long dbg_file_version = 1;
// 输出汇编过程中发现的语法错误信息
void error_msg(const char* error_msg, int line_num)
{
if(line_num >= 1)
{
printf("%s:%d: error: %s\n", assembly_file_name, line_num, error_msg);
}
else
{
printf("%s: error: %s\n", assembly_file_name, error_msg);
}
exit(1);
}
char formated_msg[1024]; // 将格式化后的错误信息放在此字符串中。
void error_msg_warning_instr(const char* instruction_name, int line_num)
{
sprintf(formated_msg, "%s 指令在微处理器还没有实现,不能正确执行。", instruction_name);
error_msg(formated_msg, line_num);
}
void error_msg_miss_op(const char* instruction_name, int line_num)
{
sprintf(formated_msg, "%s 指令缺少操作数。", instruction_name);
error_msg(formated_msg, line_num);
}
void error_msg_wrong_op(const char* instruction_name, int line_num)
{
sprintf(formated_msg, "%s 指令不支持这样的操作数。", instruction_name);
error_msg(formated_msg, line_num);
}
void error_msg_same_symbol(const char* symbol, int line_num, int ref_line_num)
{
sprintf(formated_msg, "符号 %s 重复定义。参见第 %d 行。", symbol, ref_line_num);
error_msg(formated_msg, line_num);
}
void error_msg_keyword_symbol(const char* symbol, int line_num)
{
sprintf(formated_msg, "不能使用保留的关键字 %s 作为符号名称。", symbol);
error_msg(formated_msg, line_num);
}
void error_msg_wrong_data(const char* data, int line_num)
{
sprintf(formated_msg, "%s 不是有效的数据。", data);
error_msg(formated_msg, line_num);
}
// 输出汇编过程中发现的警告信息
void warning_msg(const char* warning_msg, int line_num)
{
if(line_num >= 1)
{
printf("%s:%d: warning: %s\n", assembly_file_name, line_num, warning_msg);
}
else
{
printf("%s: warning: %s\n", assembly_file_name, warning_msg);
}
}
void warning_msg_invalid_line(int line_num)
{
warning_msg("忽略无效的代码行。", line_num);
}
void warning_msg_unref_symbol(const char* symbol, int line_num)
{
sprintf(formated_msg, "符号 %s 未被引用。", symbol);
warning_msg(formated_msg, line_num);
}
// 判断是否是立即数。如果是数字开头,或者是负号开头的,就认为是立即数。
int is_immediate(const char* token)
{
return (isdigit(token[0]) || '-' == token[0]) ? 1 : 0;
}
// 指令操作数类型
enum
{
OT_REGISTER_R0 // $r0
,OT_REGISTER_R1 // $r1
,OT_REGISTER_R2 // $r2
,OT_REGISTER_R3 // $r3
,OT_IMMEDIATE // 立即数
,OT_SYMBOL // 符号
};
// 得到指令操作数的类型
unsigned long get_operand_type(const char* op)
{
unsigned long op_type;
if(stricmp(op, r0_register_keyword) == 0)
{
op_type = OT_REGISTER_R0;
}
else if(stricmp(op, r1_register_keyword) == 0)
{
op_type = OT_REGISTER_R1;
}
else if(stricmp(op, r2_register_keyword) == 0)
{
op_type = OT_REGISTER_R2;
}
else if(stricmp(op, r3_register_keyword) == 0)
{
op_type = OT_REGISTER_R3;
}
else if(is_immediate(op))
{
op_type = OT_IMMEDIATE;
}
else
{
op_type = OT_SYMBOL;
}
return op_type;
}
// 根据 r? 寄存器,得到一个机器码
char get_machine_code_from_r(unsigned long op_type)
{
return (char)(op_type - OT_REGISTER_R0);
}
// 根据立即数得到一个机器码。注意,允许使用负数,所以返回值是带符号的 8 位 char。
char get_machine_code_from_immediate(const char* immediate)
{
char* end;
int start_index = (immediate[0] == '-' ? 1 : 0);
int base = (immediate[start_index] == '0' && (immediate[start_index + 1] == 'x' || immediate[start_index + 1] == 'X')) ? 16 : 10;
return (char)strtol(immediate, &end, base);
}
// 向重定位表中添加一个重定位信息
void add_reallocate(const char* symbol, int line_num, const char* instr_key_word)
{
reallocate_table[reallocate_count].address = machine_code_address;
strcpy(reallocate_table[reallocate_count].symbol_name, symbol);
strcpy(reallocate_table[reallocate_count].instr_key_word, instr_key_word);
reallocate_table[reallocate_count].line_num = line_num;
reallocate_count++;
}
// 判断一个操作数是否是lw或sw指令的第二个操作数类型,立即数表示地址偏移,可正可负
int is_lw_sw_instr_operand(const char* op)
{
int i;
// 最后一个字符必须是后括号
if (op[strlen(op) - 1] != ')')
{
return 0;
}
// 倒数第二个字符必须是0,1,2,3
if (op[strlen(op) - 2] != '0'
&& op[strlen(op) - 2] != '1'
&& op[strlen(op) - 2] != '2'
&& op[strlen(op) - 2] != '3')
{
return 0;
}
// 倒数第三个字符必须是r
if (op[strlen(op) - 3] != 'r')
{
return 0;
}
// 倒数第四个字符必须是$
if (op[strlen(op) - 4] != '$')
{
return 0;
}
// 倒数第五个字符必须是'('
if (op[strlen(op) - 5] != '(')
{
return 0;
}
// 第2个到倒数第6个字符都必须是数字
// 第一个字符可以为‘-’,表示负数
if (op[0] == '-')
{
for(i=1; i<(int)strlen(op)-5; i++)
{
if(!isdigit(op[i]))
{
return 0;
}
}
}
else
{
for(i=0; i<(int)strlen(op)-5; i++)
{
if(!isdigit(op[i]))
{
return 0;
}
}
}
return 1;
}
// 根据 r? 寄存器,得到一个机器码
char get_machine_code_from_operand(const char* operand)
{
if (operand[strlen(operand) - 2] == '0')
{
return (char)0;
}
else if (operand[strlen(operand) - 2] == '1')
{
return (char)1;
}
else if (operand[strlen(operand) - 2] == '2')
{
return (char)2;
}
else if (operand[strlen(operand) - 2] == '3')
{
return (char)3;
}
else
{
return (char)(-1);
}
}
//////////////////////////////////////////////////////////////////////////
// R型指令
//
// or $rd, $rs, $rt
void parse_or(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(or_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd;
machine_code_address++;
}
else
{
error_msg_wrong_op(or_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// and $rd, $rs, $rt
void parse_and(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(and_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd | 0x01;
machine_code_address++;
}
else
{
error_msg_wrong_op(and_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// add $rd, $rs, $rt
void parse_add(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(add_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd | 0x02;
machine_code_address++;
}
else
{
error_msg_wrong_op(add_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// sub $rd, $rs, $rt
void parse_sub(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(sub_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd | 0x03;
machine_code_address++;
}
else
{
error_msg_wrong_op(sub_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// sllv $rd, $rs, $rt
void parse_sllv(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(sllv_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd | 0x04;
machine_code_address++;
}
else
{
error_msg_wrong_op(sllv_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// srlv $rd, $rs, $rt
void parse_srlv(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(srlv_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd | 0x05;
machine_code_address++;
}
else
{
error_msg_wrong_op(srlv_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// srav $rd, $rs, $rt
void parse_srav(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(srav_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd | 0x06;
machine_code_address++;
}
else
{
error_msg_wrong_op(srav_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// slt $rd, $rs, $rt
void parse_slt(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(slt_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 2~0,3位运算方式编码
machine_code[machine_code_address] = rd | 0x07;
machine_code_address++;
}
else
{
error_msg_wrong_op(slt_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// xor $rd, $rs, $rt
void parse_xor(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(xor_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 3~0,4位运算方式编码
machine_code[machine_code_address] = rd | 0x08;
machine_code_address++;
}
else
{
error_msg_wrong_op(xor_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// nor $rd, $rs, $rt
void parse_nor(int line_num)
{
char *op1, *op2, *op3;
char rs, rt, rd;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(nor_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type >= OT_REGISTER_R0
&& op3_type <= OT_REGISTER_R3)
{
// 15~12共4位操作码都是0
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op3_type);
machine_code[machine_code_address] = rs | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 3~0,4位运算方式编码
machine_code[machine_code_address] = rd | 0x09;
machine_code_address++;
}
else
{
error_msg_wrong_op(nor_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// jr $rs
void parse_jr(int line_num)
{
char *op;
char rs;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char_comma);
if(NULL == op)
{
error_msg_miss_op(jr_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(op_type >= OT_REGISTER_R0 && op_type <= OT_REGISTER_R3 )
{
// 15~12共4位操作码表示十进制数1
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op_type);
rs = rs << 2;
machine_code[machine_code_address] = 0x10 | rs;
machine_code_address++;
// 低8位
machine_code[machine_code_address] = 0x00;
machine_code_address++;
}
else
{
error_msg_wrong_op(jr_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// jalr $rs
void parse_jalr(int line_num)
{
char *op;
char rs;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char_comma);
if(NULL == op)
{
error_msg_miss_op(jalr_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(op_type >= OT_REGISTER_R0 && op_type <= OT_REGISTER_R3 )
{
// 15~12共4位操作码表示十进制数2
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op_type);
rs = rs << 2;
machine_code[machine_code_address] = 0x20 | rs;
machine_code_address++;
// 低8位
machine_code[machine_code_address] = 0x00;
machine_code_address++;
}
else
{
error_msg_wrong_op(jalr_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// sll $rd, $rt, shamt
void parse_sll(int line_num)
{
char *op1, *op2, *op3;
char rd, rt, shamt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(sll_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_IMMEDIATE)
{
// 15~12共4位操作码表示十进制12
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op2_type);
machine_code[machine_code_address] = 0xC0 | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 5~4,2位编码移位数目
shamt = get_machine_code_from_immediate(op3);
// 3~0,4位运算方式编码
machine_code[machine_code_address] = rd | shamt | 0x04;
machine_code_address++;
}
else
{
error_msg_wrong_op(sll_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// srl $rd, $rt, shamt
void parse_srl(int line_num)
{
char *op1, *op2, *op3;
char rd, rt, shamt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(srl_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_IMMEDIATE)
{
// 15~12共4位操作码表示十进制13
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op2_type);
machine_code[machine_code_address] = 0xD0 | rt;
machine_code_address++;
// 7~6,2位rd寄存器编码
rd = get_machine_code_from_r(op1_type);
rd = rd << 6;
// 5~4,2位编码移位数目
shamt = get_machine_code_from_immediate(op3);
// 3~0,4位运算方式编码
machine_code[machine_code_address] = rd | shamt | 0x05;
machine_code_address++;
}
else
{
error_msg_wrong_op(srl_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
//////////////////////////////////////////////////////////////////////////
// I型指令
//
// ori $rt, $rs, imm
void parse_ori(int line_num)
{
char *op1, *op2, *op3;
char rs, rt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(ori_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_IMMEDIATE)
{
// 15~12共4位操作码
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op1_type);
machine_code[machine_code_address] = 0x30 | rs | rt;
machine_code_address++;
// 7~0,8位立即数
machine_code[machine_code_address] = get_machine_code_from_immediate(op3);
machine_code_address++;
}
else
{
error_msg_wrong_op(ori_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// andi $rt, $rs, imm
void parse_andi(int line_num)
{
char *op1, *op2, *op3;
char rs, rt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(andi_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_IMMEDIATE)
{
// 15~12共4位操作码
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op1_type);
machine_code[machine_code_address] = 0x40 | rs | rt;
machine_code_address++;
// 7~0,8位立即数
machine_code[machine_code_address] = get_machine_code_from_immediate(op3);
machine_code_address++;
}
else
{
error_msg_wrong_op(andi_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// addi $rt, $rs, imm
void parse_addi(int line_num)
{
char *op1, *op2, *op3;
char rs, rt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(addi_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_IMMEDIATE)
{
// 15~12共4位操作码
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op2_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op1_type);
machine_code[machine_code_address] = 0x50 | rs | rt;
machine_code_address++;
// 7~0,8位立即数
machine_code[machine_code_address] = get_machine_code_from_immediate(op3);
machine_code_address++;
}
else
{
error_msg_wrong_op(addi_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// lw $rt, offset($rs)
void parse_lw(int line_num)
{
int i;
char *op1, *op2;
char immediate[8];
char rs, rt;
unsigned long op1_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(lw_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& is_lw_sw_instr_operand(op2))
{
rs = get_machine_code_from_operand(op2);
rs = rs << 2;
// 解析第一个到倒数第六个字符得到一个十进制数
for(i=0; i<(int)strlen(op2)-5; i++)
{
immediate[i] = op2[i];
}
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op1_type);
machine_code[machine_code_address] = 0x60 | rs | rt;
machine_code_address++;
// 7~0,8位立即数
machine_code[machine_code_address] = get_machine_code_from_immediate(immediate);
machine_code_address++;
}
else
{
error_msg_wrong_op(lw_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// sw $rt, offset($rs)
void parse_sw(int line_num)
{
int i;
char *op1, *op2;
char immediate[8];
char rs, rt;
unsigned long op1_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(sw_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& is_lw_sw_instr_operand(op2))
{
rs = get_machine_code_from_operand(op2);
rs = rs << 2;
// 解析第一个到倒数第六个字符得到一个十进制数
for(i=0; i<(int)strlen(op2)-5; i++)
{
immediate[i] = op2[i];
}
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op1_type);
machine_code[machine_code_address] = 0x70 | rs | rt;
machine_code_address++;
// 7~0,8位立即数
machine_code[machine_code_address] = get_machine_code_from_immediate(immediate);
machine_code_address++;
}
else
{
error_msg_wrong_op(sw_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// beq $rs, $rt, label
void parse_beq(int line_num)
{
char *op1, *op2, *op3;
char rs, rt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(beq_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_SYMBOL)
{
// 15~12共4位操作码
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op1_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op2_type);
machine_code[machine_code_address] = 0x80 | rs | rt;
machine_code_address++;
// 7~0,有符号偏移量offset
add_reallocate(op3, line_num, beq_instruction_keyword);
machine_code_address++;
}
else
{
error_msg_wrong_op(beq_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// bne $rs, $rt, label
void parse_bne(int line_num)
{
char *op1, *op2, *op3;
char rs, rt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(bne_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_SYMBOL)
{
// 15~12共4位操作码
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op1_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op2_type);
machine_code[machine_code_address] = 0x90 | rs | rt;
machine_code_address++;
// 7~0,有符号偏移量offset
add_reallocate(op3, line_num, bne_instruction_keyword);
machine_code_address++;
}
else
{
error_msg_wrong_op(bne_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// bgt $rs, $rt, label
void parse_bgt(int line_num)
{
char *op1, *op2, *op3;
char rs, rt;
unsigned long op1_type, op2_type, op3_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
op3 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2 || NULL == op3)
{
error_msg_miss_op(bgt_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
op3_type = get_operand_type(op3);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type >= OT_REGISTER_R0
&& op2_type <= OT_REGISTER_R3
&& op3_type == OT_SYMBOL)
{
// 15~12共4位操作码
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op1_type);
rs = rs << 2;
// 9~8,2位rt寄存器编码
rt = get_machine_code_from_r(op2_type);
machine_code[machine_code_address] = 0xA0 | rs | rt;
machine_code_address++;
// 7~0,有符号偏移量offset
add_reallocate(op3, line_num, bgt_instruction_keyword);
machine_code_address++;
}
else
{
error_msg_wrong_op(bgt_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// bltz $rs, label
void parse_bltz(int line_num)
{
char *op1, *op2;
char rs;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char_comma);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(bltz_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type == OT_SYMBOL)
{
// 15~12共4位操作码表示十进制数14
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op1_type);
rs = rs << 2;
machine_code[machine_code_address] = 0xE0 | rs;
machine_code_address++;
// 7~0,有符号偏移量offset
add_reallocate(op2, line_num, bltz_instruction_keyword);
machine_code_address++;
}
else
{
error_msg_wrong_op(bltz_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
//////////////////////////////////////////////////////////////////////////
// J型指令
//
// jump label
void parse_jump(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(jump_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// jump label
machine_code[machine_code_address] = 0xB0;
machine_code_address++;
// 重定位
add_reallocate(op, line_num, jump_instruction_keyword);
machine_code_address++;
}
else
{
error_msg_wrong_op(jump_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
// jal label
void parse_jal(int line_num)
{
char *op;
unsigned long op_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op = strtok(NULL, delimit_char);
if(NULL == op)
{
error_msg_miss_op(jal_instruction_keyword, line_num);
}
op_type = get_operand_type(op);
if(OT_SYMBOL == op_type)
{
// jal label
machine_code[machine_code_address] = 0xF0;
machine_code_address++;
// 重定位
add_reallocate(op, line_num, jal_instruction_keyword);
machine_code_address++;
}
else
{
error_msg_wrong_op(jal_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
//////////////////////////////////////////////////////////////////////////
// DISP指令
//
// DISP $rs, imm
void parse_disp(int line_num)
{
char *op1, *op2;
char rs;
unsigned long op1_type, op2_type;
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
op1 = strtok(NULL, delimit_char_comma);
op2 = strtok(NULL, delimit_char);
if(NULL == op1 || NULL == op2)
{
error_msg_miss_op(jal_instruction_keyword, line_num);
}
op1_type = get_operand_type(op1);
op2_type = get_operand_type(op2);
if(op1_type >= OT_REGISTER_R0
&& op1_type <= OT_REGISTER_R3
&& op2_type == OT_IMMEDIATE)
{
// 15~12共4位操作码
// 11~10,2位rs寄存器编码
rs = get_machine_code_from_r(op1_type);
rs = rs << 2;
machine_code[machine_code_address] = 0x01 | rs;
machine_code_address++;
// DISP指令的立即数字段只有0、1两个取值,用来选择在0号显示器还是1号显示器显示rs中的内容
machine_code[machine_code_address] = get_machine_code_from_immediate(op2);
machine_code_address++;
}
else
{
error_msg_wrong_op(jal_instruction_keyword, line_num);
}
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
//////////////////////////////////////////////////////////////////////////
// halt指令
//
// halt
void parse_halt(int line_num)
{
if(assembler_state != AS_TEXT)
{
warning_msg_invalid_line(line_num);
return;
}
machine_code[machine_code_address] = 0xC0;
machine_code_address++;
machine_code[machine_code_address] = 0x00;
machine_code_address++;
//
// 在代码行数据库中,标记此行是一个指令行
//
line_database[line_count].flag |= LF_INSTRUCTION;
}
//////////////////////////////////////////////////////////////////////////
//
// 向符号表中添加一个符号
void add_symbol(const char* symbol, int line_num)
{
int i;
// 符号名称不能重复
for(i=0; i<symbol_count; i++)
{
if(stricmp(symbol, symbol_table[i].name) == 0)
{
error_msg_same_symbol(symbol, line_num, symbol_table[i].line_num);
}
}
// 符号数量有限
if(symbol_count == MAX_SYMBOL_COUNT)
{
sprintf(formated_msg, "定义了太多的符号。最多可以定义 %d 个符号。", MAX_SYMBOL_COUNT);
error_msg(formated_msg, line_num);
}
// 添加符号
strcpy(symbol_table[symbol_count].name, symbol);
symbol_table[symbol_count].address = machine_code_address;
symbol_table[symbol_count].line_num = line_num;
symbol_count++;
}
// 解析符号
void parse_symbol(const char* symbol_with_colon, int line_num)
{
char symbol[MAX_SYMBOL_LENGTH];
char* token;
// 删除符号末尾的冒号
strcpy(symbol, symbol_with_colon);
symbol[strlen(symbol) - 1] = 0;
if(AS_TEXT == assembler_state)
{
// 代码段中的标号作为符号。记录到符号表中,不产生机器码。
add_symbol(symbol, line_num);
// 标号必须单独占一行,否则报错
if (strtok(NULL, delimit_char) != NULL)
{
error_msg("标号必须单独占用一行。", line_num);
}
}
else if(AS_DATA == assembler_state)
{
// 数据段中的变量作为符号。一个变量可以包含多个字节数据。记录到符号表中,产生机器码。
add_symbol(symbol, line_num);
while((token = strtok(NULL, delimit_char)) != NULL)
{
if(!is_immediate(token))
{
error_msg_wrong_data(token, line_num);
}
machine_code[machine_code_address] = get_machine_code_from_immediate(token);
machine_code_address++;
symbol_table[symbol_count - 1].machine_code_count++;
}
}
else
{
warning_msg_invalid_line(line_num);
}
}
// 解析代码段开始标志
void parse_code_section_keyword(int line_num)
{
// 代码段标志
if(AS_DATA == assembler_state)
{
error_msg("代码段不能定义在数据段的后面。", line_num);
}
else if(AS_TEXT == assembler_state)
{
error_msg("定义了重复的代码段。", line_num);
}
assembler_state = AS_TEXT;
}
// 解析数据段开始标志
void parse_data_section_keyword(int line_num)
{
// 数据段标志
if(AS_DATA == assembler_state)
{
error_msg("定义了重复的数据段。", line_num);
}
else if(AS_BEGIN == assembler_state)
{
error_msg("数据段不能定义在代码段的前面。", line_num);
}
assembler_state = AS_DATA;
}
// 定义关键字和解析函数的对应关系
typedef void (*PARSE_FUNCTION)(int line_num);
struct KEYWORD_FUNCTION_ENTRY
{
const char** keyword;
PARSE_FUNCTION parse_function;
};
//
// 必须将关键字及其解析函数放在下面的表中。从而可以使用“表驱动”的编程模式。
//
struct KEYWORD_FUNCTION_ENTRY keyword_function_table[] =
{
{ NULL, NULL } // 未用
,{ &code_section_keyword, parse_code_section_keyword }
,{ &data_section_keyword, parse_data_section_keyword }
,{ &or_instruction_keyword, parse_or }
,{ &and_instruction_keyword, parse_and }
,{ &add_instruction_keyword, parse_add }
,{ &sub_instruction_keyword, parse_sub }
,{ &sllv_instruction_keyword, parse_sllv }
,{ &srlv_instruction_keyword, parse_srlv }
,{ &srav_instruction_keyword, parse_srav }
,{ &slt_instruction_keyword, parse_slt }
,{ &jr_instruction_keyword, parse_jr }
,{ &jalr_instruction_keyword, parse_jalr }
,{ &xor_instruction_keyword, parse_xor }
,{ &nor_instruction_keyword, parse_nor }
,{ &srl_instruction_keyword, parse_srl }
,{ &sra_instruction_keyword, NULL }
,{ &sll_instruction_keyword, parse_sll }
,{ &ori_instruction_keyword, parse_ori }
,{ &andi_instruction_keyword, parse_andi }
,{ &addi_instruction_keyword, parse_addi }
,{ &lw_instruction_keyword, parse_lw }
,{ &sw_instruction_keyword, parse_sw }
,{ &beq_instruction_keyword, parse_beq }
,{ &bne_instruction_keyword, parse_bne }
,{ &bgt_instruction_keyword, parse_bgt }
,{ &bltz_instruction_keyword, parse_bltz }
,{ &bgez_instruction_keyword, NULL }
,{ &jump_instruction_keyword, parse_jump }
,{ &jal_instruction_keyword, parse_jal }
,{ &r0_register_keyword, NULL }
,{ &r1_register_keyword, NULL }
,{ &r2_register_keyword, NULL }
,{ &r3_register_keyword, NULL }
,{ &ra_register_keyword, NULL }
,{ &t0_register_keyword, NULL }
};
// 判断是否是一个关键字。返回0,不是关键字;返回非0,是关键字,并且返回值就是关键字在表中的下标。
int match_keyword(const char* token)
{
int i;
for(i=1; i<sizeof(keyword_function_table)/sizeof(keyword_function_table[0]); i++)
{
if(stricmp(token, *keyword_function_table[i].keyword) == 0)
{
return i;
}
}
return 0;
}
// 判断是否是一个符号
int is_symbol(const char* token, int line_num)
{
int i;
char symbol_name[MAX_SYMBOL_LENGTH];
// 最后一个字符必须是冒号
if(token[strlen(token) - 1] != ':')
{
return 0;
}
// 第一个字符必须是字母或者下划线
if(token[0] != '_' && !isalpha(token[0]))
{
return 0;
}
// 后面的字符必须是字母、数字、下划线
for(i=0; i<(int)strlen(token)-2; i++)
{
if(token[i] != '_' && !isalpha(token[i]) && !isdigit(token[i]))
{
return 0;
}
}
// 不能与关键字相同
strcpy(symbol_name, token);
symbol_name[strlen(symbol_name) - 1] = 0;
if(match_keyword(symbol_name) != 0)
{
error_msg_keyword_symbol(symbol_name, line_num);
}
return 1;
}
// 输出版本信息
void version_msg()
{
printf(
"Engintime 16位 MIPS 指令汇编器 [版本 2.0]\n"
"版权所有 (c) 2008-2018 北京英真时代科技有限公司。保留所有权利。\n"
);
}
// 输出帮助信息
void help_msg()
{
printf(
"Engintime 16位 MIPS 指令汇编器。\n\n"
"用法:\n\n"
" dmasm.exe assembly_file_name [options]\n\n"
"选项:\n\n"
" -g debug_file_name\t指定生成的调试信息文件路径。\n"
" -h\t\t\t打印此帮助信息。\n"
" -l list_file_name\t指定生成的列表文件路径。\n"
" -o target_file_name\t指定生成的目标文件路径。若未指定,默认生成 a.obj 文件。\n"
" -v\t\t\t打印版本信息。\n"
);
printf("\n");
version_msg();
exit(1);
}
void argument_error_msg()
{
printf("命令行参数错误。\n\n");
help_msg();
}
// 处理器用户输入的命令行参数
void process_argument(int argc, char* argv[])
{
int i;
// argv[0] 是 "easm.exe",所以可以忽略。
for(i=1; i<argc; i++)
{
if(strcmp(argv[i], "-v") == 0)
{
version_msg();
exit(1);
}
else if(strcmp(argv[i], "-h") == 0)
{
help_msg();
}
else if(strcmp(argv[i], "-o") == 0)
{
if(i + 1 < argc)
{
i++;
target_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(strcmp(argv[i], "-l") == 0)
{
if(i + 1 < argc)
{
i++;
list_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(strcmp(argv[i], "-g") == 0)
{
if(i + 1 < argc)
{
i++;
dbg_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
else if(NULL == assembly_file_name && argv[i][0] != '-')
{
// 输入的汇编源代码文件路径。
assembly_file_name = argv[i];
}
else
{
argument_error_msg();
}
}
//
// 如果命令行参数中没有指定输入的汇编文件,就打印错误信息后退出
//
if(NULL == assembly_file_name)
{
printf("命令行参数错误。没有指定汇编源代码文件的路径。\n");
help_msg();
}
}
// 将一个字符串写入二进制文件中。先将字符串长度写入文件,然后将字符串中的
// 每个字符依次写入文件,不包括字符串末尾的 0.
void write_string_to_binary_file(const char* str, FILE* fp)
{
int str_length;
if(str != NULL)
{
str_length = strlen(str);
fwrite(&str_length, 1, sizeof(str_length), fp);
fwrite(str, 1, str_length, fp);
}
else
{
str_length = 0;
fwrite(&str_length, 1, sizeof(str_length), fp);
}
}
int main(int argc, char* argv[])
{
FILE* fp;
char* token;
char line[MAX_LINE_LENGTH];
int i, j;
int line_num = 1; // 行号从第一行开始计数
int keyword_index;
unsigned long base_PC, offset_PC;
//
// 处理命令行参数
//
process_argument(argc, argv);
//
// 打开汇编源代码文件
//
fp = fopen(assembly_file_name, "r");
if(NULL == fp)
{
printf("无法打开源代码文件 %s\n", assembly_file_name);
return 1;
}
//////////////////////////////////////////////////////////////////////////
// 第一遍扫描
version_msg();
printf("\n正在汇编 %s...\n", assembly_file_name);
//
// 一次读取一行文本,同时记录所有的代码行信息
//
while(fgets(line, sizeof(line), fp) != NULL)
{
//
// 将一行代码的信息记录到代码行数据库中
//
strcpy(line_database[line_count].line_string, line);
line_database[line_count].line_num = line_num;
line_database[line_count].address = machine_code_address;
//
// 将代码行中的注释剥离
//
line[strcspn(line, ";")] = 0;
//
// 开始解析代码行
//
token = strtok(line, delimit_char);
if(NULL == token)
{
// 如果是空行,不做任何处理
}
else if((keyword_index = match_keyword(token)) != 0
&& keyword_function_table[keyword_index].parse_function != NULL)
{
// 根据关键字进行相应的处理
keyword_function_table[keyword_index].parse_function(line_num);
}
else if(is_symbol(token, line_num))
{
// 处理符号
parse_symbol(token, line_num);
}
else
{
error_msg("无法识别的代码行。", line_num);
}
//
// 补充代码行数据库信息
//
line_database[line_count].machine_code_count = machine_code_address - machine_code_old_address;
machine_code_old_address = machine_code_address;
//
// 记录产生了机器码的代码行数量
//
if(line_database[line_count].machine_code_count != 0)
{
machine_code_line_count++;
}
//
// 增加行号
//
line_count++;
line_num++;
if(line_count == MAX_LINE_COUNT)
{
sprintf(formated_msg, "汇编文件中的代码行过多,最多只能有 %d 行代码。", MAX_LINE_COUNT);
error_msg(formated_msg, -1);
}
}
fclose(fp);
//////////////////////////////////////////////////////////////////////////
// 第二遍扫描
//
// 根据符号表更新重定位表
//
for(i=0; i<reallocate_count; i++)
{
for(j=0; j<symbol_count; j++)
{
if(stricmp(symbol_table[j].name, reallocate_table[i].symbol_name) == 0)
{
if (stricmp(beq_instruction_keyword, reallocate_table[i].instr_key_word) == 0
|| stricmp(bne_instruction_keyword, reallocate_table[i].instr_key_word) == 0
|| stricmp(bgt_instruction_keyword, reallocate_table[i].instr_key_word) == 0
|| stricmp(bltz_instruction_keyword, reallocate_table[i].instr_key_word) == 0)
{
// 条件转移指令
// 因为标号是指令的第二个字节编码,所以标号地址首先减1,指向该条指令。
// 然后加2,指向下一条指令。因为偏移是相对于PC+2后的地址计算的
//
machine_code[reallocate_table[i].address] = (BYTE)((symbol_table[j].address - (reallocate_table[i].address - 1 + 2))/2);
symbol_table[j].ref_count++;
}
else if (stricmp(jump_instruction_keyword, reallocate_table[i].instr_key_word) == 0
|| stricmp(jal_instruction_keyword, reallocate_table[i].instr_key_word) == 0)
{
//
// 无条件转移指令
//
// 获取跳转指令地址高4位,低12位置为0,作为无条件跳转指令的相对偏移基址
base_PC = reallocate_table[i].address & 0xf000;
// 获取标号地址相对于基地址的偏移,并取出其中的低12位做为有效位
offset_PC = (symbol_table[j].address - base_PC) & 0x0fff;
// 更新跳转指令编码
machine_code[reallocate_table[i].address - 1] = (BYTE)(machine_code[reallocate_table[i].address - 1] | offset_PC >> 8);
machine_code[reallocate_table[i].address] = (BYTE)(offset_PC/2);
symbol_table[j].ref_count++;
}
break;
}
}
if(j == symbol_count)
{
// 重定位表中使用的符号在符号表中未定义,报错
sprintf(formated_msg, "使用了未定义的符号 %s。", reallocate_table[i].symbol_name);
error_msg(formated_msg, reallocate_table[i].line_num);
}
}
//
// 如果存在未引用的符号,输出警告信息。
//
for(i=0; i<symbol_count; i++)
{
if(0 == symbol_table[i].ref_count)
{
warning_msg_unref_symbol(symbol_table[i].name, symbol_table[i].line_num);
}
}
//////////////////////////////////////////////////////////////////////////
// 产生各种输出文件
//
// 将机器码写入二进制文件
//
if(NULL == target_file_name)
{
target_file_name = "a.obj";
}
fp = fopen(target_file_name, "wb");
if(NULL == fp)
{
printf("无法打开输出文件 %s\n", target_file_name);
return 1;
}
fwrite(machine_code, 1, machine_code_address, fp);
fclose(fp);
printf("\n生成目标文件 %s\n", target_file_name);
//
// 将代码行数据库中的信息写入列表文件
//
if(list_file_name != NULL)
{
fp = fopen(list_file_name, "w");
if(NULL == fp)
{
printf("无法打开列表文件 %s\n", list_file_name);
return 1;
}
for(i=0; i<line_count; i++)
{
// 行号
fprintf(fp, "%04d ", line_database[i].line_num);
// 地址和机器码
if(line_database[i].machine_code_count > 0)
{
fprintf(fp, "%02X ", line_database[i].address);
for(j=0; j<line_database[i].machine_code_count; j++)
{
// 确保每行最多写两个字节的机器码
if(j != 0 && j % 2 == 0)
{
if(2 == j)
{
fprintf(fp, " ");
}
else
{
fprintf(fp, "\n ");
}
}
fprintf(fp, "%02X ", machine_code[line_database[i].address + j]);
if(1 == j)
{
fprintf(fp, " ");
fprintf(fp, line_database[i].line_string);
}
}
if(1 == j)
{
fprintf(fp, " ");
fprintf(fp, line_database[i].line_string);
}
else if(j > 2)
{
fprintf(fp, "\n");
}
}
else
{
fprintf(fp, " ");
// 源代码
fprintf(fp, line_database[i].line_string);
}
}
fclose(fp);
printf("生成列表文件 %s\n", list_file_name);
}
//
// 将代码行数据库中的信息写入二进制的调试信息文件。
//
// 调试信息的基本格式为:
// 魔数(4字节),固定不可改变
// 版本号(4字节),固定不可改变
// 源代码文件绝对路径字符串长度(4字节)
// 源代码文件绝对路径字符串(不包括字符串结尾的0)
// 列表文件绝对路径字符串长度(4字节)
// 列表文件绝对路径字符串(不包括字符串结尾的0)
//
// 代码行数据库中元素的数量(4字节)
// 代码行数据库中的所有元素
//
// 符号表元素的数量(4字节)
// 符号表中的所有元素
//
if(dbg_file_name != NULL)
{
fp = fopen(dbg_file_name, "wb");
if(NULL == fp)
{
printf("无法打开调试信息文件 %s\n", dbg_file_name);
return 1;
}
// 魔数
fwrite(&dbg_file_magic, 1, sizeof(dbg_file_magic), fp);
// 版本号
fwrite(&dbg_file_version, 1, sizeof(dbg_file_version), fp);
// 源代码文件路径
write_string_to_binary_file(assembly_file_name, fp);
// 列表文件路径
write_string_to_binary_file(list_file_name, fp);
// 代码行数据库中的所有元素
fwrite(&machine_code_line_count, 1, sizeof(machine_code_line_count), fp);
for(i=0; i<line_count; i++)
{
// 跳过没有产生机器码的代码行
if(0 == line_database[i].machine_code_count)
{
continue;
}
fwrite(&line_database[i].line_num, 1, sizeof(unsigned long), fp);
fwrite(&line_database[i].address, 1, sizeof(unsigned long), fp);
fwrite(&line_database[i].machine_code_count, 1, sizeof(int), fp);
fwrite(&line_database[i].flag, 1, sizeof(unsigned long), fp);
}
// 符号表中的所有元素
fwrite(&symbol_count, 1, sizeof(symbol_count), fp);
for(i=0; i<symbol_count; i++)
{
write_string_to_binary_file(symbol_table[i].name, fp);
fwrite(&symbol_table[i].address, 1, sizeof(unsigned long), fp);
fwrite(&symbol_table[i].machine_code_count, 1, sizeof(int), fp);
fwrite(&symbol_table[i].line_num, 1, sizeof(int), fp);
}
fclose(fp);
printf("生成调试信息文件 %s\n", dbg_file_name);
}
return 0;
}
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="2954" version="1.1" width="1850" xmlns="http://www.w3.org/2000/svg">
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="1931" y2="1931"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="1931" y2="1931"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="1971" y2="2031"/>
<circle cx="981" cy="1963" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 1881, 941 1981, 1021 1931, 941 1881" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="1851">U50</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="1881">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="2131" y2="2131"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="2131" y2="2131"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="2171" y2="2231"/>
<circle cx="981" cy="2163" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 2081, 941 2181, 1021 2131, 941 2081" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="2051">U51</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="2081">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="931" y2="931"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="931" y2="931"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="971" y2="1031"/>
<circle cx="981" cy="963" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 881, 941 981, 1021 931, 941 881" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="851">U52</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="881">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="1131" y2="1131"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="1131" y2="1131"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="1171" y2="1231"/>
<circle cx="981" cy="1163" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 1081, 941 1181, 1021 1131, 941 1081" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="1051">U53</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="1081">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="1731" y2="1731"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="1731" y2="1731"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="1771" y2="1831"/>
<circle cx="981" cy="1763" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 1681, 941 1781, 1021 1731, 941 1681" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="1651">U1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="1681">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="1331" y2="1331"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="1331" y2="1331"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="1371" y2="1431"/>
<circle cx="981" cy="1363" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 1281, 941 1381, 1021 1331, 941 1281" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="1251">U2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="1281">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="2431" y2="2431"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="2431" y2="2431"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="2471" y2="2531"/>
<circle cx="981" cy="2463" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 2381, 941 2481, 1021 2431, 941 2381" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="2351">U3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="2381">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="2631" y2="2631"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="2631" y2="2631"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="2671" y2="2731"/>
<circle cx="981" cy="2663" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 2581, 941 2681, 1021 2631, 941 2581" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="2551">U4</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="2581">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="941" x2="881" y1="2831" y2="2831"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1021" x2="1081" y1="2831" y2="2831"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="981" x2="981" y1="2871" y2="2931"/>
<circle cx="981" cy="2863" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="941 2781, 941 2881, 1021 2831, 941 2781" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="991" y="2751">U5</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="941" y="2781">NBUFFER</text>
<polygon fill="#ffff80" points="21 931, 21 906, 146 906, 171 931, 146 956, 21 956, 21 931" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="931">A[2..0]</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="981" y2="931"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1181" y2="1131"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1381" y2="1331"/>
<polyline fill="none" points="321 1381, 321 931, 171 931" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="931">A0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="1131">A1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="1331">A2</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1781" y2="1731"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="1981" y2="1931"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="2181" y2="2131"/>
<polyline fill="none" points="321 2181, 321 1731, 171 1731" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="21 1731, 21 1706, 146 1706, 171 1731, 146 1756, 21 1756, 21 1731" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="1731">B[2..0]</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="1731">B0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="1931">B1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="2131">B2</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="2481" y2="2431"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="2681" y2="2631"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="321" x2="371" y1="2881" y2="2831"/>
<polyline fill="none" points="321 2881, 321 2431, 171 2431" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="21 2431, 21 2406, 146 2406, 171 2431, 146 2456, 21 2456, 21 2431" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="21" y="2431">C[2..0]</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="2431">C0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="2631">C1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="371" y="2831">C2</text>
<polyline fill="none" points="1081 931, 1231 931, 1231 2431, 1081 2431" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1081 1131, 1281 1131, 1281 2631, 1081 2631" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1081 1331, 1331 1331, 1331 2831, 1081 2831" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1081 2131, 1331 2131" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1081 1931, 1281 1931" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1081 1731, 1231 1731" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1231 931, 1481 931" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1281 1131, 1481 1131" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1331 1331, 1481 1331" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1381" y="931">F0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1381" y="1131">F1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1381" y="1331">F2</text>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1481" x2="1531" y1="931" y2="881"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1481" x2="1531" y1="1131" y2="1081"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1481" x2="1531" y1="1331" y2="1281"/>
<polyline fill="none" points="1531 1281, 1531 831, 1681 831" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="1681 831, 1681 806, 1806 806, 1831 831, 1806 856, 1681 856, 1681 831" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1681" y="831">F[2..0]</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="471" x2="431" y1="431" y2="431"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="533" y="428">^1G</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="454" y="431">1</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="481" x2="431" y1="341" y2="341"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="514" y="342">A</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="453" y="340">2</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="481" x2="431" y1="371" y2="371"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="514" y="371">B</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="end" x="453" y="370">3</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="641" x2="681" y1="341" y2="341"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="600" y="347">Y0</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="660" y="341">4</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="641" x2="681" y1="371" y2="371"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="601" y="375">Y1</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="660" y="371">5</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="641" x2="681" y1="401" y2="401"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="601" y="403">Y2</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="660" y="401">6</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="641" x2="681" y1="431" y2="431"/>
<text alignment-baseline="central" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="middle" x="601" y="431">Y3</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Courier New" font-size="17" font-weight="400" text-anchor="start" x="661" y="432">7</text>
<circle cx="476" cy="431" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="636" cy="341" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="637" cy="431" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="636" cy="402" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<circle cx="636" cy="371" fill="none" r="4" stroke="#000000" stroke-width="5"/>
<rect fill="#ffffff" fill-opacity="0.5" height="124" stroke="#000000" stroke-width="5" width="146" x="483" y="325"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="550" y="319">U6</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="485" y="491">74LS139D</text>
<polyline fill="none" points="431 341, 181 341" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="431 371, 281 371, 281 431, 181 431" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polygon fill="#ffff80" points="31 341, 31 316, 156 316, 181 341, 156 366, 31 366, 31 341" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="31" y="341">S0</text>
<polygon fill="#ffff80" points="31 431, 31 406, 156 406, 181 431, 156 456, 31 456, 31 431" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="31" y="431">S1</text>
<polyline fill="none" points="881 931, 371 931" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 1131, 371 1131" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 1331, 371 1331" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 1731, 371 1731" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 1931, 371 1931" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 2131, 371 2131" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 2431, 371 2431" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 2631, 371 2631" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="881 2831, 371 2831" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="681 341, 821 341, 821 1431, 981 1431" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="981 1231, 821 1231" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="981 1031, 821 1031" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="681 371, 801 371, 801 2231, 981 2231" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="981 2031, 801 2031" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="981 1831, 801 1831" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="681 401, 781 401, 781 2931, 981 2931" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="981 2731, 781 2731" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="981 2531, 781 2531" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="105" font-weight="700" text-anchor="start" x="551" y="161">3选1复用器</text>
<circle cx="1331" cy="1331" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1281" cy="1131" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1231" cy="931" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="781" cy="2531" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="781" cy="2731" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="801" cy="1831" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="801" cy="2031" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="821" cy="1031" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="821" cy="1231" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1231" cy="1731" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1281" cy="1931" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1331" cy="2131" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<project id="cc76dfb5-389b-4822-9a8a-ef2eed053645" name="project" version="1">
<files>
<file relativepath="README.md"/>
</files>
</project>
.text
addi $r2, $r0, 5 ;r2 = r0 + 5
addi $r3, $r0, 12 ;r3 = r0 + 12
addi $r1, $r3, -9 ;r1 = r3 + (-9)
or $r3, $r0, $r1 ;r3 = r0 | r1
and $r2, $r2, $r3 ;r2 = r2 & r3
add $r3, $r3, $r1 ;r3 = r3 + r1
beq $r1, $r3, end ;if r1 == r3, goto end
slt $r3, $r2, $r3 ;r3 = r2 < r3 ? 1 : 0
andi $r3, $r3, 0 ;r3 = r3 & 0
andi $r0, $r1, 0 ;r0 = r1 & 0
beq $r3, $r0, F1 ;if r3 == r0, goto F1
addi $r0, $r1, 0 ;r0 = r1 + 0
end:
sw $r2, 84($r0) ;mem[r0+84] = r2
sllv $r1, $r1, $r0 ;r1 = r1 << r0
bne $r1, $r2, NEXT ;if r1 != r2, goto NEXT
F1:
slt $r3, $r1, $r2 ;r3 = r1 < r2 ? 1 : 0
add $r3, $r2, $r1 ;r3 = r2 + r1
sub $r2, $r2, $r0 ;r2 = r2 - r0
sw $r3, 68($r3) ;mem[r3+68] = r3
lw $r3, 80($r0) ;r3 = mem[r0+80]
jump end ;goto end
addi $r2, $r0, 1 ;r2 = r0 + 1
NEXT:
sub $r1, $r1, $r0 ;r1 = r1 - r0
add $r1, $r1, $r0 ;r1 = r1 + r0
sllv $r3, $r0, $r1 ;r3 = r0 << r1
ori $r1, $r1, 3 ;r1 = r1 | 3
srav $r3, $r3, $r1 ;r3 = r3 >> r1
andi $r1, $r2, 4 ;r1 = r2 + 4
@echo off
mipsasm.exe ram.asm -o ram.rxm -l ram.lst -g ram.dbg
pause
添加文件
0001 .text
0002
0003 00 52 05 addi $r2, $r0, 5 ;r2 = r0 + 5
0004 02 53 0C addi $r3, $r0, 12 ;r3 = r0 + 12
0005 04 5D F7 addi $r1, $r3, -9 ;r1 = r3 + (-9)
0006
0007 06 01 C0 or $r3, $r0, $r1 ;r3 = r0 | r1
0008 08 0B 81 and $r2, $r2, $r3 ;r2 = r2 & r3
0009 0A 0D C2 add $r3, $r3, $r1 ;r3 = r3 + r1
0010
0011 0C 87 05 beq $r1, $r3, end ;if r1 == r3, goto end
0012 0E 0B C7 slt $r3, $r2, $r3 ;r3 = r2 < r3 ? 1 : 0
0013 10 4F 00 andi $r3, $r3, 0 ;r3 = r3 & 0
0014 12 44 00 andi $r0, $r1, 0 ;r0 = r1 & 0
0015
0016 14 8C 04 beq $r3, $r0, F1 ;if r3 == r0, goto F1
0017 16 54 00 addi $r0, $r1, 0 ;r0 = r1 + 0
0018
0019 end:
0020 18 72 54 sw $r2, 84($r0) ;mem[r0+84] = r2
0021 1A 04 44 sllv $r1, $r1, $r0 ;r1 = r1 << r0
0022 1C 96 07 bne $r1, $r2, NEXT ;if r1 != r2, goto NEXT
0023
0024 F1:
0025 1E 06 C7 slt $r3, $r1, $r2 ;r3 = r1 < r2 ? 1 : 0
0026 20 09 C2 add $r3, $r2, $r1 ;r3 = r2 + r1
0027 22 08 83 sub $r2, $r2, $r0 ;r2 = r2 - r0
0028 24 7F 44 sw $r3, 68($r3) ;mem[r3+68] = r3
0029 26 63 50 lw $r3, 80($r0) ;r3 = mem[r0+80]
0030 28 B0 0C jump end ;goto end
0031 2A 52 01 addi $r2, $r0, 1 ;r2 = r0 + 1
0032
0033 NEXT:
0034 2C 04 43 sub $r1, $r1, $r0 ;r1 = r1 - r0
0035 2E 04 42 add $r1, $r1, $r0 ;r1 = r1 + r0
0036
0037 30 01 C4 sllv $r3, $r0, $r1 ;r3 = r0 << r1
0038
0039 32 35 03 ori $r1, $r1, 3 ;r1 = r1 | 3
0040 34 0D C6 srav $r3, $r3, $r1 ;r3 = r3 >> r1
0041 36 49 04 andi $r1, $r2, 4 ;r1 = r2 + 4
0042
0043
0044
0045
0046
添加文件
添加文件
这个 源代码变更 因为 太大 而不能显示。 你可以 浏览blob
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<svg height="1134" version="1.1" width="2495" xmlns="http://www.w3.org/2000/svg">
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="342" y="930">rt寄存器</text>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="312" y="540">rd寄存器</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1312" x2="1252" y1="410" y2="410"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1392" x2="1452" y1="410" y2="410"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1352" x2="1352" y1="450" y2="510"/>
<circle cx="1352" cy="442" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="1312 360, 1312 460, 1392 410, 1312 360" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1362" y="330">U50</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1312" y="360">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1312" x2="1252" y1="610" y2="610"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1392" x2="1452" y1="610" y2="610"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1352" x2="1352" y1="650" y2="710"/>
<circle cx="1352" cy="642" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="1312 560, 1312 660, 1392 610, 1312 560" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1362" y="530">U51</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1312" y="560">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1312" x2="1252" y1="810" y2="810"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1392" x2="1452" y1="810" y2="810"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1352" x2="1352" y1="850" y2="910"/>
<circle cx="1352" cy="842" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="1312 760, 1312 860, 1392 810, 1312 760" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1362" y="730">U52</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1312" y="760">NBUFFER</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1312" x2="1252" y1="1010" y2="1010"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1392" x2="1452" y1="1010" y2="1010"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1352" x2="1352" y1="1050" y2="1110"/>
<circle cx="1352" cy="1042" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="1312 960, 1312 1060, 1392 1010, 1312 960" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1362" y="930">U53</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1312" y="960">NBUFFER</text>
<polyline fill="none" points="1452 410, 1552 410, 1552 810, 1452 810" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1452 610, 1602 610, 1602 1010, 1452 1010" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1552 410, 1952 410" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1252 410, 852 410" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1252 610, 852 610" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1252 810, 852 810" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1252 1010, 852 1010" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="802" x2="852" y1="460" y2="410"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="802" x2="852" y1="660" y2="610"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="802" x2="852" y1="860" y2="810"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="802" x2="852" y1="1060" y2="1010"/>
<polyline fill="none" points="1602 610, 1952 610" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1952" x2="2002" y1="410" y2="360"/>
<line stroke="#000080" stroke-linecap="round" stroke-width="5" x1="1952" x2="2002" y1="610" y2="560"/>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="852" y="810">rt0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="852" y="1010">rt1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="852" y="410">rd0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="852" y="610">rd1</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1702" y="410">Reg0</text>
<text alignment-baseline="after-edge" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="1702" y="610">Reg1</text>
<polygon fill="#ffff80" points="2272 460, 2272 435, 2447 435, 2472 460, 2447 485, 2272 485, 2272 460" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="2272" y="460">Reg[1..0]</text>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1012" x2="952" y1="710" y2="710"/>
<line stroke="#000000" stroke-linecap="round" stroke-width="5" x1="1092" x2="1152" y1="710" y2="710"/>
<circle cx="1088" cy="710" fill="none" r="5" stroke="#000000" stroke-width="5"/>
<polygon fill="#ffffff" fill-opacity="0.5" points="1012 660, 1012 760, 1082 710, 1012 660" stroke="#000000" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1032" y="674">U54</text>
<text alignment-baseline="after-edge" fill="#000000" font-family="Arial" font-size="25" font-weight="700" text-anchor="start" x="1012" y="806">NOT</text>
<polyline fill="none" points="1352 710, 1152 710" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1352 510, 1202 510, 1202 710" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="952 710, 502 710, 172 710" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1352 1110, 902 1110, 902 710" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<polyline fill="none" points="1352 910, 902 910" stroke="#0000ff" stroke-linecap="round" stroke-linejoin="round" stroke-width="5"/>
<text alignment-baseline="after-edge" fill="#000080" font-family="宋体" font-size="25" font-weight="400" text-anchor="start" x="292" y="670">I型指令选中rt作为目的寄存器</text>
<polyline fill="none" points="802 660, 802 460" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="802 1060, 802 860" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="802 960, 172 960" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="802 560, 172 560" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polygon fill="#ffff80" points="22 960, 22 935, 147 935, 172 960, 147 985, 22 985, 22 960" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="22" y="960">rt[1..0]</text>
<polygon fill="#ffff80" points="22 560, 22 535, 147 535, 172 560, 147 585, 22 585, 22 560" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="22" y="560">rd[1..0]</text>
<polygon fill="#ffff80" points="22 710, 22 685, 147 685, 172 710, 147 735, 22 735, 22 710" stroke="#800000" stroke-width="1"/>
<text alignment-baseline="central" fill="#800000" font-family="Times New Roman" font-size="25" font-weight="400" text-anchor="start" x="22" y="710">s</text>
<polyline fill="none" points="2002 360, 2002 560" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<polyline fill="none" points="2002 460, 2272 460" stroke="#000080" stroke-linecap="round" stroke-linejoin="round" stroke-width="20"/>
<text alignment-baseline="after-edge" fill="#000000" font-family="宋体" font-size="105" font-weight="700" text-anchor="start" x="822" y="160">目的寄存器选择器</text>
<circle cx="1602" cy="610" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1552" cy="410" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="902" cy="910" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="902" cy="710" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="1202" cy="710" fill="#0000ff" r="8" stroke="#0000ff" stroke-width="5"/>
<circle cx="2002" cy="460" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="802" cy="560" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
<circle cx="802" cy="960" fill="#000080" r="25" stroke="#000080" stroke-width="5"/>
</svg>
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论