diff --git a/CPU9bits_tb_behav.wcfg b/CPU9bits_tb_behav.wcfg
index 56a2585..cc3ec3b 100644
--- a/CPU9bits_tb_behav.wcfg
+++ b/CPU9bits_tb_behav.wcfg
@@ -11,15 +11,15 @@
-
-
-
+
+
+
-
+
-
+
Program Counter
label
@@ -49,7 +49,6 @@
Fetch Unit
label
-
op_idx
op_idx
@@ -248,6 +247,253 @@
SIGNEDDECRADIX
+
+ ALU
+ label
+
+ opcode[3:0]
+ opcode[3:0]
+
+
+ operand0[8:0]
+ operand0[8:0]
+ SIGNEDDECRADIX
+
+
+ operand1[8:0]
+ operand1[8:0]
+ SIGNEDDECRADIX
+
+
+ result[8:0]
+ result[8:0]
+ SIGNEDDECRADIX
+
+
+ result_A[8:0]
+ result_A[8:0]
+ SIGNEDDECRADIX
+
+
+ result_B[8:0]
+ result_B[8:0]
+ SIGNEDDECRADIX
+
+
+ result_C[8:0]
+ result_C[8:0]
+ SIGNEDDECRADIX
+
+
+ result_D[8:0]
+ result_D[8:0]
+ SIGNEDDECRADIX
+
+
+ result_E[8:0]
+ result_E[8:0]
+ SIGNEDDECRADIX
+
+
+ result_F[8:0]
+ result_F[8:0]
+ SIGNEDDECRADIX
+
+
+ result_G[8:0]
+ result_G[8:0]
+ SIGNEDDECRADIX
+
+
+ result_H[8:0]
+ result_H[8:0]
+ SIGNEDDECRADIX
+
+
+ result_I[8:0]
+ result_I[8:0]
+ SIGNEDDECRADIX
+
+
+ result_J[8:0]
+ result_J[8:0]
+ SIGNEDDECRADIX
+
+
+ result_K[8:0]
+ result_K[8:0]
+ SIGNEDDECRADIX
+
+
+ result_L[8:0]
+ result_L[8:0]
+ SIGNEDDECRADIX
+
+
+ result_M[8:0]
+ result_M[8:0]
+ SIGNEDDECRADIX
+
+
+ result_N[8:0]
+ result_N[8:0]
+ SIGNEDDECRADIX
+
+
+ result_O[8:0]
+ result_O[8:0]
+ SIGNEDDECRADIX
+
+
+ result_P[8:0]
+ result_P[8:0]
+ SIGNEDDECRADIX
+
+
+ cout
+ cout
+
+
+
+ EM Module
+ label
+
+ reset
+ reset
+
+
+ clk
+ clk
+
+
+ PipIn[50:0]
+ PipIn[50:0]
+
+
+ PipOut[61:0]
+ PipOut[61:0]
+
+
+ instr[8:0]
+ instr[8:0]
+
+
+ op1[8:0]
+ op1[8:0]
+
+
+ op0[8:0]
+ op0[8:0]
+
+
+ FUAddr[8:0]
+ FUAddr[8:0]
+
+
+ FUJB[8:0]
+ FUJB[8:0]
+
+
+ PCout[8:0]
+ PCout[8:0]
+
+
+ JBRes[8:0]
+ JBRes[8:0]
+
+
+ FUJ[8:0]
+ FUJ[8:0]
+
+
+ FUB[8:0]
+ FUB[8:0]
+
+
+ AddiOut[8:0]
+ AddiOut[8:0]
+
+
+ AluOut[8:0]
+ AluOut[8:0]
+
+
+ RFIn[8:0]
+ RFIn[8:0]
+
+
+ dataMemOut[8:0]
+ dataMemOut[8:0]
+
+
+ SE1N[8:0]
+ SE1N[8:0]
+
+
+ SE2N[8:0]
+ SE2N[8:0]
+
+
+ SE3N[8:0]
+ SE3N[8:0]
+
+
+ bankOP[8:0]
+ bankOP[8:0]
+
+
+ jumpNeg[8:0]
+ jumpNeg[8:0]
+
+
+ aluOp[3:0]
+ aluOp[3:0]
+
+
+ FU[2:0]
+ FU[2:0]
+
+
+ bankS[1:0]
+ bankS[1:0]
+
+
+ addiS
+ addiS
+
+
+ RegEn
+ RegEn
+
+
+ loadS
+ loadS
+
+
+ fetchBranch
+ fetchBranch
+
+
+ cout0
+ cout0
+
+
+ cout1
+ cout1
+
+
+ link
+ link
+
+
+ js
+ js
+
+
+ dataMemEn
+ dataMemEn
+
+
Divider
label
@@ -447,4 +693,29 @@
SIGNEDDECRADIX
+
+ Pipe 2
+ label
+
+ clk
+ clk
+
+
+ reset
+ reset
+
+
+ En
+ En
+
+
+ Din[61:0]
+ Din[61:0]
+
+
+ Dout[61:0]
+ Dout[61:0]
+
+
+
diff --git a/lab2CA.srcs/sources_1/new/dataMemory.v b/lab2CA.srcs/sources_1/new/dataMemory.v
index c69b4e8..0e0b528 100644
--- a/lab2CA.srcs/sources_1/new/dataMemory.v
+++ b/lab2CA.srcs/sources_1/new/dataMemory.v
@@ -6,14 +6,14 @@ module dataMemory(
output reg [8:0] readData
);
- reg [8:0] memory [1:0]; // Maximum of 512 memory locations
+ reg [8:0] memory [100:0]; // Maximum of 512 memory locations
// Vivado will give warnings of unconnected ports on the "address" bus if they are unused
initial begin
- //Equation Solver Memory
+ // Equation Solver Memory
memory[0] <= 9'b000000001;
memory[1] <= 9'b000000010;
@@ -97,107 +97,107 @@ module dataMemory(
// Program 1 Test Data
- memory[0] <= 9'd100;
- memory[1] <= 9'd58;
- memory[2] <= 9'd6;
- memory[3] <= 9'd12;
- memory[4] <= 9'b110110000; // -80
- memory[5] <= 9'd17;
- memory[6] <= 9'b111011011; // -37
- memory[7] <= 9'd25;
- memory[8] <= -9'd83; // -83
- memory[9] <= -9'd98; // -98
- memory[10] <= -9'd98; // -98
- memory[11] <= -9'd74; // -74
- memory[12] <= 9'd70;
- memory[13] <= -9'd38; // -38
- memory[14] <= 9'd52;
- memory[15] <= -9'd96; // -96
- memory[16] <= -9'd32; // -32
- memory[17] <= -9'd93; // -93
- memory[18] <= -9'd40; // -40
- memory[19] <= 9'd59;
- memory[20] <= 9'd10;
- memory[21] <= 9'd81;
- memory[22] <= -9'd23; // -28
- memory[23] <=- 9'd99; // -99
- memory[24] <= -9'd41; // -41
- memory[25] <= 9'd33;
- memory[26] <= 9'd98;
- memory[27] <= 9'd73;
- memory[28] <= -9'd1; // -1
- memory[29] <= 9'd28;
- memory[30] <= 9'd5;
- memory[31] <= -9'd74; // -74
- memory[32] <= -9'd41; // -41
- memory[33] <= 9'd41;
- memory[34] <= 9'd39;
- memory[35] <= 9'd62;
- memory[36] <= 9'd19;
- memory[37] <= -9'd40; // -40
- memory[38] <= -9'd8; // -8
- memory[39] <= 9'd92;
- memory[40] <= 9'd37;
- memory[41] <= 9'd50;
- memory[42] <= -9'd72; // -72
- memory[43] <= -9'd5; // -5
- memory[44] <= 9'd19;
- memory[45] <= 9'd58;
- memory[46] <= -9'd13; // -13
- memory[47] <= 9'd0;
- memory[48] <= -9'd97; // -97
- memory[49] <= 9'd54;
- memory[50] <= -9'd17; // -17
- memory[51] <= -9'd83; // -83
- memory[52] <= 9'd53;
- memory[53] <= 9'd82;
- memory[54] <= -9'd94; // -94
- memory[55] <= -9'd77; // -77
- memory[56] <= -9'd74; // -74
- memory[57] <= -9'd52; // -52
- memory[58] <= 9'd85;
- memory[59] <= -9'd65; // -65
- memory[60] <= -9'd10; // -10
- memory[61] <= -9'd45; // -45
- memory[62] <= -9'd92; // -92
- memory[63] <= -9'd30; // -30
- memory[64] <= 9'd18;
- memory[65] <= -9'd95; // -95
- memory[66] <= -9'd27; // -27
- memory[67] <= -9'd74; // -74
- memory[68] <= 9'd62;
- memory[69] <= 9'd64;
- memory[70] <= -9'd9; // -9
- memory[71] <= 9'd66;
- memory[72] <= -9'd71; // -71
- memory[73] <= -9'd31; // -31
- memory[74] <= 9'd34;
- memory[75] <= 9'd12;
- memory[76] <= 9'd3;
- memory[77] <= 9'd82;
- memory[78] <= 9'd13;
- memory[79] <= -9'd78; // -78
- memory[80] <= -9'd8; // -8
- memory[81] <= 9'd88;
- memory[82] <= 9'd42;
- memory[83] <= 9'd42;
- memory[84] <= 9'd21;
- memory[85] <= -9'd44; // -44
- memory[86] <= 9'd30;
- memory[87] <= -9'd93; // -93
- memory[88] <= 9'd2;
- memory[89] <= -9'd34; // -34
- memory[90] <= 9'd92;
- memory[91] <= -9'd45; // -45
- memory[92] <= 9'd26;
- memory[93] <= -9'd79; // -79
- memory[94] <= 9'd43;
- memory[95] <= -9'd25; // -25
- memory[96] <= -9'd24; // -24
- memory[97] <= -9'd25; // -25
- memory[98] <= -9'd19; // -19
- memory[99] <= -9'd49; // -49
- memory[100] <= -9'd8; // -8
+// memory[0] <= 9'd100;
+// memory[1] <= 9'd58;
+// memory[2] <= 9'd6;
+// memory[3] <= 9'd12;
+// memory[4] <= 9'b110110000; // -80
+// memory[5] <= 9'd17;
+// memory[6] <= 9'b111011011; // -37
+// memory[7] <= 9'd25;
+// memory[8] <= -9'd83; // -83
+// memory[9] <= -9'd98; // -98
+// memory[10] <= -9'd98; // -98
+// memory[11] <= -9'd74; // -74
+// memory[12] <= 9'd70;
+// memory[13] <= -9'd38; // -38
+// memory[14] <= 9'd52;
+// memory[15] <= -9'd96; // -96
+// memory[16] <= -9'd32; // -32
+// memory[17] <= -9'd93; // -93
+// memory[18] <= -9'd40; // -40
+// memory[19] <= 9'd59;
+// memory[20] <= 9'd10;
+// memory[21] <= 9'd81;
+// memory[22] <= -9'd23; // -28
+// memory[23] <=- 9'd99; // -99
+// memory[24] <= -9'd41; // -41
+// memory[25] <= 9'd33;
+// memory[26] <= 9'd98;
+// memory[27] <= 9'd73;
+// memory[28] <= -9'd1; // -1
+// memory[29] <= 9'd28;
+// memory[30] <= 9'd5;
+// memory[31] <= -9'd74; // -74
+// memory[32] <= -9'd41; // -41
+// memory[33] <= 9'd41;
+// memory[34] <= 9'd39;
+// memory[35] <= 9'd62;
+// memory[36] <= 9'd19;
+// memory[37] <= -9'd40; // -40
+// memory[38] <= -9'd8; // -8
+// memory[39] <= 9'd92;
+// memory[40] <= 9'd37;
+// memory[41] <= 9'd50;
+// memory[42] <= -9'd72; // -72
+// memory[43] <= -9'd5; // -5
+// memory[44] <= 9'd19;
+// memory[45] <= 9'd58;
+// memory[46] <= -9'd13; // -13
+// memory[47] <= 9'd0;
+// memory[48] <= -9'd97; // -97
+// memory[49] <= 9'd54;
+// memory[50] <= -9'd17; // -17
+// memory[51] <= -9'd83; // -83
+// memory[52] <= 9'd53;
+// memory[53] <= 9'd82;
+// memory[54] <= -9'd94; // -94
+// memory[55] <= -9'd77; // -77
+// memory[56] <= -9'd74; // -74
+// memory[57] <= -9'd52; // -52
+// memory[58] <= 9'd85;
+// memory[59] <= -9'd65; // -65
+// memory[60] <= -9'd10; // -10
+// memory[61] <= -9'd45; // -45
+// memory[62] <= -9'd92; // -92
+// memory[63] <= -9'd30; // -30
+// memory[64] <= 9'd18;
+// memory[65] <= -9'd95; // -95
+// memory[66] <= -9'd27; // -27
+// memory[67] <= -9'd74; // -74
+// memory[68] <= 9'd62;
+// memory[69] <= 9'd64;
+// memory[70] <= -9'd9; // -9
+// memory[71] <= 9'd66;
+// memory[72] <= -9'd71; // -71
+// memory[73] <= -9'd31; // -31
+// memory[74] <= 9'd34;
+// memory[75] <= 9'd12;
+// memory[76] <= 9'd3;
+// memory[77] <= 9'd82;
+// memory[78] <= 9'd13;
+// memory[79] <= -9'd78; // -78
+// memory[80] <= -9'd8; // -8
+// memory[81] <= 9'd88;
+// memory[82] <= 9'd42;
+// memory[83] <= 9'd42;
+// memory[84] <= 9'd21;
+// memory[85] <= -9'd44; // -44
+// memory[86] <= 9'd30;
+// memory[87] <= -9'd93; // -93
+// memory[88] <= 9'd2;
+// memory[89] <= -9'd34; // -34
+// memory[90] <= 9'd92;
+// memory[91] <= -9'd45; // -45
+// memory[92] <= 9'd26;
+// memory[93] <= -9'd79; // -79
+// memory[94] <= 9'd43;
+// memory[95] <= -9'd25; // -25
+// memory[96] <= -9'd24; // -24
+// memory[97] <= -9'd25; // -25
+// memory[98] <= -9'd19; // -19
+// memory[99] <= -9'd49; // -49
+// memory[100] <= -9'd8; // -8
diff --git a/lab2CA.srcs/sources_1/new/instructionMemory.v b/lab2CA.srcs/sources_1/new/instructionMemory.v
index e9f16a1..9d64986 100644
--- a/lab2CA.srcs/sources_1/new/instructionMemory.v
+++ b/lab2CA.srcs/sources_1/new/instructionMemory.v
@@ -5,7 +5,7 @@ module instructionMemory(
output reg [8:0] readData
);
- reg [8:0] memory [8:0]; // Maximum of 512 memory locations
+ reg [8:0] memory [100:0]; // Maximum of 512 memory locations
// Vivado will give warnings of unconnected ports on the "address" bus if they are unused
initial begin
@@ -20,7 +20,7 @@ module instructionMemory(
memory[7] <= 9'b111100000; //shift left
memory[8] <= 9'b111100000; //shift left
-// //Testing all instructions
+ //Testing all instructions
// memory[6] <= 9'b010100011; //sub
// memory[7] <= 9'b011001011; //addi
// memory[8] <= 9'b011110000; //slt
@@ -209,8 +209,80 @@ module instructionMemory(
// memory[60] <= 9'b101000110; //banks R0, 3
// memory[61] <= 9'b100100000; //j Win
// memory[62] <= 9'b000000000; //Win: halt
-
-
+
+
+ // Basic Instruction Testing
+
+// memory[0] <= 9'b000000001; // nop
+// memory[1] <= 9'b010000000; // zero $a
+// memory[2] <= 9'b000000001; // nop
+// memory[3] <= 9'b000000001; // nop
+// memory[4] <= 9'b000100000; // lb $a, $a
+// memory[5] <= 9'b000000001; // nop
+// memory[6] <= 9'b000000001; // nop
+// memory[7] <= 9'b011000011; // addi $a, 3
+// memory[8] <= 9'b000000001; // nop
+// memory[9] <= 9'b000000001; // nop
+// memory[10] <= 9'b000101010; // lb $b, $b
+// memory[11] <= 9'b000110100; // lb $c, $c
+// memory[12] <= 9'b000111110; // lb $d, $d
+// memory[13] <= 9'b000000001; // nop
+// memory[14] <= 9'b000000001; // nop
+// memory[15] <= 9'b011001011; // addi $b, 3
+// memory[16] <= 9'b011010011; // addi $c, 3
+// memory[17] <= 9'b000000001; // nop
+// memory[18] <= 9'b011011011; // addi $d, 3
+// memory[19] <= 9'b; //
+// memory[20] <= 9'b011000100; // addi $a, -4
+// memory[21] <= 9'b000000001; // nop
+// memory[22] <= 9'b000000001; // nop
+// memory[23] <= 9'b010110110; // add $c, $d
+// memory[24] <= 9'b010101001; // sub $b, $a
+// memory[25] <= 9'b000000001; // nop
+// memory[26] <= 9'b000000001; // nop
+// memory[27] <= 9'b; //
+// memory[28] <= 9'b; //
+// memory[29] <= 9'b; //
+// memory[30] <= 9'b; //
+// memory[31] <= 9'b; //
+// memory[32] <= 9'b; //
+// memory[33] <= 9'b; //
+// memory[34] <= 9'b; //
+// memory[35] <= 9'b; //
+// memory[36] <= 9'b; //
+// memory[37] <= 9'b; //
+// memory[38] <= 9'b; //
+// memory[39] <= 9'b; //
+// memory[40] <= 9'b; //
+// memory[41] <= 9'b; //
+// memory[42] <= 9'b; //
+// memory[43] <= 9'b; //
+// memory[44] <= 9'b; //
+// memory[45] <= 9'b; //
+// memory[46] <= 9'b; //
+// memory[47] <= 9'b; //
+// memory[48] <= 9'b; //
+// memory[49] <= 9'b; //
+// memory[50] <= 9'b; //
+// memory[51] <= 9'b; //
+// memory[52] <= 9'b; //
+// memory[53] <= 9'b; //
+// memory[54] <= 9'b; //
+// memory[55] <= 9'b; //
+// memory[56] <= 9'b; //
+// memory[57] <= 9'b; //
+// memory[58] <= 9'b; //
+// memory[59] <= 9'b; //
+// memory[60] <= 9'b; //
+// memory[61] <= 9'b; //
+// memory[62] <= 9'b; //
+
+
+
+
+
+
+
end
always @ (address)
diff --git a/lab2CA.xpr b/lab2CA.xpr
index f36c02f..886719c 100644
--- a/lab2CA.xpr
+++ b/lab2CA.xpr
@@ -31,7 +31,7 @@
-
+