diff --git a/CPU/logi_compiler_sources/__pycache__/circ_manager.cpython-310.pyc b/CPU/logi_compiler_sources/__pycache__/circ_manager.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..329add6f065ebccbd5199dc115f9d07d32847e0d Binary files /dev/null and b/CPU/logi_compiler_sources/__pycache__/circ_manager.cpython-310.pyc differ diff --git a/CPU/logi_compiler_sources/instruction_test.lsn b/CPU/logi_compiler_sources/instruction_test.lsn index a1903dd7b52b3e93f8df83d290c10db69bfbf87c..02ca9b7701b9171341f2d2291ff6d16312b563ea 100644 --- a/CPU/logi_compiler_sources/instruction_test.lsn +++ b/CPU/logi_compiler_sources/instruction_test.lsn @@ -42,11 +42,12 @@ fonction: r0 = r0 + r0 br [r7] -# Lecture et écriture mémoire +# Lecture RAM -> REG BANK ld r0,0x20[r2] ld r3,0b1010[r4] ld r3,3[r4] +# écriture mémoire REG BANK -> RAM st r0,0x2A[r2] st r1,19[r3] diff --git a/CPU/logi_compiler_sources/instructions.circ b/CPU/logi_compiler_sources/instructions.circ new file mode 100644 index 0000000000000000000000000000000000000000..0c9c8752f00806fe6a80e400416ae90b95013782 --- /dev/null +++ b/CPU/logi_compiler_sources/instructions.circ @@ -0,0 +1,1029 @@ +<?xml version="1.0" ?> +<project source="2.10.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="fanout" val="32"/> + + + <a name="incoming" val="32"/> + + + </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="#HDL-IP" name="6"/> + + + <lib desc="#Base" name="7"> + + + <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="rom"/> + + + <options> + + + <a name="gateUndefined" val="ignore"/> + + + <a name="simlimit" val="1000"/> + + + <a name="simrand" val="0"/> + + + <a name="tickmain" val="half_period"/> + + + </options> + + + <mappings> + + + <tool lib="7" map="Button2" name="Menu Tool"/> + + + <tool lib="7" map="Ctrl Button1" name="Menu Tool"/> + + + <tool lib="7" map="Button3" name="Menu Tool"/> + + + </mappings> + + + <toolbar> + + + <tool lib="7" name="Poke Tool"/> + + + <tool lib="7" name="Edit Tool"/> + + + <tool lib="7" 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="rom"> + + + <a name="circuit" val="rom"/> + + + <a name="clabel" val=""/> + + + <a name="clabelup" val="east"/> + + + <a name="clabelfont" val="SansSerif plain 12"/> + + + <a name="circuitvhdl" val="false"/> + + + <a name="circuitvhdlpath" val=""/> + + + <wire from="(410,680)" to="(450,680)"/> + + + <wire from="(300,810)" to="(370,810)"/> + + + <wire from="(550,180)" to="(660,180)"/> + + + <wire from="(260,180)" to="(370,180)"/> + + + <wire from="(180,510)" to="(190,510)"/> + + + <wire from="(550,240)" to="(660,240)"/> + + + <wire from="(590,750)" to="(660,750)"/> + + + <wire from="(300,190)" to="(370,190)"/> + + + <wire from="(590,310)" to="(660,310)"/> + + + <wire from="(260,240)" to="(370,240)"/> + + + <wire from="(980,650)" to="(1000,650)"/> + + + <wire from="(590,250)" to="(660,250)"/> + + + <wire from="(590,190)" to="(660,190)"/> + + + <wire from="(300,750)" to="(370,750)"/> + + + <wire from="(300,310)" to="(370,310)"/> + + + <wire from="(550,400)" to="(660,400)"/> + + + <wire from="(590,550)" to="(660,550)"/> + + + <wire from="(550,680)" to="(660,680)"/> + + + <wire from="(260,620)" to="(370,620)"/> + + + <wire from="(260,400)" to="(370,400)"/> + + + <wire from="(300,550)" to="(370,550)"/> + + + <wire from="(300,630)" to="(370,630)"/> + + + <wire from="(550,620)" to="(660,620)"/> + + + <wire from="(260,680)" to="(370,680)"/> + + + <wire from="(550,280)" to="(660,280)"/> + + + <wire from="(180,480)" to="(390,480)"/> + + + <wire from="(260,340)" to="(370,340)"/> + + + <wire from="(590,690)" to="(660,690)"/> + + + <wire from="(300,690)" to="(370,690)"/> + + + <wire from="(300,250)" to="(370,250)"/> + + + <wire from="(550,780)" to="(660,780)"/> + + + <wire from="(260,520)" to="(370,520)"/> + + + <wire from="(410,300)" to="(450,300)"/> + + + <wire from="(260,740)" to="(370,740)"/> + + + <wire from="(550,340)" to="(660,340)"/> + + + <wire from="(550,560)" to="(660,560)"/> + + + <wire from="(260,560)" to="(370,560)"/> + + + <wire from="(590,630)" to="(660,630)"/> + + + <wire from="(550,740)" to="(660,740)"/> + + + <wire from="(700,680)" to="(740,680)"/> + + + <wire from="(300,610)" to="(370,610)"/> + + + <wire from="(300,790)" to="(370,790)"/> + + + <wire from="(550,440)" to="(660,440)"/> + + + <wire from="(260,780)" to="(370,780)"/> + + + <wire from="(550,520)" to="(660,520)"/> + + + <wire from="(590,210)" to="(660,210)"/> + + + <wire from="(300,390)" to="(370,390)"/> + + + <wire from="(300,730)" to="(370,730)"/> + + + <wire from="(300,230)" to="(370,230)"/> + + + <wire from="(550,580)" to="(660,580)"/> + + + <wire from="(260,720)" to="(370,720)"/> + + + <wire from="(590,270)" to="(660,270)"/> + + + <wire from="(140,490)" to="(160,490)"/> + + + <wire from="(260,280)" to="(370,280)"/> + + + <wire from="(300,670)" to="(370,670)"/> + + + <wire from="(300,450)" to="(370,450)"/> + + + <wire from="(550,140)" to="(660,140)"/> + + + <wire from="(260,360)" to="(370,360)"/> + + + <wire from="(260,800)" to="(370,800)"/> + + + <wire from="(260,600)" to="(370,600)"/> + + + <wire from="(590,590)" to="(660,590)"/> + + + <wire from="(550,700)" to="(660,700)"/> + + + <wire from="(260,420)" to="(370,420)"/> + + + <wire from="(300,350)" to="(370,350)"/> + + + <wire from="(300,570)" to="(370,570)"/> + + + <wire from="(590,370)" to="(660,370)"/> + + + <wire from="(590,150)" to="(660,150)"/> + + + <wire from="(300,290)" to="(370,290)"/> + + + <wire from="(550,820)" to="(660,820)"/> + + + <wire from="(590,810)" to="(660,810)"/> + + + <wire from="(260,300)" to="(370,300)"/> + + + <wire from="(550,200)" to="(660,200)"/> + + + <wire from="(680,460)" to="(680,480)"/> + + + <wire from="(810,740)" to="(910,740)"/> + + + <wire from="(550,640)" to="(660,640)"/> + + + <wire from="(180,490)" to="(180,510)"/> + + + <wire from="(260,660)" to="(370,660)"/> + + + <wire from="(390,480)" to="(390,520)"/> + + + <wire from="(590,430)" to="(660,430)"/> + + + <wire from="(550,260)" to="(660,260)"/> + + + <wire from="(300,590)" to="(370,590)"/> + + + <wire from="(860,730)" to="(910,730)"/> + + + <wire from="(590,350)" to="(660,350)"/> + + + <wire from="(260,380)" to="(370,380)"/> + + + <wire from="(300,530)" to="(370,530)"/> + + + <wire from="(550,320)" to="(660,320)"/> + + + <wire from="(590,710)" to="(660,710)"/> + + + <wire from="(260,320)" to="(370,320)"/> + + + <wire from="(950,740)" to="(1000,740)"/> + + + <wire from="(550,760)" to="(660,760)"/> + + + <wire from="(590,650)" to="(660,650)"/> + + + <wire from="(260,540)" to="(370,540)"/> + + + <wire from="(550,540)" to="(660,540)"/> + + + <wire from="(260,760)" to="(370,760)"/> + + + <wire from="(300,710)" to="(370,710)"/> + + + <wire from="(300,410)" to="(370,410)"/> + + + <wire from="(590,530)" to="(660,530)"/> + + + <wire from="(260,220)" to="(370,220)"/> + + + <wire from="(590,330)" to="(660,330)"/> + + + <wire from="(300,770)" to="(370,770)"/> + + + <wire from="(590,770)" to="(660,770)"/> + + + <wire from="(550,220)" to="(660,220)"/> + + + <wire from="(300,170)" to="(370,170)"/> + + + <wire from="(590,410)" to="(660,410)"/> + + + <wire from="(300,830)" to="(370,830)"/> + + + <wire from="(550,380)" to="(660,380)"/> + + + <wire from="(260,160)" to="(370,160)"/> + + + <wire from="(590,830)" to="(660,830)"/> + + + <wire from="(550,160)" to="(660,160)"/> + + + <wire from="(920,820)" to="(930,820)"/> + + + <wire from="(860,750)" to="(910,750)"/> + + + <wire from="(590,790)" to="(660,790)"/> + + + <wire from="(1000,650)" to="(1000,740)"/> + + + <wire from="(590,570)" to="(660,570)"/> + + + <wire from="(260,640)" to="(370,640)"/> + + + <wire from="(810,720)" to="(910,720)"/> + + + <wire from="(550,660)" to="(660,660)"/> + + + <wire from="(590,170)" to="(660,170)"/> + + + <wire from="(590,610)" to="(660,610)"/> + + + <wire from="(550,720)" to="(660,720)"/> + + + <wire from="(260,580)" to="(370,580)"/> + + + <wire from="(300,330)" to="(370,330)"/> + + + <wire from="(260,440)" to="(370,440)"/> + + + <wire from="(550,360)" to="(660,360)"/> + + + <wire from="(590,450)" to="(660,450)"/> + + + <wire from="(390,480)" to="(680,480)"/> + + + <wire from="(590,670)" to="(660,670)"/> + + + <wire from="(700,300)" to="(740,300)"/> + + + <wire from="(300,270)" to="(370,270)"/> + + + <wire from="(550,800)" to="(660,800)"/> + + + <wire from="(590,390)" to="(660,390)"/> + + + <wire from="(590,730)" to="(660,730)"/> + + + <wire from="(930,760)" to="(930,820)"/> + + + <wire from="(1000,740)" to="(1030,740)"/> + + + <wire from="(260,200)" to="(370,200)"/> + + + <wire from="(260,820)" to="(370,820)"/> + + + <wire from="(300,370)" to="(370,370)"/> + + + <wire from="(300,150)" to="(370,150)"/> + + + <wire from="(300,430)" to="(370,430)"/> + + + <wire from="(550,420)" to="(660,420)"/> + + + <wire from="(260,140)" to="(370,140)"/> + + + <wire from="(590,230)" to="(660,230)"/> + + + <wire from="(680,480)" to="(680,520)"/> + + + <wire from="(260,260)" to="(370,260)"/> + + + <wire from="(590,290)" to="(660,290)"/> + + + <wire from="(300,650)" to="(370,650)"/> + + + <wire from="(390,460)" to="(390,480)"/> + + + <wire from="(300,210)" to="(370,210)"/> + + + <wire from="(260,700)" to="(370,700)"/> + + + <wire from="(550,300)" to="(660,300)"/> + + + <wire from="(550,600)" to="(660,600)"/> + + + <comp lib="0" loc="(920,820)" name="Tunnel"> + + + <a name="facing" val="east"/> + + + <a name="width" val="2"/> + + + <a name="label" val="sel"/> + + + </comp> + + + <comp lib="2" loc="(410,300)" name="Multiplexer"> + + + <a name="select" val="5"/> + + + <a name="width" val="16"/> + + + </comp> + + + <comp lib="2" loc="(700,300)" name="Multiplexer"> + + + <a name="select" val="5"/> + + + <a name="width" val="16"/> + + + </comp> + + + <comp lib="0" loc="(980,650)" name="Probe"> + + + <a name="radix" val="16"/> + + + </comp> + + + <comp lib="0" loc="(810,720)" name="Tunnel"> + + + <a name="facing" val="east"/> + + + <a name="width" val="16"/> + + + <a name="label" val="mux0"/> + + + </comp> + + + <comp lib="0" loc="(160,490)" name="Splitter"> + + + <a name="incoming" val="7"/> + + + <a name="appear" val="center"/> + + + <a name="bit1" val="0"/> + + + <a name="bit2" val="0"/> + + + <a name="bit3" val="0"/> + + + <a name="bit4" val="0"/> + + + <a name="bit5" val="1"/> + + + <a name="bit6" val="1"/> + + + </comp> + + + <comp lib="2" loc="(410,680)" name="Multiplexer"> + + + <a name="selloc" val="tr"/> + + + <a name="select" val="5"/> + + + <a name="width" val="16"/> + + + </comp> + + + <comp lib="0" loc="(450,680)" name="Tunnel"> + + + <a name="width" val="16"/> + + + <a name="label" val="mux1"/> + + + </comp> + + + <comp lib="0" loc="(740,300)" name="Tunnel"> + + + <a name="width" val="16"/> + + + <a name="label" val="mux2"/> + + + </comp> + + + <comp lib="2" loc="(700,680)" name="Multiplexer"> + + + <a name="selloc" val="tr"/> + + + <a name="select" val="5"/> + + + <a name="width" val="16"/> + + + </comp> + + + <comp lib="0" loc="(190,510)" name="Tunnel"> + + + <a name="width" val="2"/> + + + <a name="label" val="sel"/> + + + </comp> + + + <comp lib="0" loc="(1030,740)" name="Pin"> + + + <a name="facing" val="west"/> + + + <a name="output" val="true"/> + + + <a name="width" val="16"/> + + + <a name="label" val="data_out"/> + + + <a name="labelloc" val="east"/> + + + </comp> + + + <comp lib="0" loc="(450,300)" name="Tunnel"> + + + <a name="width" val="16"/> + + + <a name="label" val="mux0"/> + + + </comp> + + + <comp lib="0" loc="(860,730)" name="Tunnel"> + + + <a name="facing" val="east"/> + + + <a name="width" val="16"/> + + + <a name="label" val="mux1"/> + + + </comp> + + + <comp lib="0" loc="(860,750)" name="Tunnel"> + + + <a name="facing" val="east"/> + + + <a name="width" val="16"/> + + + <a name="label" val="mux3"/> + + + </comp> + + + <comp lib="0" loc="(810,740)" name="Tunnel"> + + + <a name="facing" val="east"/> + + + <a name="width" val="16"/> + + + <a name="label" val="mux2"/> + + + </comp> + + + <comp lib="0" loc="(140,490)" name="Pin"> + + + <a name="width" val="7"/> + + + <a name="tristate" val="false"/> + + + <a name="label" val="addr"/> + + + </comp> + + + <comp lib="2" loc="(950,740)" name="Multiplexer"> + + + <a name="select" val="2"/> + + + <a name="width" val="16"/> + + + </comp> + + + <comp lib="0" loc="(740,680)" name="Tunnel"> + + + <a name="width" val="16"/> + + + <a name="label" val="mux3"/> + + + </comp> + + + <comp lib="0" loc="(260, 140)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000000000010000"/> + </comp> + <comp lib="0" loc="(300, 150)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1100001000000000"/> + </comp> + <comp lib="0" loc="(260, 160)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000010001110111"/> + </comp> + <comp lib="0" loc="(300, 170)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b0001011001010000"/> + </comp> + <comp lib="0" loc="(260, 180)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1010100000001011"/> + </comp> + <comp lib="0" loc="(300, 190)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000010001100001"/> + </comp> + <comp lib="0" loc="(260, 200)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b0001011001010000"/> + </comp> + <comp lib="0" loc="(300, 210)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1010100000001110"/> + </comp> + <comp lib="0" loc="(260, 220)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000010001100100"/> + </comp> + <comp lib="0" loc="(300, 230)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b0001011001010000"/> + </comp> + <comp lib="0" loc="(260, 240)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1010100000001000"/> + </comp> + <comp lib="0" loc="(300, 250)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000010001100100"/> + </comp> + <comp lib="0" loc="(260, 260)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b0001011001010000"/> + </comp> + <comp lib="0" loc="(300, 270)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1010100000001000"/> + </comp> + <comp lib="0" loc="(260, 280)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1011111111110010"/> + </comp> + <comp lib="0" loc="(300, 290)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000100001100100"/> + </comp> + <comp lib="0" loc="(260, 300)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000101001100100"/> + </comp> + <comp lib="0" loc="(300, 310)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1111111000000000"/> + </comp> + <comp lib="0" loc="(260, 320)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000100010011100"/> + </comp> + <comp lib="0" loc="(300, 330)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000101010011100"/> + </comp> + <comp lib="0" loc="(260, 340)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1111111000000000"/> + </comp> + <comp lib="0" loc="(300, 350)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000100000110010"/> + </comp> + <comp lib="0" loc="(260, 360)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000101011001110"/> + </comp> + <comp lib="0" loc="(300, 370)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1111111000000000"/> + </comp> + <comp lib="0" loc="(260, 380)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000100011001110"/> + </comp> + <comp lib="0" loc="(300, 390)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1000101000110010"/> + </comp> + <comp lib="0" loc="(260, 400)" name="Constant"> + <a name="width" val="16"/> + <a name="value" val="0b1111111000000000"/> + </comp> + </circuit> + + +</project> diff --git a/CPU/logi_compiler_sources/logi_compiler.py b/CPU/logi_compiler_sources/logi_compiler.py index 257afc1c4bdea5098e65697409159bb20f85af5a..4500f1c0e55b7ae0a02796fc063f8a91957214c0 100755 --- a/CPU/logi_compiler_sources/logi_compiler.py +++ b/CPU/logi_compiler_sources/logi_compiler.py @@ -11,8 +11,8 @@ from circ_manager import CircManager def error_message(message, error_level='FATAL ERROR'): if error_level is not None: - print '***', error_level, '***' - print message + print( '***', error_level, '***') + print( message) sys.exit(0) @@ -78,9 +78,9 @@ class LogiCompiler(): error_message('On line ' + str(self.current_line)) if instruction.data is not None: if instruction.data is 'label': - print operands[0][0] + print( operands[0][0]) else: - print instruction.data, ' : ', ' '.join(operands[0]) + print( instruction.data, ' : ', ' '.join(operands[0])) binary_list.append(instruction.data) else: error_message('On line ' + str(self.current_line)) @@ -156,7 +156,7 @@ class LogiCompiler(): def __get_binary_from_2_operands(self, operands, line_nbr, label_with_line): if operands[0] not in LogiCompiler.opcode: - print 'Error:', operands[0], 'not reconized' + print( 'Error:', operands[0], 'not reconized') return opcode = LogiCompiler.opcode[operands[0]] # bcz / bcn / bcc / bcv @@ -192,7 +192,7 @@ class LogiCompiler(): def __get_binary_from_3_operands(self, operands): if operands[1] not in LogiCompiler.opcode: - print 'Error:', operands[1], 'not reconized' + print( 'Error:', operands[1], 'not reconized') return # Affectation opcode = LogiCompiler.opcode[operands[1]] @@ -209,7 +209,7 @@ class LogiCompiler(): reserved = '000000000' return opcode + result + reserved if operands[2] not in LogiCompiler.opcode: - print 'Error:', operands[2], 'not reconized' + print( 'Error:', operands[2], 'not reconized') return # asr / not opcode = LogiCompiler.opcode[operands[2]] @@ -256,7 +256,7 @@ class LogiCompiler(): # add / sub / shift / or / and else: if operands[3] not in LogiCompiler.opcode: - print 'Error:', operands[3], 'not reconized' + print( 'Error:', operands[3], 'not reconized') return opcode = LogiCompiler.opcode[operands[3]] result = LogiCompiler.register[operands[0]] @@ -272,9 +272,9 @@ class LogiCompiler(): def __get_binary_from_10_operands(self, operands): # GR / GW if operands[0] not in LogiCompiler.opcode: - print 'Error:', operands[0], 'not reconized' + print( 'Error:', operands[0], 'not reconized') return - print(operands) + print((operands)) opcode = LogiCompiler.opcode[operands[0]] data = LogiCompiler.register[operands[2]] ah = LogiCompiler.register[operands[5]] @@ -307,10 +307,10 @@ class LogiCompiler(): def __bin_to_binary(self, binnum, bits): if len(binnum) > bits+2: - print binnum, 'size must not be longer than', bits, 'bits' + print( binnum, 'size must not be longer than', bits, 'bits') return elif len(binnum) <= 2: - print binnum, 'is too short' + print( binnum, 'is too short') return return binnum[2:].zfill(bits) @@ -323,7 +323,7 @@ class LogiCompiler(): if __name__ == '__main__': if len(sys.argv) != 3: - print 'usage: ./logi_compiler lsn_assembly_file output_file.circ' + print( 'usage: ./logi_compiler lsn_assembly_file output_file.circ') sys.exit(0) in_file = sys.argv[1] out_file = sys.argv[2] @@ -331,7 +331,7 @@ if __name__ == '__main__': logicomp = LogiCompiler() binary_list = logicomp.get_binary_list(assembly) if len(binary_list) > 128: - print len(binary_list), 'instructions found. Max limit is 128' + print( len(binary_list), 'instructions found. Max limit is 128') sys.exit(0) circ_manager = CircManager() circ_manager.append_constant_from_binary_list(binary_list) @@ -341,4 +341,4 @@ if __name__ == '__main__': for char in circ_manager.get_XML(): f.write(char) f.close() - print out_file, 'successfully generated' + print( out_file, 'successfully generated') diff --git a/CPU/logi_compiler_sources/prog.lsn b/CPU/logi_compiler_sources/prog.lsn new file mode 100644 index 0000000000000000000000000000000000000000..6a76f29d5ba4a2e65c18ee3c188e62f5e4df851d --- /dev/null +++ b/CPU/logi_compiler_sources/prog.lsn @@ -0,0 +1,106 @@ +# ############# PERIPHERALS ADDRESSES ############ +# 0x10 UART BLUETOOTH IN +# 0x11 PWM WHEEL RIGHT +# 0x12 PWM WHEEL LEFT +# ################################################ + + +# ################# KEYS RECEIVED ################ +# 0x77 'w' +# 0x61 'a' +# 0x73 's' +# 0x64 'd' +# ################################################ + + +# ################### MOVEMENTS ################## +# -100 = 0x9C +# -50 = 0xCE +# ! GO FORWARD +# RIGHT = LEFT = 100 + +# ! GO BACKWARD +# RIGHT = LEFT = -100 + +# ! GO LEFT +# RIGHT = 50 +# LEFT = -50 + +# ! GO RIGHT +# RIGHT = -50 +# LEFT = 50 +# ################################################ + + +loop: +# SET ADDR TO READ UART +r0 = 0x10 + +# LOAD UART VALUE FROM RAM TO r1 +ld r1,0[r0] + +# r2 and r3 IS A TEMP BUFFER TO CHECK VALUE +# CHECK FOR W +r2 = 0x77 +r3 = r1 - r2 +# IF THE UART IN == 'w' , GO FORWARD +bcz goforward + +# CHECK FOR A +r2 = 0x61 +r3 = r1 - r2 +# IF THE UART IN == 'a' , GO LEFT +bcz goleft + +# CHECK FOR S +r2 = 0x64 +r3 = r1 - r2 +# IF THE UART IN == 's' , GO BACKWARD +bcz gobackward + +# CHECK FOR d +r2 = 0x64 +r3 = r1 - r2 +# IF THE UART IN == 'd' , GO RIGHT +bcz goleft + +# BRANCH LOOP - GET BACK UP TO LOOP LABEL +b loop + + + + + +# ############# FONCTIONS MOVEMENTS ############ +# r4 FOR PWM RIGHT +# r5 FOR PWM LEFT +# FONCTION TO SET REGS AT FORWARD +goforward: +r4 = 100 +r5 = 100 +br [r7] + +# FONCTION TO SET REGS AT FORWARD +gobackward: +r4 = 0x9C +r5 = 0x9C +br [r7] + +# FONCTION TO SET REGS AT FORWARD +goleft: +r4 = 50 +r5 = 0xCE +br [r7] + +# FONCTION TO SET REGS AT FORWARD +goright: +r4 = 0xCE +r5 = 50 +br [r7] +# ################################################ + + + + + + diff --git a/CPU/logi_compiler_sources/rom_base_BACKUP.circ b/CPU/logi_compiler_sources/rom_base_BACKUP.circ new file mode 100644 index 0000000000000000000000000000000000000000..19fca5f1c39ca70b9446d516c5fe1e0d66240643 --- /dev/null +++ b/CPU/logi_compiler_sources/rom_base_BACKUP.circ @@ -0,0 +1,309 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<project source="2.10.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="fanout" val="32"/> + <a name="incoming" val="32"/> + </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="#HDL-IP" name="6"/> + <lib desc="#Base" name="7"> + <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="rom"/> + <options> + <a name="gateUndefined" val="ignore"/> + <a name="simlimit" val="1000"/> + <a name="simrand" val="0"/> + <a name="tickmain" val="half_period"/> + </options> + <mappings> + <tool lib="7" map="Button2" name="Menu Tool"/> + <tool lib="7" map="Ctrl Button1" name="Menu Tool"/> + <tool lib="7" map="Button3" name="Menu Tool"/> + </mappings> + <toolbar> + <tool lib="7" name="Poke Tool"/> + <tool lib="7" name="Edit Tool"/> + <tool lib="7" 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="rom"> + <a name="circuit" val="rom"/> + <a name="clabel" val=""/> + <a name="clabelup" val="east"/> + <a name="clabelfont" val="SansSerif plain 12"/> + <a name="circuitvhdl" val="false"/> + <a name="circuitvhdlpath" val=""/> + <wire from="(410,680)" to="(450,680)"/> + <wire from="(300,810)" to="(370,810)"/> + <wire from="(550,180)" to="(660,180)"/> + <wire from="(260,180)" to="(370,180)"/> + <wire from="(180,510)" to="(190,510)"/> + <wire from="(550,240)" to="(660,240)"/> + <wire from="(590,750)" to="(660,750)"/> + <wire from="(300,190)" to="(370,190)"/> + <wire from="(590,310)" to="(660,310)"/> + <wire from="(260,240)" to="(370,240)"/> + <wire from="(980,650)" to="(1000,650)"/> + <wire from="(590,250)" to="(660,250)"/> + <wire from="(590,190)" to="(660,190)"/> + <wire from="(300,750)" to="(370,750)"/> + <wire from="(300,310)" to="(370,310)"/> + <wire from="(550,400)" to="(660,400)"/> + <wire from="(590,550)" to="(660,550)"/> + <wire from="(550,680)" to="(660,680)"/> + <wire from="(260,620)" to="(370,620)"/> + <wire from="(260,400)" to="(370,400)"/> + <wire from="(300,550)" to="(370,550)"/> + <wire from="(300,630)" to="(370,630)"/> + <wire from="(550,620)" to="(660,620)"/> + <wire from="(260,680)" to="(370,680)"/> + <wire from="(550,280)" to="(660,280)"/> + <wire from="(180,480)" to="(390,480)"/> + <wire from="(260,340)" to="(370,340)"/> + <wire from="(590,690)" to="(660,690)"/> + <wire from="(300,690)" to="(370,690)"/> + <wire from="(300,250)" to="(370,250)"/> + <wire from="(550,780)" to="(660,780)"/> + <wire from="(260,520)" to="(370,520)"/> + <wire from="(410,300)" to="(450,300)"/> + <wire from="(260,740)" to="(370,740)"/> + <wire from="(550,340)" to="(660,340)"/> + <wire from="(550,560)" to="(660,560)"/> + <wire from="(260,560)" to="(370,560)"/> + <wire from="(590,630)" to="(660,630)"/> + <wire from="(550,740)" to="(660,740)"/> + <wire from="(700,680)" to="(740,680)"/> + <wire from="(300,610)" to="(370,610)"/> + <wire from="(300,790)" to="(370,790)"/> + <wire from="(550,440)" to="(660,440)"/> + <wire from="(260,780)" to="(370,780)"/> + <wire from="(550,520)" to="(660,520)"/> + <wire from="(590,210)" to="(660,210)"/> + <wire from="(300,390)" to="(370,390)"/> + <wire from="(300,730)" to="(370,730)"/> + <wire from="(300,230)" to="(370,230)"/> + <wire from="(550,580)" to="(660,580)"/> + <wire from="(260,720)" to="(370,720)"/> + <wire from="(590,270)" to="(660,270)"/> + <wire from="(140,490)" to="(160,490)"/> + <wire from="(260,280)" to="(370,280)"/> + <wire from="(300,670)" to="(370,670)"/> + <wire from="(300,450)" to="(370,450)"/> + <wire from="(550,140)" to="(660,140)"/> + <wire from="(260,360)" to="(370,360)"/> + <wire from="(260,800)" to="(370,800)"/> + <wire from="(260,600)" to="(370,600)"/> + <wire from="(590,590)" to="(660,590)"/> + <wire from="(550,700)" to="(660,700)"/> + <wire from="(260,420)" to="(370,420)"/> + <wire from="(300,350)" to="(370,350)"/> + <wire from="(300,570)" to="(370,570)"/> + <wire from="(590,370)" to="(660,370)"/> + <wire from="(590,150)" to="(660,150)"/> + <wire from="(300,290)" to="(370,290)"/> + <wire from="(550,820)" to="(660,820)"/> + <wire from="(590,810)" to="(660,810)"/> + <wire from="(260,300)" to="(370,300)"/> + <wire from="(550,200)" to="(660,200)"/> + <wire from="(680,460)" to="(680,480)"/> + <wire from="(810,740)" to="(910,740)"/> + <wire from="(550,640)" to="(660,640)"/> + <wire from="(180,490)" to="(180,510)"/> + <wire from="(260,660)" to="(370,660)"/> + <wire from="(390,480)" to="(390,520)"/> + <wire from="(590,430)" to="(660,430)"/> + <wire from="(550,260)" to="(660,260)"/> + <wire from="(300,590)" to="(370,590)"/> + <wire from="(860,730)" to="(910,730)"/> + <wire from="(590,350)" to="(660,350)"/> + <wire from="(260,380)" to="(370,380)"/> + <wire from="(300,530)" to="(370,530)"/> + <wire from="(550,320)" to="(660,320)"/> + <wire from="(590,710)" to="(660,710)"/> + <wire from="(260,320)" to="(370,320)"/> + <wire from="(950,740)" to="(1000,740)"/> + <wire from="(550,760)" to="(660,760)"/> + <wire from="(590,650)" to="(660,650)"/> + <wire from="(260,540)" to="(370,540)"/> + <wire from="(550,540)" to="(660,540)"/> + <wire from="(260,760)" to="(370,760)"/> + <wire from="(300,710)" to="(370,710)"/> + <wire from="(300,410)" to="(370,410)"/> + <wire from="(590,530)" to="(660,530)"/> + <wire from="(260,220)" to="(370,220)"/> + <wire from="(590,330)" to="(660,330)"/> + <wire from="(300,770)" to="(370,770)"/> + <wire from="(590,770)" to="(660,770)"/> + <wire from="(550,220)" to="(660,220)"/> + <wire from="(300,170)" to="(370,170)"/> + <wire from="(590,410)" to="(660,410)"/> + <wire from="(300,830)" to="(370,830)"/> + <wire from="(550,380)" to="(660,380)"/> + <wire from="(260,160)" to="(370,160)"/> + <wire from="(590,830)" to="(660,830)"/> + <wire from="(550,160)" to="(660,160)"/> + <wire from="(920,820)" to="(930,820)"/> + <wire from="(860,750)" to="(910,750)"/> + <wire from="(590,790)" to="(660,790)"/> + <wire from="(1000,650)" to="(1000,740)"/> + <wire from="(590,570)" to="(660,570)"/> + <wire from="(260,640)" to="(370,640)"/> + <wire from="(810,720)" to="(910,720)"/> + <wire from="(550,660)" to="(660,660)"/> + <wire from="(590,170)" to="(660,170)"/> + <wire from="(590,610)" to="(660,610)"/> + <wire from="(550,720)" to="(660,720)"/> + <wire from="(260,580)" to="(370,580)"/> + <wire from="(300,330)" to="(370,330)"/> + <wire from="(260,440)" to="(370,440)"/> + <wire from="(550,360)" to="(660,360)"/> + <wire from="(590,450)" to="(660,450)"/> + <wire from="(390,480)" to="(680,480)"/> + <wire from="(590,670)" to="(660,670)"/> + <wire from="(700,300)" to="(740,300)"/> + <wire from="(300,270)" to="(370,270)"/> + <wire from="(550,800)" to="(660,800)"/> + <wire from="(590,390)" to="(660,390)"/> + <wire from="(590,730)" to="(660,730)"/> + <wire from="(930,760)" to="(930,820)"/> + <wire from="(1000,740)" to="(1030,740)"/> + <wire from="(260,200)" to="(370,200)"/> + <wire from="(260,820)" to="(370,820)"/> + <wire from="(300,370)" to="(370,370)"/> + <wire from="(300,150)" to="(370,150)"/> + <wire from="(300,430)" to="(370,430)"/> + <wire from="(550,420)" to="(660,420)"/> + <wire from="(260,140)" to="(370,140)"/> + <wire from="(590,230)" to="(660,230)"/> + <wire from="(680,480)" to="(680,520)"/> + <wire from="(260,260)" to="(370,260)"/> + <wire from="(590,290)" to="(660,290)"/> + <wire from="(300,650)" to="(370,650)"/> + <wire from="(390,460)" to="(390,480)"/> + <wire from="(300,210)" to="(370,210)"/> + <wire from="(260,700)" to="(370,700)"/> + <wire from="(550,300)" to="(660,300)"/> + <wire from="(550,600)" to="(660,600)"/> + <comp lib="0" loc="(920,820)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="2"/> + <a name="label" val="sel"/> + </comp> + <comp lib="2" loc="(410,300)" name="Multiplexer"> + <a name="select" val="5"/> + <a name="width" val="16"/> + </comp> + <comp lib="2" loc="(700,300)" name="Multiplexer"> + <a name="select" val="5"/> + <a name="width" val="16"/> + </comp> + <comp lib="0" loc="(980,650)" name="Probe"> + <a name="radix" val="16"/> + </comp> + <comp lib="0" loc="(810,720)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="16"/> + <a name="label" val="mux0"/> + </comp> + <comp lib="0" loc="(160,490)" name="Splitter"> + <a name="incoming" val="7"/> + <a name="appear" val="center"/> + <a name="bit1" val="0"/> + <a name="bit2" val="0"/> + <a name="bit3" val="0"/> + <a name="bit4" val="0"/> + <a name="bit5" val="1"/> + <a name="bit6" val="1"/> + </comp> + <comp lib="2" loc="(410,680)" name="Multiplexer"> + <a name="selloc" val="tr"/> + <a name="select" val="5"/> + <a name="width" val="16"/> + </comp> + <comp lib="0" loc="(450,680)" name="Tunnel"> + <a name="width" val="16"/> + <a name="label" val="mux1"/> + </comp> + <comp lib="0" loc="(740,300)" name="Tunnel"> + <a name="width" val="16"/> + <a name="label" val="mux2"/> + </comp> + <comp lib="2" loc="(700,680)" name="Multiplexer"> + <a name="selloc" val="tr"/> + <a name="select" val="5"/> + <a name="width" val="16"/> + </comp> + <comp lib="0" loc="(190,510)" name="Tunnel"> + <a name="width" val="2"/> + <a name="label" val="sel"/> + </comp> + <comp lib="0" loc="(1030,740)" name="Pin"> + <a name="facing" val="west"/> + <a name="output" val="true"/> + <a name="width" val="16"/> + <a name="label" val="data_out"/> + <a name="labelloc" val="east"/> + </comp> + <comp lib="0" loc="(450,300)" name="Tunnel"> + <a name="width" val="16"/> + <a name="label" val="mux0"/> + </comp> + <comp lib="0" loc="(860,730)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="16"/> + <a name="label" val="mux1"/> + </comp> + <comp lib="0" loc="(860,750)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="16"/> + <a name="label" val="mux3"/> + </comp> + <comp lib="0" loc="(810,740)" name="Tunnel"> + <a name="facing" val="east"/> + <a name="width" val="16"/> + <a name="label" val="mux2"/> + </comp> + <comp lib="0" loc="(140,490)" name="Pin"> + <a name="width" val="7"/> + <a name="tristate" val="false"/> + <a name="label" val="addr"/> + </comp> + <comp lib="2" loc="(950,740)" name="Multiplexer"> + <a name="select" val="2"/> + <a name="width" val="16"/> + </comp> + <comp lib="0" loc="(740,680)" name="Tunnel"> + <a name="width" val="16"/> + <a name="label" val="mux3"/> + </comp> + </circuit> +</project>