<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project source="2.7.1" version="1.0">
This file is intended to be loaded by Logisim (http://www.cburch.com/logisim/).
<lib desc="#Wiring" name="0">
    <tool name="Splitter">
      <a name="incoming" val="8"/>
      <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"/>
    </tool>
    <tool name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="in 0"/>
    </tool>
  </lib>
  <lib desc="#Gates" name="1">
    <tool name="NOT Gate">
      <a name="facing" val="south"/>
    </tool>
    <tool name="AND Gate">
      <a name="width" val="8"/>
      <a name="inputs" val="2"/>
    </tool>
    <tool name="OR Gate">
      <a name="width" val="8"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
    </tool>
    <tool name="XOR Gate">
      <a name="width" val="8"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
    </tool>
  </lib>
  <lib desc="#Plexers" name="2">
    <tool name="Multiplexer">
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </tool>
  </lib>
  <lib desc="#Arithmetic" name="3"/>
  <lib desc="#Memory" name="4">
    <tool name="RAM">
      <a name="bus" val="separate"/>
    </tool>
    <tool name="ROM">
      <a name="contents">addr/data: 8 8
0
</a>
    </tool>
  </lib>
  <lib desc="#I/O" name="5"/>
  <lib desc="#Base" name="6">
    <tool name="Text Tool">
      <a name="text" val=""/>
      <a name="font" val="SansSerif plain 12"/>
      <a name="halign" val="center"/>
      <a name="valign" val="base"/>
    </tool>
  </lib>
  <main name="main"/>
  <options>
    <a name="gateUndefined" val="ignore"/>
    <a name="simlimit" val="1000"/>
    <a name="simrand" val="0"/>
  </options>
  <mappings>
    <tool lib="6" map="Button2" name="Menu Tool"/>
    <tool lib="6" map="Button3" name="Menu Tool"/>
    <tool lib="6" map="Ctrl Button1" name="Menu Tool"/>
  </mappings>
  <toolbar>
    <tool lib="6" name="Poke Tool"/>
    <tool lib="6" name="Edit Tool"/>
    <tool lib="6" name="Text Tool">
      <a name="text" val=""/>
      <a name="font" val="SansSerif plain 12"/>
      <a name="halign" val="center"/>
      <a name="valign" val="base"/>
    </tool>
    <sep/>
    <tool lib="0" name="Pin">
      <a name="tristate" val="false"/>
    </tool>
    <tool lib="0" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="labelloc" val="east"/>
    </tool>
    <tool lib="1" name="NOT Gate"/>
    <tool lib="1" name="AND Gate"/>
    <tool lib="1" name="OR Gate"/>
  </toolbar>
  <circuit name="main">
    <a name="circuit" val="main"/>
    <a name="clabel" val=""/>
    <a name="clabelup" val="east"/>
    <a name="clabelfont" val="SansSerif plain 12"/>
    <wire from="(1180,360)" to="(1180,390)"/>
    <wire from="(680,180)" to="(680,210)"/>
    <wire from="(160,130)" to="(160,350)"/>
    <wire from="(680,180)" to="(1300,180)"/>
    <wire from="(140,130)" to="(160,130)"/>
    <wire from="(160,350)" to="(180,350)"/>
    <wire from="(220,110)" to="(240,110)"/>
    <wire from="(60,130)" to="(110,130)"/>
    <wire from="(70,180)" to="(120,180)"/>
    <wire from="(60,70)" to="(300,70)"/>
    <wire from="(120,180)" to="(680,180)"/>
    <wire from="(1300,180)" to="(1300,250)"/>
    <wire from="(1180,390)" to="(1300,390)"/>
    <wire from="(120,150)" to="(120,180)"/>
    <wire from="(320,350)" to="(350,350)"/>
    <wire from="(280,120)" to="(300,120)"/>
    <wire from="(160,130)" to="(240,130)"/>
    <wire from="(300,70)" to="(300,120)"/>
    <wire from="(60,70)" to="(60,130)"/>
    <wire from="(1300,280)" to="(1300,390)"/>
    <comp lib="6" loc="(127,103)" name="Text">
      <a name="text" val="Program Counter"/>
      <a name="font" val="SansSerif bold 12"/>
    </comp>
    <comp lib="3" loc="(280,120)" name="Adder"/>
    <comp lib="0" loc="(670,380)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="4" loc="(1250,320)" name="RAM">
      <a name="bus" val="separate"/>
    </comp>
    <comp lib="6" loc="(1179,272)" name="Text">
      <a name="text" val="Data Memory"/>
      <a name="font" val="SansSerif bold 12"/>
    </comp>
    <comp loc="(960,320)" name="alu"/>
    <comp lib="0" loc="(70,180)" name="Clock">
      <a name="label" val="Clock"/>
    </comp>
    <comp loc="(680,330)" name="register file"/>
    <comp lib="1" loc="(1300,280)" name="NOT Gate">
      <a name="facing" val="south"/>
    </comp>
    <comp lib="4" loc="(140,130)" name="Register">
      <a name="trigger" val="falling"/>
    </comp>
    <comp lib="0" loc="(350,350)" name="Splitter">
      <a name="fanout" val="13"/>
      <a name="incoming" val="32"/>
      <a name="bit0" val="12"/>
      <a name="bit1" val="12"/>
      <a name="bit2" val="12"/>
      <a name="bit3" val="12"/>
      <a name="bit4" val="12"/>
      <a name="bit5" val="12"/>
      <a name="bit6" val="12"/>
      <a name="bit7" val="12"/>
      <a name="bit8" val="11"/>
      <a name="bit9" val="11"/>
      <a name="bit10" val="none"/>
      <a name="bit11" val="none"/>
      <a name="bit12" val="10"/>
      <a name="bit13" val="10"/>
      <a name="bit14" val="none"/>
      <a name="bit15" val="none"/>
      <a name="bit16" val="9"/>
      <a name="bit17" val="9"/>
      <a name="bit18" val="none"/>
      <a name="bit19" val="none"/>
      <a name="bit20" val="8"/>
      <a name="bit21" val="7"/>
      <a name="bit22" val="6"/>
      <a name="bit23" val="none"/>
      <a name="bit24" val="5"/>
      <a name="bit25" val="4"/>
      <a name="bit26" val="3"/>
      <a name="bit27" val="2"/>
      <a name="bit28" val="1"/>
      <a name="bit29" val="1"/>
      <a name="bit30" val="none"/>
      <a name="bit31" val="0"/>
    </comp>
    <comp lib="0" loc="(670,300)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="0" loc="(220,110)" name="Constant">
      <a name="width" val="8"/>
    </comp>
    <comp lib="0" loc="(670,260)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="0" loc="(670,340)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
    </comp>
    <comp lib="4" loc="(320,350)" name="ROM">
      <a name="dataWidth" val="32"/>
      <a name="contents">addr/data: 8 32
1100001 111000 80000000
</a>
    </comp>
    <comp lib="6" loc="(245,302)" name="Text">
      <a name="text" val="Instruction Memory"/>
      <a name="font" val="SansSerif bold 12"/>
    </comp>
  </circuit>
  <circuit name="register file">
    <a name="circuit" val="register file"/>
    <a name="clabel" val=""/>
    <a name="clabelup" val="east"/>
    <a name="clabelfont" val="SansSerif plain 12"/>
    <appear>
      <rect fill="none" height="199" stroke="#000000" stroke-width="2" width="139" x="91" y="41"/>
      <text font-family="SansSerif" font-size="12" font-weight="bold" text-anchor="middle" x="161" y="65">Register File</text>
      <text font-family="SansSerif" font-size="12" text-anchor="middle" x="110" y="93">r0</text>
      <text font-family="SansSerif" font-size="12" text-anchor="middle" x="110" y="134">r1</text>
      <text font-family="SansSerif" font-size="12" text-anchor="middle" x="109" y="174">r2</text>
      <text font-family="SansSerif" font-size="12" text-anchor="middle" x="110" y="214">r3</text>
      <circ-port height="8" pin="190,150" width="8" x="176" y="236"/>
      <circ-port height="8" pin="130,190" width="8" x="96" y="236"/>
      <circ-port height="8" pin="170,430" width="8" x="136" y="236"/>
      <circ-port height="8" pin="170,450" width="8" x="136" y="36"/>
      <circ-port height="10" pin="480,50" width="10" x="225" y="115"/>
      <circ-port height="10" pin="480,150" width="10" x="125" y="85"/>
      <circ-port height="10" pin="480,230" width="10" x="125" y="125"/>
      <circ-port height="10" pin="480,310" width="10" x="125" y="165"/>
      <circ-port height="10" pin="480,390" width="10" x="125" y="205"/>
      <circ-port height="10" pin="480,510" width="10" x="225" y="175"/>
      <circ-port height="8" pin="340,70" width="8" x="86" y="116"/>
      <circ-port height="8" pin="340,490" width="8" x="86" y="176"/>
      <circ-anchor facing="east" height="6" width="6" x="137" y="157"/>
    </appear>
    <wire from="(320,150)" to="(380,150)"/>
    <wire from="(400,110)" to="(400,310)"/>
    <wire from="(260,150)" to="(260,230)"/>
    <wire from="(260,230)" to="(260,310)"/>
    <wire from="(260,310)" to="(260,390)"/>
    <wire from="(270,260)" to="(270,340)"/>
    <wire from="(270,180)" to="(270,260)"/>
    <wire from="(220,240)" to="(220,260)"/>
    <wire from="(210,160)" to="(210,250)"/>
    <wire from="(180,270)" to="(220,270)"/>
    <wire from="(230,440)" to="(270,440)"/>
    <wire from="(340,470)" to="(380,470)"/>
    <wire from="(340,90)" to="(380,90)"/>
    <wire from="(410,110)" to="(410,390)"/>
    <wire from="(130,190)" to="(160,190)"/>
    <wire from="(180,280)" to="(210,280)"/>
    <wire from="(270,340)" to="(270,440)"/>
    <wire from="(170,450)" to="(200,450)"/>
    <wire from="(170,430)" to="(200,430)"/>
    <wire from="(320,390)" to="(410,390)"/>
    <wire from="(410,390)" to="(410,450)"/>
    <wire from="(210,280)" to="(210,400)"/>
    <wire from="(320,230)" to="(390,230)"/>
    <wire from="(400,310)" to="(400,450)"/>
    <wire from="(300,330)" to="(300,340)"/>
    <wire from="(300,250)" to="(300,260)"/>
    <wire from="(300,170)" to="(300,180)"/>
    <wire from="(340,70)" to="(340,90)"/>
    <wire from="(340,470)" to="(340,490)"/>
    <wire from="(400,50)" to="(400,70)"/>
    <wire from="(400,490)" to="(400,510)"/>
    <wire from="(380,150)" to="(480,150)"/>
    <wire from="(390,230)" to="(390,450)"/>
    <wire from="(180,260)" to="(220,260)"/>
    <wire from="(300,410)" to="(300,440)"/>
    <wire from="(180,250)" to="(210,250)"/>
    <wire from="(390,230)" to="(480,230)"/>
    <wire from="(260,390)" to="(290,390)"/>
    <wire from="(260,150)" to="(290,150)"/>
    <wire from="(260,230)" to="(290,230)"/>
    <wire from="(260,310)" to="(290,310)"/>
    <wire from="(270,340)" to="(300,340)"/>
    <wire from="(270,440)" to="(300,440)"/>
    <wire from="(270,260)" to="(300,260)"/>
    <wire from="(270,180)" to="(300,180)"/>
    <wire from="(380,150)" to="(380,450)"/>
    <wire from="(380,110)" to="(380,150)"/>
    <wire from="(220,270)" to="(220,320)"/>
    <wire from="(210,160)" to="(290,160)"/>
    <wire from="(210,400)" to="(290,400)"/>
    <wire from="(320,310)" to="(400,310)"/>
    <wire from="(400,510)" to="(480,510)"/>
    <wire from="(400,50)" to="(480,50)"/>
    <wire from="(400,310)" to="(480,310)"/>
    <wire from="(190,150)" to="(260,150)"/>
    <wire from="(220,240)" to="(290,240)"/>
    <wire from="(220,320)" to="(290,320)"/>
    <wire from="(410,390)" to="(480,390)"/>
    <wire from="(390,110)" to="(390,230)"/>
    <wire from="(160,190)" to="(160,250)"/>
    <comp lib="0" loc="(480,390)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="register 3"/>
    </comp>
    <comp lib="0" loc="(480,510)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="read port 1"/>
    </comp>
    <comp lib="0" loc="(170,430)" name="Pin">
      <a name="tristate" val="false"/>
      <a name="label" val="write enable"/>
    </comp>
    <comp lib="0" loc="(480,310)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="register 2"/>
    </comp>
    <comp lib="0" loc="(170,450)" name="Pin">
      <a name="tristate" val="false"/>
      <a name="label" val="clock"/>
    </comp>
    <comp lib="4" loc="(320,150)" name="Register">
      <a name="trigger" val="falling"/>
      <a name="label" val="register 0"/>
    </comp>
    <comp lib="0" loc="(480,50)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="read port 0"/>
    </comp>
    <comp lib="0" loc="(480,150)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="register 0"/>
    </comp>
    <comp lib="4" loc="(320,390)" name="Register">
      <a name="trigger" val="falling"/>
      <a name="label" val="register 3"/>
    </comp>
    <comp lib="0" loc="(340,490)" name="Pin">
      <a name="facing" val="north"/>
      <a name="width" val="2"/>
      <a name="tristate" val="false"/>
      <a name="label" val="read address 1"/>
    </comp>
    <comp lib="4" loc="(320,230)" name="Register">
      <a name="trigger" val="falling"/>
      <a name="label" val="register 1"/>
    </comp>
    <comp lib="4" loc="(320,310)" name="Register">
      <a name="trigger" val="falling"/>
      <a name="label" val="register 2"/>
    </comp>
    <comp lib="1" loc="(230,440)" name="AND Gate">
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
    </comp>
    <comp lib="2" loc="(400,70)" name="Multiplexer">
      <a name="facing" val="north"/>
      <a name="select" val="2"/>
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="0" loc="(130,190)" name="Pin">
      <a name="width" val="2"/>
      <a name="tristate" val="false"/>
      <a name="label" val="write address"/>
    </comp>
    <comp lib="0" loc="(190,150)" name="Pin">
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="write data"/>
    </comp>
    <comp lib="0" loc="(340,70)" name="Pin">
      <a name="facing" val="south"/>
      <a name="width" val="2"/>
      <a name="tristate" val="false"/>
      <a name="label" val="read address 0"/>
    </comp>
    <comp lib="2" loc="(160,250)" name="Decoder">
      <a name="selloc" val="tr"/>
      <a name="select" val="2"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="0" loc="(480,230)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="register 1"/>
    </comp>
    <comp lib="2" loc="(400,490)" name="Multiplexer">
      <a name="facing" val="south"/>
      <a name="select" val="2"/>
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
  </circuit>
  <circuit name="alu">
    <a name="circuit" val="alu"/>
    <a name="clabel" val=""/>
    <a name="clabelup" val="east"/>
    <a name="clabelfont" val="SansSerif plain 12"/>
    <appear>
      <polygon fill="none" points="50,40 50,89 61,100 50,111 50,159 90,119 90,108 90,80" stroke="#000000" stroke-width="2"/>
      <text font-family="SansSerif" font-size="12" font-weight="bold" text-anchor="middle" x="74" y="105">ALU</text>
      <circ-port height="8" pin="290,220" width="8" x="46" y="66"/>
      <circ-port height="8" pin="290,290" width="8" x="46" y="126"/>
      <circ-port height="10" pin="780,260" width="10" x="85" y="95"/>
      <circ-port height="8" pin="370,180" width="8" x="56" y="46"/>
      <circ-port height="8" pin="450,180" width="8" x="66" y="56"/>
      <circ-port height="8" pin="590,180" width="8" x="76" y="66"/>
      <circ-port height="8" pin="690,180" width="8" x="86" y="76"/>
      <circ-anchor facing="east" height="6" width="6" x="87" y="97"/>
    </appear>
    <wire from="(530,320)" to="(580,320)"/>
    <wire from="(530,390)" to="(580,390)"/>
    <wire from="(390,290)" to="(440,290)"/>
    <wire from="(310,220)" to="(360,220)"/>
    <wire from="(610,240)" to="(670,240)"/>
    <wire from="(530,250)" to="(530,320)"/>
    <wire from="(550,230)" to="(550,300)"/>
    <wire from="(550,300)" to="(550,370)"/>
    <wire from="(530,320)" to="(530,390)"/>
    <wire from="(310,220)" to="(310,240)"/>
    <wire from="(530,250)" to="(570,250)"/>
    <wire from="(530,450)" to="(570,450)"/>
    <wire from="(630,250)" to="(670,250)"/>
    <wire from="(610,440)" to="(650,440)"/>
    <wire from="(390,290)" to="(390,310)"/>
    <wire from="(290,290)" to="(390,290)"/>
    <wire from="(370,180)" to="(370,210)"/>
    <wire from="(490,250)" to="(530,250)"/>
    <wire from="(590,180)" to="(590,220)"/>
    <wire from="(450,180)" to="(450,280)"/>
    <wire from="(650,270)" to="(650,440)"/>
    <wire from="(550,230)" to="(570,230)"/>
    <wire from="(550,430)" to="(570,430)"/>
    <wire from="(610,310)" to="(630,310)"/>
    <wire from="(650,270)" to="(670,270)"/>
    <wire from="(390,230)" to="(550,230)"/>
    <wire from="(290,220)" to="(310,220)"/>
    <wire from="(550,300)" to="(580,300)"/>
    <wire from="(550,370)" to="(580,370)"/>
    <wire from="(470,300)" to="(490,300)"/>
    <wire from="(610,380)" to="(640,380)"/>
    <wire from="(640,260)" to="(670,260)"/>
    <wire from="(430,310)" to="(440,310)"/>
    <wire from="(390,310)" to="(400,310)"/>
    <wire from="(710,260)" to="(780,260)"/>
    <wire from="(640,260)" to="(640,380)"/>
    <wire from="(310,240)" to="(320,240)"/>
    <wire from="(350,240)" to="(360,240)"/>
    <wire from="(550,370)" to="(550,430)"/>
    <wire from="(530,390)" to="(530,450)"/>
    <wire from="(490,250)" to="(490,300)"/>
    <wire from="(630,250)" to="(630,310)"/>
    <wire from="(690,180)" to="(690,240)"/>
    <comp lib="2" loc="(710,260)" name="Multiplexer">
      <a name="selloc" val="tr"/>
      <a name="select" val="2"/>
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="1" loc="(610,310)" name="AND Gate">
      <a name="width" val="8"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
    </comp>
    <comp lib="0" loc="(690,180)" name="Pin">
      <a name="facing" val="south"/>
      <a name="width" val="2"/>
      <a name="tristate" val="false"/>
      <a name="label" val="operation"/>
    </comp>
    <comp lib="0" loc="(290,290)" name="Pin">
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="b"/>
    </comp>
    <comp lib="1" loc="(350,240)" name="NOT Gate">
      <a name="width" val="8"/>
    </comp>
    <comp lib="0" loc="(450,180)" name="Pin">
      <a name="facing" val="south"/>
      <a name="tristate" val="false"/>
      <a name="label" val="b invert"/>
    </comp>
    <comp lib="1" loc="(430,310)" name="NOT Gate">
      <a name="width" val="8"/>
    </comp>
    <comp lib="1" loc="(610,440)" name="XOR Gate">
      <a name="width" val="8"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
    </comp>
    <comp lib="2" loc="(470,300)" name="Multiplexer">
      <a name="selloc" val="tr"/>
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="1" loc="(610,380)" name="OR Gate">
      <a name="width" val="8"/>
      <a name="size" val="30"/>
      <a name="inputs" val="2"/>
    </comp>
    <comp lib="0" loc="(590,180)" name="Pin">
      <a name="facing" val="south"/>
      <a name="tristate" val="false"/>
      <a name="label" val="carry in"/>
    </comp>
    <comp lib="0" loc="(780,260)" name="Pin">
      <a name="facing" val="west"/>
      <a name="output" val="true"/>
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="result"/>
    </comp>
    <comp lib="2" loc="(390,230)" name="Multiplexer">
      <a name="selloc" val="tr"/>
      <a name="width" val="8"/>
      <a name="enable" val="false"/>
    </comp>
    <comp lib="3" loc="(610,240)" name="Adder"/>
    <comp lib="0" loc="(290,220)" name="Pin">
      <a name="width" val="8"/>
      <a name="tristate" val="false"/>
      <a name="label" val="a"/>
    </comp>
    <comp lib="0" loc="(370,180)" name="Pin">
      <a name="facing" val="south"/>
      <a name="tristate" val="false"/>
      <a name="label" val="a invert"/>
    </comp>
  </circuit>
</project>
