Last active
March 7, 2023 23:27
-
-
Save voidbert/f515bca59a5ecbcb18eded8cd12062e5 to your computer and use it in GitHub Desktop.
Hardware implementation of a Collatz Conjecture convergence checker (logisim-evolution)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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="Splitter"> | |
<a name="appear" val="right"/> | |
<a name="facing" val="north"/> | |
</tool> | |
<tool name="Pin"> | |
<a name="appearance" val="classic"/> | |
</tool> | |
<tool name="Clock"> | |
<a name="facing" val="north"/> | |
</tool> | |
</lib> | |
<lib desc="#Gates" name="1"> | |
<tool name="AND Gate"> | |
<a name="size" val="30"/> | |
</tool> | |
<tool name="OR Gate"> | |
<a name="facing" val="north"/> | |
</tool> | |
</lib> | |
<lib desc="#Plexers" name="2"/> | |
<lib desc="#Arithmetic" name="3"/> | |
<lib desc="#Memory" name="4"/> | |
<lib desc="#I/O" name="5"/> | |
<lib desc="#Base" name="6"/> | |
<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="Poke 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="Wiring Tool"/> | |
<tool lib="6" 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="(120,230)" name="Clock"/> | |
<comp lib="0" loc="(210,160)" name="Splitter"> | |
<a name="appear" val="center"/> | |
<a name="facing" val="north"/> | |
<a name="fanout" val="32"/> | |
<a name="incoming" val="32"/> | |
</comp> | |
<comp lib="0" loc="(370,170)" name="Splitter"> | |
<a name="bit0" val="1"/> | |
<a name="bit10" val="1"/> | |
<a name="bit11" val="1"/> | |
<a name="bit12" val="1"/> | |
<a name="bit13" val="1"/> | |
<a name="bit14" val="1"/> | |
<a name="bit15" val="1"/> | |
<a name="bit16" val="1"/> | |
<a name="bit17" val="1"/> | |
<a name="bit18" val="1"/> | |
<a name="bit19" val="1"/> | |
<a name="bit2" val="1"/> | |
<a name="bit20" val="1"/> | |
<a name="bit21" val="1"/> | |
<a name="bit22" val="1"/> | |
<a name="bit23" val="1"/> | |
<a name="bit24" val="1"/> | |
<a name="bit25" val="1"/> | |
<a name="bit26" val="1"/> | |
<a name="bit27" val="1"/> | |
<a name="bit28" val="1"/> | |
<a name="bit29" val="1"/> | |
<a name="bit3" val="1"/> | |
<a name="bit30" val="1"/> | |
<a name="bit31" val="0"/> | |
<a name="bit4" val="1"/> | |
<a name="bit5" val="1"/> | |
<a name="bit6" val="1"/> | |
<a name="bit7" val="1"/> | |
<a name="bit8" val="1"/> | |
<a name="bit9" val="1"/> | |
<a name="incoming" val="32"/> | |
<a name="spacing" val="3"/> | |
</comp> | |
<comp lib="0" loc="(370,270)" name="Splitter"> | |
<a name="appear" val="right"/> | |
<a name="bit0" val="1"/> | |
<a name="bit1" val="0"/> | |
<a name="bit10" val="0"/> | |
<a name="bit11" val="0"/> | |
<a name="bit12" val="0"/> | |
<a name="bit13" val="0"/> | |
<a name="bit14" val="0"/> | |
<a name="bit15" val="0"/> | |
<a name="bit16" val="0"/> | |
<a name="bit17" val="0"/> | |
<a name="bit18" val="0"/> | |
<a name="bit19" val="0"/> | |
<a name="bit2" val="0"/> | |
<a name="bit20" val="0"/> | |
<a name="bit21" val="0"/> | |
<a name="bit22" val="0"/> | |
<a name="bit23" val="0"/> | |
<a name="bit24" val="0"/> | |
<a name="bit25" val="0"/> | |
<a name="bit26" val="0"/> | |
<a name="bit27" val="0"/> | |
<a name="bit28" val="0"/> | |
<a name="bit29" val="0"/> | |
<a name="bit3" val="0"/> | |
<a name="bit30" val="0"/> | |
<a name="bit31" val="0"/> | |
<a name="bit4" val="0"/> | |
<a name="bit5" val="0"/> | |
<a name="bit6" val="0"/> | |
<a name="bit7" val="0"/> | |
<a name="bit8" val="0"/> | |
<a name="bit9" val="0"/> | |
<a name="incoming" val="32"/> | |
<a name="spacing" val="3"/> | |
</comp> | |
<comp lib="0" loc="(450,160)" name="Constant"> | |
<a name="value" val="0x0"/> | |
</comp> | |
<comp lib="0" loc="(450,280)" name="Constant"> | |
<a name="value" val="0x0"/> | |
</comp> | |
<comp lib="0" loc="(470,170)" name="Splitter"> | |
<a name="appear" val="right"/> | |
<a name="bit0" val="1"/> | |
<a name="bit1" val="0"/> | |
<a name="bit10" val="0"/> | |
<a name="bit11" val="0"/> | |
<a name="bit12" val="0"/> | |
<a name="bit13" val="0"/> | |
<a name="bit14" val="0"/> | |
<a name="bit15" val="0"/> | |
<a name="bit16" val="0"/> | |
<a name="bit17" val="0"/> | |
<a name="bit18" val="0"/> | |
<a name="bit19" val="0"/> | |
<a name="bit2" val="0"/> | |
<a name="bit20" val="0"/> | |
<a name="bit21" val="0"/> | |
<a name="bit22" val="0"/> | |
<a name="bit23" val="0"/> | |
<a name="bit24" val="0"/> | |
<a name="bit25" val="0"/> | |
<a name="bit26" val="0"/> | |
<a name="bit27" val="0"/> | |
<a name="bit28" val="0"/> | |
<a name="bit29" val="0"/> | |
<a name="bit3" val="0"/> | |
<a name="bit30" val="0"/> | |
<a name="bit31" val="0"/> | |
<a name="bit4" val="0"/> | |
<a name="bit5" val="0"/> | |
<a name="bit6" val="0"/> | |
<a name="bit7" val="0"/> | |
<a name="bit8" val="0"/> | |
<a name="bit9" val="0"/> | |
<a name="facing" val="west"/> | |
<a name="incoming" val="32"/> | |
<a name="spacing" val="3"/> | |
</comp> | |
<comp lib="0" loc="(470,320)" name="Splitter"> | |
<a name="appear" val="right"/> | |
<a name="bit0" val="1"/> | |
<a name="bit10" val="1"/> | |
<a name="bit11" val="1"/> | |
<a name="bit12" val="1"/> | |
<a name="bit13" val="1"/> | |
<a name="bit14" val="1"/> | |
<a name="bit15" val="1"/> | |
<a name="bit16" val="1"/> | |
<a name="bit17" val="1"/> | |
<a name="bit18" val="1"/> | |
<a name="bit19" val="1"/> | |
<a name="bit2" val="1"/> | |
<a name="bit20" val="1"/> | |
<a name="bit21" val="1"/> | |
<a name="bit22" val="1"/> | |
<a name="bit23" val="1"/> | |
<a name="bit24" val="1"/> | |
<a name="bit25" val="1"/> | |
<a name="bit26" val="1"/> | |
<a name="bit27" val="1"/> | |
<a name="bit28" val="1"/> | |
<a name="bit29" val="1"/> | |
<a name="bit3" val="1"/> | |
<a name="bit30" val="1"/> | |
<a name="bit31" val="0"/> | |
<a name="bit4" val="1"/> | |
<a name="bit5" val="1"/> | |
<a name="bit6" val="1"/> | |
<a name="bit7" val="1"/> | |
<a name="bit8" val="1"/> | |
<a name="bit9" val="1"/> | |
<a name="facing" val="west"/> | |
<a name="incoming" val="32"/> | |
<a name="spacing" val="3"/> | |
</comp> | |
<comp lib="0" loc="(510,150)" name="Constant"> | |
<a name="facing" val="south"/> | |
</comp> | |
<comp lib="1" loc="(120,340)" name="NOT Gate"> | |
<a name="facing" val="north"/> | |
</comp> | |
<comp lib="1" loc="(190,230)" name="AND Gate"> | |
<a name="inputs" val="3"/> | |
</comp> | |
<comp lib="1" loc="(200,70)" name="OR Gate"> | |
<a name="facing" val="north"/> | |
<a name="inputs" val="31"/> | |
<a name="size" val="70"/> | |
</comp> | |
<comp lib="1" loc="(600,110)" name="OR Gate"> | |
<a name="size" val="30"/> | |
</comp> | |
<comp lib="1" loc="(680,50)" name="NOT Gate"/> | |
<comp lib="1" loc="(710,120)" name="AND Gate"> | |
<a name="size" val="30"/> | |
</comp> | |
<comp lib="1" loc="(710,60)" name="AND Gate"> | |
<a name="size" val="30"/> | |
</comp> | |
<comp lib="2" loc="(630,190)" name="Multiplexer"> | |
<a name="width" val="32"/> | |
</comp> | |
<comp lib="3" loc="(530,180)" name="Adder"> | |
<a name="width" val="32"/> | |
</comp> | |
<comp lib="4" loc="(290,160)" name="Register"> | |
<a name="appearance" val="logisim_evolution"/> | |
<a name="width" val="32"/> | |
</comp> | |
<comp lib="5" loc="(750,120)" name="LED"/> | |
<comp lib="5" loc="(750,60)" name="LED"/> | |
<comp lib="6" loc="(35,450)" name="Text"> | |
<a name="font" val="SansSerif plain 16"/> | |
<a name="halign" val="left"/> | |
<a name="text" val="If a number doesn't converge, the circuit will loop forever"/> | |
</comp> | |
<comp lib="6" loc="(35,470)" name="Text"> | |
<a name="font" val="SansSerif plain 16"/> | |
<a name="halign" val="left"/> | |
<a name="text" val="For example, external hardware could limit the number of iterations"/> | |
<a name="valign" val="center"/> | |
</comp> | |
<comp lib="6" loc="(35,500)" name="Text"> | |
<a name="font" val="SansSerif plain 16"/> | |
<a name="halign" val="left"/> | |
<a name="text" val="and analyze numbers that exceed it in more detail"/> | |
</comp> | |
<comp lib="6" loc="(405,345)" name="Text"> | |
<a name="font" val="SansSerif bold 12"/> | |
<a name="text" val="ODD"/> | |
</comp> | |
<comp lib="6" loc="(440,215)" name="Text"> | |
<a name="font" val="SansSerif bold 12"/> | |
<a name="text" val="3x + 1 = 2x + x + 1"/> | |
</comp> | |
<comp lib="6" loc="(440,230)" name="Text"> | |
<a name="font" val="SansSerif bold 12"/> | |
<a name="text" val="2x = x << 1"/> | |
</comp> | |
<comp lib="6" loc="(520,305)" name="Text"> | |
<a name="font" val="SansSerif bold 12"/> | |
<a name="text" val="x / 2 = x >> 1"/> | |
</comp> | |
<comp lib="6" loc="(775,125)" name="Text"> | |
<a name="halign" val="left"/> | |
<a name="text" val="OVERFLOW"/> | |
</comp> | |
<comp lib="6" loc="(775,65)" name="Text"> | |
<a name="halign" val="left"/> | |
<a name="text" val="CONVERGES"/> | |
</comp> | |
<wire from="(120,230)" to="(140,230)"/> | |
<wire from="(120,250)" to="(120,340)"/> | |
<wire from="(120,250)" to="(140,250)"/> | |
<wire from="(120,370)" to="(120,410)"/> | |
<wire from="(120,410)" to="(730,410)"/> | |
<wire from="(190,230)" to="(290,230)"/> | |
<wire from="(200,50)" to="(200,70)"/> | |
<wire from="(200,50)" to="(650,50)"/> | |
<wire from="(210,160)" to="(210,190)"/> | |
<wire from="(210,190)" to="(210,370)"/> | |
<wire from="(210,190)" to="(290,190)"/> | |
<wire from="(210,370)" to="(640,370)"/> | |
<wire from="(350,190)" to="(370,190)"/> | |
<wire from="(360,70)" to="(360,140)"/> | |
<wire from="(360,70)" to="(680,70)"/> | |
<wire from="(370,170)" to="(370,190)"/> | |
<wire from="(370,190)" to="(370,270)"/> | |
<wire from="(370,190)" to="(490,190)"/> | |
<wire from="(390,100)" to="(390,130)"/> | |
<wire from="(390,100)" to="(570,100)"/> | |
<wire from="(390,160)" to="(420,160)"/> | |
<wire from="(390,280)" to="(420,280)"/> | |
<wire from="(390,310)" to="(390,350)"/> | |
<wire from="(390,350)" to="(610,350)"/> | |
<wire from="(40,210)" to="(140,210)"/> | |
<wire from="(40,50)" to="(200,50)"/> | |
<wire from="(40,50)" to="(40,210)"/> | |
<wire from="(420,130)" to="(420,160)"/> | |
<wire from="(420,130)" to="(450,130)"/> | |
<wire from="(420,280)" to="(420,310)"/> | |
<wire from="(420,310)" to="(450,310)"/> | |
<wire from="(470,170)" to="(490,170)"/> | |
<wire from="(470,320)" to="(580,320)"/> | |
<wire from="(510,150)" to="(510,160)"/> | |
<wire from="(510,200)" to="(510,210)"/> | |
<wire from="(510,210)" to="(540,210)"/> | |
<wire from="(530,180)" to="(560,180)"/> | |
<wire from="(540,120)" to="(540,210)"/> | |
<wire from="(540,120)" to="(570,120)"/> | |
<wire from="(560,180)" to="(560,200)"/> | |
<wire from="(560,200)" to="(600,200)"/> | |
<wire from="(580,180)" to="(580,320)"/> | |
<wire from="(580,180)" to="(600,180)"/> | |
<wire from="(600,110)" to="(680,110)"/> | |
<wire from="(610,210)" to="(610,350)"/> | |
<wire from="(610,350)" to="(660,350)"/> | |
<wire from="(630,190)" to="(640,190)"/> | |
<wire from="(640,190)" to="(640,370)"/> | |
<wire from="(660,130)" to="(660,350)"/> | |
<wire from="(660,130)" to="(680,130)"/> | |
<wire from="(710,120)" to="(730,120)"/> | |
<wire from="(710,60)" to="(750,60)"/> | |
<wire from="(730,120)" to="(730,410)"/> | |
<wire from="(730,120)" to="(750,120)"/> | |
</circuit> | |
</project> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment