From fedfcaaadadfec42acf78c3f46ae9e27cc619a53 Mon Sep 17 00:00:00 2001 From: Benjamin Ramhorst <59868635+bo3z@users.noreply.github.com> Date: Thu, 28 May 2020 14:42:02 -0700 Subject: [PATCH] Added most of the code for generating the instruction MIF. Still need to do a big if-else statement for every instruction. --- InstructionGenerator.cpp | 124 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 InstructionGenerator.cpp diff --git a/InstructionGenerator.cpp b/InstructionGenerator.cpp new file mode 100644 index 0000000..6724f5f --- /dev/null +++ b/InstructionGenerator.cpp @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include + +using namespace std; + +#define pb push_back + +#define endl "\n" +#define IOS ios_base::sync_with_stdio(false); cin.tie(NULL); + +const unsigned int RAM_SIZE = 2048; +const unsigned int INSTRUCTION_LENGTH = 16; + +vector getWords(string line){ + vector ans; + istringstream stream(line); + while (stream){ + string temp; + stream >> temp; + ans.pb(temp); + } + return ans; +} + +string convertBinaryToHex(string binary4){ + if(binary4=="0000"){ + return "0"; + }else if(binary4=="0001"){ + return "1"; + }else if(binary4=="0010"){ + return "2"; + }else if(binary4=="0011"){ + return "3"; + }else if(binary4=="0100"){ + return "4"; + }else if(binary4=="0101"){ + return "5"; + }else if(binary4=="0110"){ + return "6"; + }else if(binary4=="0111"){ + return "7"; + }else if(binary4=="1000"){ + return "8"; + }else if(binary4=="1001"){ + return "9"; + }else if(binary4=="1010"){ + return "A"; + }else if(binary4=="1011"){ + return "B"; + }else if(binary4=="1100"){ + return "C"; + }else if(binary4=="1101"){ + return "D"; + }else if(binary4=="1110"){ + return "E"; + }else if(binary4=="1111"){ + return "F"; + }else{ + assert(0); + } +} + +string convertInstructionToHex(string binaryInstruction){ + string ans=""; + string temp=""; + assert(binaryInstruction.size()==16); + for (int i=0; i<16; i++){ + temp+=binaryInstr.at(i); + if(i==3 || i==7 ||i==11 || i==15){ + ans+=convertBinaryToHex(temp); + temp="" + } + } + return ans; +} + +string getInstructionHex(string instruction){ + string binary; + string opcode, rs1, rs2, rd; + + if (opcode=="LDA" || opcode=="STA"){ + binary="1"; + if(opcode=="LDA"){ + + }else if (opcode=="STA"){ + + }else { + assert(0); + } + }else{ + switch (opcode) { + case "": + // Add code + break; + } + } + return ans; +} + +void generateMIF(vector instructions){ + cout << "DEPTH = " << RAM_SIZE << ";" << endl; + cout << "WIDTH = " << INSTRUCTION_LENGTH << ";" << endl; + cout << "ADDRESS_RADIX = DEC;" << endl; + cout << "DATA_RADIX = HEX;" << endl; + cout << "CONTENT" << endl; + cout << "BEGIN" << endl; + cout << "[0..2047]: 0;" << endl; + for (int i = 0; i <= instruction.size(); i++){ + cout << i << " : " << instruction.at(i) << ";" << endl; + } +} + +int main(){ + IOS; + string temp; + vector hexCodes; + while(getline(cin, temp)){ + hexCodes.pb(getInstructionHex(temp)); + } + generateMIF(hexCodes); +}