Initial commit

This commit is contained in:
Thomas Muller 2024-03-07 12:54:06 -05:00
commit b1cea49c07

808
zcpu.circ Normal file
View file

@ -0,0 +1,808 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project source="3.8.0" version="1.0">
This file is intended to be loaded by Logisim-evolution v3.8.0(https://github.com/logisim-evolution/).
<lib desc="#Wiring" name="0">
<tool name="Pin">
<a name="appearance" val="classic"/>
</tool>
<tool name="Tunnel">
<a name="facing" val="east"/>
</tool>
<tool name="Constant">
<a name="value" val="0x0"/>
<a name="width" val="2"/>
</tool>
<tool name="Power">
<a name="facing" val="west"/>
</tool>
</lib>
<lib desc="#Gates" name="1"/>
<lib desc="#Plexers" name="2"/>
<lib desc="#Arithmetic" name="3"/>
<lib desc="#Memory" name="4"/>
<lib desc="#I/O" name="5"/>
<lib desc="#TTL" name="6"/>
<lib desc="#TCL" name="7"/>
<lib desc="#Base" name="8"/>
<lib desc="#BFH-Praktika" name="9"/>
<lib desc="#Input/Output-Extra" name="10"/>
<lib desc="#Soc" name="11"/>
<main name="main"/>
<options>
<a name="gateUndefined" val="ignore"/>
<a name="simlimit" val="1000"/>
<a name="simrand" val="0"/>
</options>
<mappings>
<tool lib="8" map="Button2" name="Poke Tool"/>
<tool lib="8" map="Button3" name="Menu Tool"/>
<tool lib="8" map="Ctrl Button1" name="Menu Tool"/>
</mappings>
<toolbar>
<tool lib="8" name="Poke Tool"/>
<tool lib="8" name="Edit Tool"/>
<tool lib="8" name="Wiring Tool"/>
<tool lib="8" name="Text Tool"/>
<sep/>
<tool lib="0" name="Pin"/>
<tool lib="0" name="Pin">
<a name="facing" val="west"/>
<a name="output" val="true"/>
</tool>
<sep/>
<tool lib="1" name="NOT Gate"/>
<tool lib="1" name="AND Gate"/>
<tool lib="1" name="OR Gate"/>
<tool lib="1" name="XOR Gate"/>
<tool lib="1" name="NAND Gate"/>
<tool lib="1" name="NOR Gate"/>
<sep/>
<tool lib="4" name="D Flip-Flop"/>
<tool lib="4" name="Register"/>
</toolbar>
<circuit name="main">
<a name="appearance" val="logisim_evolution"/>
<a name="circuit" val="main"/>
<a name="circuitnamedboxfixedsize" val="true"/>
<a name="simulationFrequency" val="1.0"/>
<comp lib="0" loc="(1020,180)" name="Splitter">
<a name="appear" val="right"/>
<a name="bit1" val="0"/>
<a name="bit2" val="0"/>
<a name="bit3" val="0"/>
<a name="bit4" val="1"/>
<a name="bit5" val="1"/>
<a name="bit6" val="1"/>
<a name="bit7" val="1"/>
<a name="facing" val="north"/>
<a name="incoming" val="8"/>
<a name="spacing" val="5"/>
</comp>
<comp lib="0" loc="(1020,180)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MEM_A"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1100,1040)" name="Tunnel">
<a name="label" val="MBR_BUF"/>
</comp>
<comp lib="0" loc="(1100,1110)" name="Tunnel">
<a name="label" val="IR_W"/>
</comp>
<comp lib="0" loc="(1100,630)" name="Tunnel">
<a name="label" val="PC_BUF"/>
</comp>
<comp lib="0" loc="(1100,700)" name="Tunnel">
<a name="label" val="MAR_W"/>
</comp>
<comp lib="0" loc="(1100,800)" name="Tunnel">
<a name="label" val="LATCH_PC"/>
</comp>
<comp lib="0" loc="(1100,900)" name="Tunnel">
<a name="label" val="MEM_R"/>
</comp>
<comp lib="0" loc="(1100,970)" name="Tunnel">
<a name="label" val="MBR_W"/>
</comp>
<comp lib="0" loc="(1150,310)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="A_BUS"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1150,340)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MAR_W"/>
</comp>
<comp lib="0" loc="(1150,370)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="CLK"/>
</comp>
<comp lib="0" loc="(1150,450)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MEM_D"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1150,480)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MBR_W"/>
</comp>
<comp lib="0" loc="(1150,510)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="CLK"/>
</comp>
<comp lib="0" loc="(1180,190)" name="Splitter">
<a name="appear" val="right"/>
<a name="bit1" val="0"/>
<a name="bit2" val="0"/>
<a name="bit3" val="0"/>
<a name="bit4" val="1"/>
<a name="bit5" val="1"/>
<a name="bit6" val="1"/>
<a name="bit7" val="1"/>
<a name="facing" val="north"/>
<a name="incoming" val="8"/>
<a name="spacing" val="5"/>
</comp>
<comp lib="0" loc="(1180,190)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MEM_D"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1290,320)" name="Tunnel">
<a name="label" val="MEM_A"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1390,380)" name="Tunnel">
<a name="facing" val="south"/>
<a name="label" val="MBR_BUF"/>
</comp>
<comp lib="0" loc="(1390,490)" name="Tunnel">
<a name="facing" val="north"/>
<a name="label" val="MEM_D_BUF"/>
</comp>
<comp lib="0" loc="(1410,60)" name="Ground"/>
<comp lib="0" loc="(1410,60)" name="Tunnel">
<a name="label" val="SEL_PC_LOAD"/>
</comp>
<comp lib="0" loc="(1410,60)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MEM_W"/>
</comp>
<comp lib="0" loc="(1430,410)" name="Tunnel">
<a name="label" val="D_BUS"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1430,460)" name="Tunnel">
<a name="label" val="MEM_D"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1450,120)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MEM_W"/>
</comp>
<comp lib="0" loc="(1450,150)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MEM_R"/>
</comp>
<comp lib="0" loc="(1530,560)" name="Ground"/>
<comp lib="0" loc="(1530,560)" name="Tunnel">
<a name="facing" val="north"/>
<a name="label" val="MEM_D_BUF"/>
</comp>
<comp lib="0" loc="(1590,100)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="MEM_A"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(1890,170)" name="Tunnel">
<a name="label" val="MEM_D"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(400,790)" name="Pin">
<a name="appearance" val="classic"/>
</comp>
<comp lib="0" loc="(400,830)" name="Clock"/>
<comp lib="0" loc="(450,760)" name="Tunnel">
<a name="label" val="CLK"/>
</comp>
<comp lib="0" loc="(520,540)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="SEL_PC_LOAD"/>
</comp>
<comp lib="0" loc="(520,570)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="LATCH_PC"/>
</comp>
<comp lib="0" loc="(590,550)" name="Power">
<a name="facing" val="west"/>
</comp>
<comp lib="0" loc="(650,290)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="D_BUS"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(650,340)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="IR_W"/>
</comp>
<comp lib="0" loc="(690,320)" name="Power">
<a name="facing" val="west"/>
</comp>
<comp lib="0" loc="(690,790)" name="Tunnel">
<a name="label" val="PH_0"/>
</comp>
<comp lib="0" loc="(690,820)" name="Tunnel">
<a name="label" val="PH_1"/>
</comp>
<comp lib="0" loc="(690,850)" name="Tunnel">
<a name="label" val="PH_2"/>
</comp>
<comp lib="0" loc="(690,880)" name="Tunnel">
<a name="label" val="PH_3"/>
</comp>
<comp lib="0" loc="(690,910)" name="Tunnel">
<a name="label" val="PH_4"/>
</comp>
<comp lib="0" loc="(700,510)" name="Constant">
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(710,180)" name="Splitter">
<a name="appear" val="right"/>
<a name="bit1" val="0"/>
<a name="bit2" val="0"/>
<a name="bit3" val="0"/>
<a name="bit4" val="1"/>
<a name="bit5" val="1"/>
<a name="bit6" val="1"/>
<a name="bit7" val="1"/>
<a name="facing" val="north"/>
<a name="incoming" val="8"/>
<a name="spacing" val="5"/>
</comp>
<comp lib="0" loc="(710,180)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="A_BUS"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(740,600)" name="Tunnel">
<a name="facing" val="north"/>
<a name="label" val="PC_BUF"/>
</comp>
<comp lib="0" loc="(780,570)" name="Tunnel">
<a name="label" val="A_BUS"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(860,180)" name="Splitter">
<a name="appear" val="right"/>
<a name="bit1" val="0"/>
<a name="bit2" val="0"/>
<a name="bit3" val="0"/>
<a name="bit4" val="1"/>
<a name="bit5" val="1"/>
<a name="bit6" val="1"/>
<a name="bit7" val="1"/>
<a name="facing" val="north"/>
<a name="incoming" val="8"/>
<a name="spacing" val="5"/>
</comp>
<comp lib="0" loc="(860,180)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="D_BUS"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(970,1020)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="PH_1"/>
</comp>
<comp lib="0" loc="(970,1090)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="PH_1"/>
</comp>
<comp lib="0" loc="(970,610)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="PH_0"/>
</comp>
<comp lib="0" loc="(970,680)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="PH_0"/>
</comp>
<comp lib="0" loc="(970,780)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="PH_1"/>
</comp>
<comp lib="0" loc="(970,880)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="PH_1"/>
</comp>
<comp lib="0" loc="(970,950)" name="Tunnel">
<a name="facing" val="east"/>
<a name="label" val="PH_1"/>
</comp>
<comp lib="1" loc="(1060,1040)" name="OR Gate"/>
<comp lib="1" loc="(1060,1110)" name="OR Gate"/>
<comp lib="1" loc="(1060,630)" name="OR Gate"/>
<comp lib="1" loc="(1060,700)" name="OR Gate"/>
<comp lib="1" loc="(1060,800)" name="OR Gate"/>
<comp lib="1" loc="(1060,900)" name="OR Gate"/>
<comp lib="1" loc="(1060,970)" name="OR Gate"/>
<comp lib="1" loc="(1400,410)" name="Controlled Buffer">
<a name="control" val="left"/>
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(1400,460)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(490,790)" name="NOT Gate"/>
<comp lib="1" loc="(750,570)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="2" loc="(560,500)" name="Multiplexer">
<a name="width" val="8"/>
</comp>
<comp lib="3" loc="(760,520)" name="Adder"/>
<comp lib="4" loc="(1190,290)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="MAR"/>
<a name="showInTab" val="true"/>
</comp>
<comp lib="4" loc="(1190,430)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="MBR"/>
<a name="showInTab" val="true"/>
</comp>
<comp lib="4" loc="(1620,90)" name="RAM">
<a name="appearance" val="logisim_evolution"/>
<a name="databus" val="bidir"/>
<a name="label" val="mem"/>
<a name="trigger" val="high"/>
</comp>
<comp lib="4" loc="(600,500)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="PC"/>
<a name="showInTab" val="true"/>
</comp>
<comp lib="4" loc="(690,270)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="IR"/>
<a name="showInTab" val="true"/>
<a name="trigger" val="high"/>
</comp>
<comp lib="5" loc="(1030,160)" name="Hex Digit Display">
<a name="labelvisible" val="true"/>
</comp>
<comp lib="5" loc="(1080,160)" name="Hex Digit Display">
<a name="labelvisible" val="true"/>
</comp>
<comp lib="5" loc="(1190,170)" name="Hex Digit Display">
<a name="labelvisible" val="true"/>
</comp>
<comp lib="5" loc="(1240,170)" name="Hex Digit Display"/>
<comp lib="5" loc="(720,160)" name="Hex Digit Display">
<a name="labelvisible" val="true"/>
</comp>
<comp lib="5" loc="(770,160)" name="Hex Digit Display">
<a name="labelvisible" val="true"/>
</comp>
<comp lib="5" loc="(870,160)" name="Hex Digit Display">
<a name="labelvisible" val="true"/>
</comp>
<comp lib="5" loc="(920,160)" name="Hex Digit Display">
<a name="labelvisible" val="true"/>
</comp>
<comp loc="(1570,810)" name="register_file">
<a name="label" val="regs"/>
</comp>
<comp loc="(630,830)" name="ring_counter">
<a name="label" val="ring_clk"/>
</comp>
<wire from="(1060,1040)" to="(1100,1040)"/>
<wire from="(1060,1110)" to="(1100,1110)"/>
<wire from="(1060,630)" to="(1100,630)"/>
<wire from="(1060,700)" to="(1100,700)"/>
<wire from="(1060,800)" to="(1100,800)"/>
<wire from="(1060,900)" to="(1100,900)"/>
<wire from="(1060,970)" to="(1100,970)"/>
<wire from="(1150,310)" to="(1170,310)"/>
<wire from="(1150,340)" to="(1190,340)"/>
<wire from="(1150,370)" to="(1170,370)"/>
<wire from="(1150,450)" to="(1170,450)"/>
<wire from="(1150,480)" to="(1190,480)"/>
<wire from="(1150,510)" to="(1170,510)"/>
<wire from="(1170,310)" to="(1170,320)"/>
<wire from="(1170,320)" to="(1190,320)"/>
<wire from="(1170,360)" to="(1170,370)"/>
<wire from="(1170,360)" to="(1190,360)"/>
<wire from="(1170,450)" to="(1170,460)"/>
<wire from="(1170,460)" to="(1190,460)"/>
<wire from="(1170,500)" to="(1170,510)"/>
<wire from="(1170,500)" to="(1190,500)"/>
<wire from="(1250,320)" to="(1290,320)"/>
<wire from="(1250,460)" to="(1350,460)"/>
<wire from="(1350,410)" to="(1350,460)"/>
<wire from="(1350,410)" to="(1380,410)"/>
<wire from="(1350,460)" to="(1380,460)"/>
<wire from="(1390,380)" to="(1390,400)"/>
<wire from="(1390,470)" to="(1390,490)"/>
<wire from="(1400,410)" to="(1430,410)"/>
<wire from="(1400,460)" to="(1430,460)"/>
<wire from="(1450,120)" to="(1470,120)"/>
<wire from="(1450,150)" to="(1620,150)"/>
<wire from="(1470,120)" to="(1470,140)"/>
<wire from="(1470,140)" to="(1620,140)"/>
<wire from="(1590,100)" to="(1620,100)"/>
<wire from="(1870,170)" to="(1890,170)"/>
<wire from="(400,790)" to="(430,790)"/>
<wire from="(430,760)" to="(430,790)"/>
<wire from="(430,760)" to="(450,760)"/>
<wire from="(430,790)" to="(460,790)"/>
<wire from="(490,790)" to="(510,790)"/>
<wire from="(510,450)" to="(510,490)"/>
<wire from="(510,450)" to="(780,450)"/>
<wire from="(510,490)" to="(530,490)"/>
<wire from="(510,790)" to="(510,830)"/>
<wire from="(510,830)" to="(530,830)"/>
<wire from="(520,540)" to="(540,540)"/>
<wire from="(520,570)" to="(600,570)"/>
<wire from="(540,520)" to="(540,540)"/>
<wire from="(560,500)" to="(580,500)"/>
<wire from="(580,500)" to="(580,530)"/>
<wire from="(580,530)" to="(600,530)"/>
<wire from="(590,550)" to="(600,550)"/>
<wire from="(630,830)" to="(650,830)"/>
<wire from="(630,840)" to="(670,840)"/>
<wire from="(630,850)" to="(690,850)"/>
<wire from="(630,860)" to="(670,860)"/>
<wire from="(630,870)" to="(650,870)"/>
<wire from="(650,290)" to="(670,290)"/>
<wire from="(650,340)" to="(690,340)"/>
<wire from="(650,790)" to="(650,830)"/>
<wire from="(650,790)" to="(690,790)"/>
<wire from="(650,870)" to="(650,910)"/>
<wire from="(650,910)" to="(690,910)"/>
<wire from="(660,530)" to="(690,530)"/>
<wire from="(670,290)" to="(670,300)"/>
<wire from="(670,300)" to="(690,300)"/>
<wire from="(670,820)" to="(670,840)"/>
<wire from="(670,820)" to="(690,820)"/>
<wire from="(670,860)" to="(670,880)"/>
<wire from="(670,880)" to="(690,880)"/>
<wire from="(690,530)" to="(690,570)"/>
<wire from="(690,530)" to="(720,530)"/>
<wire from="(690,570)" to="(730,570)"/>
<wire from="(700,510)" to="(720,510)"/>
<wire from="(740,580)" to="(740,600)"/>
<wire from="(750,570)" to="(780,570)"/>
<wire from="(760,520)" to="(780,520)"/>
<wire from="(780,450)" to="(780,520)"/>
<wire from="(970,1020)" to="(1010,1020)"/>
<wire from="(970,1090)" to="(1010,1090)"/>
<wire from="(970,610)" to="(1010,610)"/>
<wire from="(970,680)" to="(1010,680)"/>
<wire from="(970,780)" to="(1010,780)"/>
<wire from="(970,880)" to="(1010,880)"/>
<wire from="(970,950)" to="(1010,950)"/>
</circuit>
<circuit name="ring_counter">
<a name="appearance" val="evolution"/>
<a name="circuit" val="ring_counter"/>
<a name="circuitnamedboxfixedsize" val="true"/>
<a name="simulationFrequency" val="1.0"/>
<comp lib="0" loc="(260,610)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="clk"/>
</comp>
<comp lib="0" loc="(660,390)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="facing" val="west"/>
<a name="label" val="ph_0"/>
<a name="output" val="true"/>
</comp>
<comp lib="0" loc="(660,410)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="facing" val="west"/>
<a name="label" val="ph_1"/>
<a name="output" val="true"/>
</comp>
<comp lib="0" loc="(660,430)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="facing" val="west"/>
<a name="label" val="ph_2"/>
<a name="output" val="true"/>
</comp>
<comp lib="0" loc="(660,450)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="facing" val="west"/>
<a name="label" val="ph_3"/>
<a name="output" val="true"/>
</comp>
<comp lib="0" loc="(660,470)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="facing" val="west"/>
<a name="label" val="ph_4"/>
<a name="output" val="true"/>
</comp>
<comp lib="2" loc="(560,570)" name="Decoder">
<a name="select" val="4"/>
</comp>
<comp lib="4" loc="(290,530)" name="Counter">
<a name="appearance" val="logisim_evolution"/>
<a name="max" val="0x1"/>
<a name="width" val="4"/>
</comp>
<wire from="(260,610)" to="(290,610)"/>
<wire from="(480,640)" to="(560,640)"/>
<wire from="(560,570)" to="(560,640)"/>
<wire from="(580,410)" to="(620,410)"/>
<wire from="(580,420)" to="(640,420)"/>
<wire from="(580,430)" to="(660,430)"/>
<wire from="(580,440)" to="(640,440)"/>
<wire from="(580,450)" to="(620,450)"/>
<wire from="(620,390)" to="(620,410)"/>
<wire from="(620,390)" to="(660,390)"/>
<wire from="(620,450)" to="(620,470)"/>
<wire from="(620,470)" to="(660,470)"/>
<wire from="(640,410)" to="(640,420)"/>
<wire from="(640,410)" to="(660,410)"/>
<wire from="(640,440)" to="(640,450)"/>
<wire from="(640,450)" to="(660,450)"/>
</circuit>
<circuit name="register_file">
<a name="appearance" val="custom"/>
<a name="circuit" val="register_file"/>
<a name="circuitnamedboxfixedsize" val="true"/>
<a name="simulationFrequency" val="1.0"/>
<appear>
<rect height="4" stroke="none" width="10" x="50" y="58"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="start" x="65" y="64">d_in</text>
<rect height="3" stroke="none" width="10" x="50" y="119"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="start" x="65" y="124">wr</text>
<rect height="3" stroke="none" width="10" x="50" y="129"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="start" x="65" y="134">a_rd</text>
<rect height="4" stroke="none" width="10" x="50" y="78"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="start" x="65" y="84">in_sel</text>
<rect height="4" stroke="none" width="10" x="50" y="88"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="start" x="65" y="94">a_sel</text>
<rect height="3" stroke="none" width="10" x="50" y="139"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="start" x="65" y="144">b_rd</text>
<rect height="4" stroke="none" width="10" x="50" y="98"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="start" x="65" y="104">b_sel</text>
<rect height="4" stroke="none" width="10" x="170" y="58"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="end" x="165" y="64">a_out</text>
<rect height="4" stroke="none" width="10" x="170" y="78"/>
<text dominant-baseline="alphabetic" fill="#404040" font-family="Dialog" font-size="12" text-anchor="end" x="165" y="84">b_out</text>
<rect fill="none" height="100" stroke="#000000" stroke-width="2" width="110" x="60" y="50"/>
<polygon fill="none" points="110,100 110,130 130,130 130,105 125,100" stroke="#000000"/>
<polyline fill="none" points="125,100 125,105" stroke="#000000"/>
<polyline fill="none" points="125,105 130,105" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,110 126,110" stroke="#000000"/>
<polyline fill="none" points="114,114 126,114" stroke="#000000"/>
<polyline fill="none" points="114,118 126,118" stroke="#000000"/>
<polyline fill="none" points="114,122 126,122" stroke="#000000"/>
<circ-anchor facing="east" x="180" y="60"/>
<circ-port dir="in" pin="160,260" x="50" y="60"/>
<circ-port dir="in" pin="160,300" x="50" y="120"/>
<circ-port dir="in" pin="200,750" x="50" y="80"/>
<circ-port dir="in" pin="400,740" x="50" y="130"/>
<circ-port dir="in" pin="400,770" x="50" y="90"/>
<circ-port dir="in" pin="530,770" x="50" y="140"/>
<circ-port dir="in" pin="530,800" x="50" y="100"/>
<circ-port dir="out" pin="610,260" x="180" y="60"/>
<circ-port dir="out" pin="730,290" x="180" y="80"/>
</appear>
<comp lib="0" loc="(160,260)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="d_in"/>
<a name="radix" val="16"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(160,300)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="wr"/>
</comp>
<comp lib="0" loc="(200,750)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="in_sel"/>
<a name="radix" val="16"/>
<a name="width" val="2"/>
</comp>
<comp lib="0" loc="(400,740)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="a_rd"/>
</comp>
<comp lib="0" loc="(400,770)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="a_sel"/>
<a name="radix" val="16"/>
<a name="width" val="2"/>
</comp>
<comp lib="0" loc="(530,770)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="b_rd"/>
</comp>
<comp lib="0" loc="(530,800)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="label" val="b_sel"/>
<a name="radix" val="16"/>
<a name="width" val="2"/>
</comp>
<comp lib="0" loc="(610,260)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="facing" val="west"/>
<a name="label" val="a_out"/>
<a name="output" val="true"/>
<a name="radix" val="16"/>
<a name="width" val="8"/>
</comp>
<comp lib="0" loc="(730,290)" name="Pin">
<a name="appearance" val="NewPins"/>
<a name="facing" val="west"/>
<a name="label" val="b_out"/>
<a name="output" val="true"/>
<a name="radix" val="16"/>
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(540,260)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(540,360)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(540,460)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(540,560)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(660,290)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(660,390)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(660,490)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="1" loc="(660,590)" name="Controlled Buffer">
<a name="width" val="8"/>
</comp>
<comp lib="2" loc="(220,720)" name="Decoder">
<a name="select" val="2"/>
</comp>
<comp lib="2" loc="(430,720)" name="Decoder">
<a name="select" val="2"/>
</comp>
<comp lib="2" loc="(550,750)" name="Decoder">
<a name="select" val="2"/>
</comp>
<comp lib="4" loc="(350,230)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="A"/>
<a name="labelloc" val="center"/>
<a name="showInTab" val="true"/>
</comp>
<comp lib="4" loc="(350,330)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="B"/>
<a name="labelloc" val="center"/>
<a name="showInTab" val="true"/>
</comp>
<comp lib="4" loc="(350,430)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="C"/>
<a name="labelloc" val="center"/>
<a name="showInTab" val="true"/>
</comp>
<comp lib="4" loc="(350,530)" name="Register">
<a name="appearance" val="logisim_evolution"/>
<a name="label" val="D"/>
<a name="labelloc" val="center"/>
<a name="showInTab" val="true"/>
</comp>
<wire from="(160,260)" to="(330,260)"/>
<wire from="(160,300)" to="(250,300)"/>
<wire from="(200,750)" to="(220,750)"/>
<wire from="(220,720)" to="(220,750)"/>
<wire from="(240,680)" to="(270,680)"/>
<wire from="(240,690)" to="(290,690)"/>
<wire from="(240,700)" to="(310,700)"/>
<wire from="(240,710)" to="(330,710)"/>
<wire from="(250,300)" to="(250,400)"/>
<wire from="(250,300)" to="(350,300)"/>
<wire from="(250,400)" to="(250,500)"/>
<wire from="(250,400)" to="(350,400)"/>
<wire from="(250,500)" to="(250,600)"/>
<wire from="(250,500)" to="(350,500)"/>
<wire from="(250,600)" to="(350,600)"/>
<wire from="(270,280)" to="(270,680)"/>
<wire from="(270,280)" to="(350,280)"/>
<wire from="(290,380)" to="(290,690)"/>
<wire from="(290,380)" to="(350,380)"/>
<wire from="(310,480)" to="(310,700)"/>
<wire from="(310,480)" to="(350,480)"/>
<wire from="(330,260)" to="(330,360)"/>
<wire from="(330,260)" to="(350,260)"/>
<wire from="(330,360)" to="(330,460)"/>
<wire from="(330,360)" to="(350,360)"/>
<wire from="(330,460)" to="(330,560)"/>
<wire from="(330,460)" to="(350,460)"/>
<wire from="(330,560)" to="(350,560)"/>
<wire from="(330,580)" to="(330,710)"/>
<wire from="(330,580)" to="(350,580)"/>
<wire from="(400,740)" to="(420,740)"/>
<wire from="(400,770)" to="(430,770)"/>
<wire from="(410,260)" to="(430,260)"/>
<wire from="(410,360)" to="(430,360)"/>
<wire from="(410,460)" to="(430,460)"/>
<wire from="(410,560)" to="(430,560)"/>
<wire from="(420,720)" to="(420,740)"/>
<wire from="(430,260)" to="(430,290)"/>
<wire from="(430,260)" to="(520,260)"/>
<wire from="(430,290)" to="(640,290)"/>
<wire from="(430,360)" to="(430,390)"/>
<wire from="(430,360)" to="(520,360)"/>
<wire from="(430,390)" to="(640,390)"/>
<wire from="(430,460)" to="(430,490)"/>
<wire from="(430,460)" to="(520,460)"/>
<wire from="(430,490)" to="(640,490)"/>
<wire from="(430,560)" to="(430,590)"/>
<wire from="(430,560)" to="(520,560)"/>
<wire from="(430,590)" to="(640,590)"/>
<wire from="(430,720)" to="(430,770)"/>
<wire from="(450,680)" to="(470,680)"/>
<wire from="(450,690)" to="(490,690)"/>
<wire from="(450,700)" to="(510,700)"/>
<wire from="(450,710)" to="(530,710)"/>
<wire from="(470,280)" to="(470,680)"/>
<wire from="(470,280)" to="(530,280)"/>
<wire from="(490,400)" to="(490,690)"/>
<wire from="(490,400)" to="(530,400)"/>
<wire from="(510,500)" to="(510,700)"/>
<wire from="(510,500)" to="(530,500)"/>
<wire from="(530,270)" to="(530,280)"/>
<wire from="(530,370)" to="(530,400)"/>
<wire from="(530,470)" to="(530,500)"/>
<wire from="(530,570)" to="(530,710)"/>
<wire from="(530,770)" to="(540,770)"/>
<wire from="(530,800)" to="(550,800)"/>
<wire from="(540,260)" to="(570,260)"/>
<wire from="(540,360)" to="(570,360)"/>
<wire from="(540,460)" to="(570,460)"/>
<wire from="(540,560)" to="(570,560)"/>
<wire from="(540,750)" to="(540,770)"/>
<wire from="(550,750)" to="(550,800)"/>
<wire from="(570,260)" to="(570,360)"/>
<wire from="(570,260)" to="(610,260)"/>
<wire from="(570,360)" to="(570,460)"/>
<wire from="(570,460)" to="(570,560)"/>
<wire from="(570,710)" to="(590,710)"/>
<wire from="(570,720)" to="(610,720)"/>
<wire from="(570,730)" to="(630,730)"/>
<wire from="(570,740)" to="(650,740)"/>
<wire from="(590,310)" to="(590,710)"/>
<wire from="(590,310)" to="(650,310)"/>
<wire from="(610,430)" to="(610,720)"/>
<wire from="(610,430)" to="(650,430)"/>
<wire from="(630,530)" to="(630,730)"/>
<wire from="(630,530)" to="(650,530)"/>
<wire from="(650,300)" to="(650,310)"/>
<wire from="(650,400)" to="(650,430)"/>
<wire from="(650,500)" to="(650,530)"/>
<wire from="(650,600)" to="(650,740)"/>
<wire from="(660,290)" to="(690,290)"/>
<wire from="(660,390)" to="(690,390)"/>
<wire from="(660,490)" to="(690,490)"/>
<wire from="(660,590)" to="(690,590)"/>
<wire from="(690,290)" to="(690,390)"/>
<wire from="(690,290)" to="(730,290)"/>
<wire from="(690,390)" to="(690,490)"/>
<wire from="(690,490)" to="(690,590)"/>
</circuit>
</project>