Software:
1. Design an assembler:
It is difficult and error-prone to manually write machine code. The problem can be addressed by writing an assembler, which can automatically generate a machine code from an assembly file. In this project, you should write an assembler for your ISA. The assembler reads a program written in an assembly language, then translates it into binary code and generates output file containing machine code. The generated output files can be used by other groups who will be working with the simulator and the actual hardware.
Language:
You can use any high level language. If you are using Java you might save your time by using Java based Assembler framework developed by UCSD groups.
ISA:
You should focus on MIPS ISA while developing assembler. However, you might limit the number of instructions that the assembler can translate into machine code to only those that we covered in our theory class in ISA topic.(eg: ADD, SUB, ADDI, LW, SW, SLR, SLL, BEQ, BNE, OR, AND, NOR)
2. Design a simulator:
In this project you try to make a simple simulator that can
1) easily verify your ISA without actually implementing hardware,
2) debug your application without having actual hardware, and
Your simulator operates instruction by instruction; you must be able to execute instructions one by one and watch all the programmer visible states (eg. register, memory, ...) at a certain time when the execution of an instruction is completed. You may consider building basic elements described in the datapath and control topic and simulating them during the execution of the instructions. Again you can use any language and limit the number instructions it is able to simulate.
Hardware:
1. Design a CPU:
Design the a datapath and control (any of those we learned in the class) using logisim. The design must be able to complete all the cycles for execution of a instruction. An example is provided.
Marks Distribution:
1. Design: 60%
2. Viva: 20%
3. Report: 20%