Question: Failed Tests 7 : Program simulates two instructions addi $ 3 , $ 3 , 8 and Iw $ 3 , 8 (
Failed Tests
: Program simulates two instructions "addi $
$ and Iw $$ correctly
: Program simulates two instructions "addi $
$ and sw $$ correctly
: Program simulates two instructions "addi $
$ then "beq $$ correctly
: Program simulates a set of instruction "addi
$ $ "addi $ $ and "bne $ $
correctly
Here is my code this is in python
import argparse
# Set up commandline argument parsing
parser argparse.ArgumentParserdescription"Simulate singlecycle MIPS datapath beta version
parser.addargumentprogram", requiredTrue, help"Path to machinelanguage input file"
parser.addargumentmemory", requiredTrue, help"Path to memory file"
args parser.parseargs
programfilepath args.program
memoryfilepath args.memory
# File paths for output
controloutputfilepath 'outcontrol.txt
registersoutputfilepath 'outregisters.txt
memoryoutputfilepath 'outmemory.txt
# Initialize registers, program counter, and memory
registers
pc
memory
# Load memory from file
with openmemoryfilepath, r as f:
memory intlinestrip for line in freadlines
# Define control signals and ALU operations
CONTROLSIGNALS
'add':
'sub':
'addi':
lw:
SW: XX
'beq': XX
'bne': xx
ALUOPCODES
'add': lambda x y: x y
'sub': lambda x y: x y
'addi': lambda x imm: x imm
# Parse an instruction to get opcode and fields
def parseinstructioninstruction:
opcode instruction:
rs intinstruction:
rt intinstruction:
rd intinstruction:
immediate intinstruction: if instruction else intinstruction:
funct instruction:
return opcode, rs rt rd immediate, funct
# Execute an instruction
def executeinstructioninstruction:
global pc registers, memory
opcode, rs rt rd immediate, funct parseinstructioninstruction
zero # Zero flag for branch instructions
if opcode : # Rtype instructions
if funct : # add
controlsignals CONTROLSIGNALSadd
registersrd ALUOPCODESaddregistersrs registersrt
elif funct : # sub
controlsignals CONTROLSIGNALSsub
registersrd ALUOPCODESsubregistersrs registersrt
else:
return None, None
elif opcode : # addi
controlsignals CONTROLSIGNALSaddi
registersrt ALUOPCODESaddiregistersrs immediate
elif opcode : # lw
controlsignals CONTROLSIGNALSlw
address registersrs immediate
if address or address lenmemory: # Validate address
return controlsignals, "segfault"
value memoryaddress
if value : # Signextend bit value
value
registersrt value
elif opcode : # sw
controlsignals CONTROLSIGNALSsw
address registersrs immediate
if address or address lenmemory: # Validate address
return controlsignals, "segfault"
memoryaddress registersrt
elif opcode : # beq
controlsignals CONTROLSIGNALSbeq
zero if registersrs registersrt else
branchoffset immediate # Shift left by for byte offset
if zero:
pc branchoffset
else:
pc
elif opcode : # bne
controlsignals CONTROLSIGNALSbne
zero if registersrs registersrt else
branchoffset immediate # Shift left by for byte offset
if zero:
pc branchoffset
else:
pc
else:
return None, None
pc
return controlsignals strzero None
# Ensure control signal is exactly bits
def pad control signalsignal:
return signal:
# Simulate instructions
def simulateinstructions:
instructionmemory pc i line.strip for i line in enumerateinstructions
with opencontroloutputfilepath, w as controlfile,
openregistersoutputfilepath, w as registersfile:
registersfile.writefpcjoinmapstr registers
for currentpc instruction in instructionmemory:
if pc or pc leninstructions:
controlfile.write Segmentation Fault
registersfile.write Segmentation Fault
return
controlsignals, fault executeinstructioninstruction
if fault "segfault":
controlfile.write Segmentation Fault
registersfile.write Segmentation Fault
return
controlsignals padcontrolsignalcontrolsignals
controlfile.writefcontrolsignals
registersfile.writefpcjoinmapstr registers
with openmemoryoutputfilepath, w as memoryfile:
memoryfile.writelinesfword
for word in memory
# Load instructions from the program file
with openprogramfilepath, r as f:
instructions freadlines
# Run the simulat Failed Tests
: Program simulates two instructions "addi $$ and Iw $$ correctly
