From 24171412bda45f3c7ad1a5ebb3c30ffeb10aa801 Mon Sep 17 00:00:00 2001 From: Brendan Haines Date: Sun, 27 Sep 2020 18:38:35 -0600 Subject: [PATCH] successfully using assembler to generate .hex rather than writing straight machine code --- hdl/tb/core_tb.v | 99 ++-- sim/core_tb.wcfg | 1297 +++++++++++++++++++++++++++++++++++++++++++++- test/Makefile | 5 +- test/test.S | 28 + 4 files changed, 1380 insertions(+), 49 deletions(-) diff --git a/hdl/tb/core_tb.v b/hdl/tb/core_tb.v index da2bfed..a31f1f1 100644 --- a/hdl/tb/core_tb.v +++ b/hdl/tb/core_tb.v @@ -39,55 +39,60 @@ initial begin mem_inst[i] = INST_NOP; end - // Initialize all registers - mem_inst[0] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd1, OP_ALU}; // add x1, x0, x0 - mem_inst[1] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd2, OP_ALU}; // add x2, x0, x0 - mem_inst[2] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd3, OP_ALU}; // add x3, x0, x0 - mem_inst[3] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd4, OP_ALU}; // add x4, x0, x0 - mem_inst[4] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd5, OP_ALU}; // add x5, x0, x0 - mem_inst[5] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd6, OP_ALU}; // add x6, x0, x0 - mem_inst[6] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd7, OP_ALU}; // add x7, x0, x0 - mem_inst[7] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd8, OP_ALU}; // add x8, x0, x0 - mem_inst[8] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd9, OP_ALU}; // add x9, x0, x0 - mem_inst[9] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd10, OP_ALU}; // add x10, x0, x0 - mem_inst[10] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd11, OP_ALU}; // add x11, x0, x0 - mem_inst[11] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd12, OP_ALU}; // add x12, x0, x0 - mem_inst[12] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd13, OP_ALU}; // add x13, x0, x0 - mem_inst[13] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd14, OP_ALU}; // add x14, x0, x0 - mem_inst[14] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd15, OP_ALU}; // add x15, x0, x0 - mem_inst[15] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd16, OP_ALU}; // add x16, x0, x0 - mem_inst[16] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd17, OP_ALU}; // add x17, x0, x0 - mem_inst[17] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd18, OP_ALU}; // add x18, x0, x0 - mem_inst[18] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd19, OP_ALU}; // add x19, x0, x0 - mem_inst[19] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd20, OP_ALU}; // add x20, x0, x0 - mem_inst[20] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd21, OP_ALU}; // add x21, x0, x0 - mem_inst[21] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd22, OP_ALU}; // add x22, x0, x0 - mem_inst[22] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd23, OP_ALU}; // add x23, x0, x0 - mem_inst[23] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd24, OP_ALU}; // add x24, x0, x0 - mem_inst[24] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd25, OP_ALU}; // add x25, x0, x0 - mem_inst[25] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd26, OP_ALU}; // add x26, x0, x0 - mem_inst[26] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd27, OP_ALU}; // add x27, x0, x0 - mem_inst[27] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd28, OP_ALU}; // add x28, x0, x0 - mem_inst[28] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd29, OP_ALU}; // add x29, x0, x0 - mem_inst[29] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd30, OP_ALU}; // add x30, x0, x0 - mem_inst[30] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd31, OP_ALU}; // add x31, x0, x0 + $readmemh("../test/test.hex", mem_inst); - mem_inst[36] = {12'd1, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x2, x0, 1 - mem_inst[42] = {7'b0000000, 5'd2, 5'd1, 3'b000, 5'd3, OP_ALU}; // add x3, x1, x2 - mem_inst[48] = {7'b0000000, 5'd2, 5'd3, 3'b000, 5'd3, OP_ALU}; // add x3, x3, x2 - mem_inst[54] = {7'b0000000, 5'd3, 5'd3, 3'b000, 5'd3, OP_ALU}; // add x3, x3, x3 - mem_inst[60] = {12'h123, 5'd0, 3'b000, 5'd4, OP_IMM}; // addi x4, x0, 0x123 - mem_inst[66] = {12'h000, 5'd4, 3'b000, 5'd5, OP_IMM}; // addi x5, x4, 0 - mem_inst[72] = {12'hfff, 5'd5, 3'b000, 5'd5, OP_IMM}; // addi x5, x5, -1 - mem_inst[78] = {20'hedcba, 5'd7, OP_LUI}; // lui x7, 0xedcba - mem_inst[84] = {12'h987, 5'd7, 3'b000, 5'd7, OP_IMM}; // addi x7, x7, 0x987 - mem_inst[90] = {20'h00032, 5'd8, OP_AUIPC}; // auipc x8, 0x32 // 90*4 + 0x32000 = 0x32168 - // mem_inst[96] = {12'd288, 5'd0, 3'b000, 5'd9, OP_JALR}; // jalr x9, x0, 72*4 // unconditional jump to index 72 = 288/4 - mem_inst[102] = {1'b0, 10'd12, 1'b0, 8'b0, 5'd9, OP_JAL}; // jal x10, +12 // unconditional jump to index +12 = 24*2/4 - mem_inst[108] = {12'd4, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x11, x0, 4 // this should be skipped - mem_inst[114] = {12'd5, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x12, x0, 5 - mem_inst[120] = {12'd5, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x12, x12, 6 +// // Initialize all registers +// mem_inst[0] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd1, OP_ALU}; // add x1, x0, x0 +// mem_inst[1] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd2, OP_ALU}; // add x2, x0, x0 +// mem_inst[2] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd3, OP_ALU}; // add x3, x0, x0 +// mem_inst[3] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd4, OP_ALU}; // add x4, x0, x0 +// mem_inst[4] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd5, OP_ALU}; // add x5, x0, x0 +// mem_inst[5] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd6, OP_ALU}; // add x6, x0, x0 +// mem_inst[6] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd7, OP_ALU}; // add x7, x0, x0 +// mem_inst[7] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd8, OP_ALU}; // add x8, x0, x0 +// mem_inst[8] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd9, OP_ALU}; // add x9, x0, x0 +// mem_inst[9] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd10, OP_ALU}; // add x10, x0, x0 +// mem_inst[10] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd11, OP_ALU}; // add x11, x0, x0 +// mem_inst[11] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd12, OP_ALU}; // add x12, x0, x0 +// mem_inst[12] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd13, OP_ALU}; // add x13, x0, x0 +// mem_inst[13] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd14, OP_ALU}; // add x14, x0, x0 +// mem_inst[14] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd15, OP_ALU}; // add x15, x0, x0 +// mem_inst[15] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd16, OP_ALU}; // add x16, x0, x0 +// mem_inst[16] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd17, OP_ALU}; // add x17, x0, x0 +// mem_inst[17] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd18, OP_ALU}; // add x18, x0, x0 +// mem_inst[18] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd19, OP_ALU}; // add x19, x0, x0 +// mem_inst[19] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd20, OP_ALU}; // add x20, x0, x0 +// mem_inst[20] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd21, OP_ALU}; // add x21, x0, x0 +// mem_inst[21] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd22, OP_ALU}; // add x22, x0, x0 +// mem_inst[22] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd23, OP_ALU}; // add x23, x0, x0 +// mem_inst[23] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd24, OP_ALU}; // add x24, x0, x0 +// mem_inst[24] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd25, OP_ALU}; // add x25, x0, x0 +// mem_inst[25] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd26, OP_ALU}; // add x26, x0, x0 +// mem_inst[26] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd27, OP_ALU}; // add x27, x0, x0 +// mem_inst[27] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd28, OP_ALU}; // add x28, x0, x0 +// mem_inst[28] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd29, OP_ALU}; // add x29, x0, x0 +// mem_inst[29] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd30, OP_ALU}; // add x30, x0, x0 +// mem_inst[30] = {7'b0000000, 5'd0, 5'd0, 3'b000, 5'd31, OP_ALU}; // add x31, x0, x0 +// mem_inst[36] = {12'd1, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x2, x0, 1 +// mem_inst[42] = {7'b0000000, 5'd2, 5'd1, 3'b000, 5'd3, OP_ALU}; // add x3, x1, x2 +// mem_inst[48] = {7'b0000000, 5'd2, 5'd3, 3'b000, 5'd3, OP_ALU}; // add x3, x3, x2 +// mem_inst[54] = {7'b0000000, 5'd3, 5'd3, 3'b000, 5'd3, OP_ALU}; // add x3, x3, x3 +// mem_inst[60] = {12'h123, 5'd0, 3'b000, 5'd4, OP_IMM}; // addi x4, x0, 0x123 +// mem_inst[66] = {12'h000, 5'd4, 3'b000, 5'd5, OP_IMM}; // addi x5, x4, 0 +// mem_inst[72] = {12'hfff, 5'd5, 3'b000, 5'd5, OP_IMM}; // addi x5, x5, -1 +// mem_inst[78] = {20'hedcba, 5'd7, OP_LUI}; // lui x7, 0xedcba +// mem_inst[84] = {12'h987, 5'd7, 3'b000, 5'd7, OP_IMM}; // addi x7, x7, 0x987 +// mem_inst[90] = {20'h00032, 5'd8, OP_AUIPC}; // auipc x8, 0x32 // 90*4 + 0x32000 = 0x32168 +// // mem_inst[96] = {12'd288, 5'd0, 3'b000, 5'd9, OP_JALR}; // jalr x9, x0, 72*4 // unconditional jump to index 72 = 288/4 +// mem_inst[102] = {1'b0, 10'd12, 1'b0, 8'b0, 5'd9, OP_JAL}; // jal x10, +12 // unconditional jump to index +12 = 24*2/4 +// mem_inst[108] = {12'd4, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x11, x0, 4 // this should be skipped +// mem_inst[114] = {12'd5, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x12, x0, 5 +// mem_inst[120] = {12'd5, 5'd0, 3'b000, 5'd2, OP_IMM}; // addi x12, x12, 6 + +end + +initial begin end always @(*) begin diff --git a/sim/core_tb.wcfg b/sim/core_tb.wcfg index 8c7a5b5..fb35126 100644 --- a/sim/core_tb.wcfg +++ b/sim/core_tb.wcfg @@ -10,7 +10,7 @@ - + clk clk @@ -19,6 +19,1291 @@ reset reset + + mem_inst[0:255,31:0] + mem_inst[0:255,31:0] + HEXRADIX + + [0,31:0] + mem_inst[0,31:0] + HEXRADIX + + + [1,31:0] + mem_inst[1,31:0] + HEXRADIX + + + [2,31:0] + mem_inst[2,31:0] + HEXRADIX + + + [3,31:0] + mem_inst[3,31:0] + HEXRADIX + + + [4,31:0] + mem_inst[4,31:0] + HEXRADIX + + + [5,31:0] + mem_inst[5,31:0] + HEXRADIX + + + [6,31:0] + mem_inst[6,31:0] + HEXRADIX + + + [7,31:0] + mem_inst[7,31:0] + HEXRADIX + + + [8,31:0] + mem_inst[8,31:0] + HEXRADIX + + + [9,31:0] + mem_inst[9,31:0] + HEXRADIX + + + [10,31:0] + mem_inst[10,31:0] + HEXRADIX + + + [11,31:0] + mem_inst[11,31:0] + HEXRADIX + + + [12,31:0] + mem_inst[12,31:0] + HEXRADIX + + + [13,31:0] + mem_inst[13,31:0] + HEXRADIX + + + [14,31:0] + mem_inst[14,31:0] + HEXRADIX + + + [15,31:0] + mem_inst[15,31:0] + HEXRADIX + + + [16,31:0] + mem_inst[16,31:0] + HEXRADIX + + + [17,31:0] + mem_inst[17,31:0] + HEXRADIX + + + [18,31:0] + mem_inst[18,31:0] + HEXRADIX + + + [19,31:0] + mem_inst[19,31:0] + HEXRADIX + + + [20,31:0] + mem_inst[20,31:0] + HEXRADIX + + + [21,31:0] + mem_inst[21,31:0] + HEXRADIX + + + [22,31:0] + mem_inst[22,31:0] + HEXRADIX + + + [23,31:0] + mem_inst[23,31:0] + HEXRADIX + + + [24,31:0] + mem_inst[24,31:0] + HEXRADIX + + + [25,31:0] + mem_inst[25,31:0] + HEXRADIX + + + [26,31:0] + mem_inst[26,31:0] + HEXRADIX + + + [27,31:0] + mem_inst[27,31:0] + HEXRADIX + + + [28,31:0] + mem_inst[28,31:0] + HEXRADIX + + + [29,31:0] + mem_inst[29,31:0] + HEXRADIX + + + [30,31:0] + mem_inst[30,31:0] + HEXRADIX + + + [31,31:0] + mem_inst[31,31:0] + HEXRADIX + + + [32,31:0] + mem_inst[32,31:0] + HEXRADIX + + + [33,31:0] + mem_inst[33,31:0] + HEXRADIX + + + [34,31:0] + mem_inst[34,31:0] + HEXRADIX + + + [35,31:0] + mem_inst[35,31:0] + HEXRADIX + + + [36,31:0] + mem_inst[36,31:0] + HEXRADIX + + + [37,31:0] + mem_inst[37,31:0] + HEXRADIX + + + [38,31:0] + mem_inst[38,31:0] + HEXRADIX + + + [39,31:0] + mem_inst[39,31:0] + HEXRADIX + + + [40,31:0] + mem_inst[40,31:0] + HEXRADIX + + + [41,31:0] + mem_inst[41,31:0] + HEXRADIX + + + [42,31:0] + mem_inst[42,31:0] + HEXRADIX + + + [43,31:0] + mem_inst[43,31:0] + HEXRADIX + + + [44,31:0] + mem_inst[44,31:0] + HEXRADIX + + + [45,31:0] + mem_inst[45,31:0] + HEXRADIX + + + [46,31:0] + mem_inst[46,31:0] + HEXRADIX + + + [47,31:0] + mem_inst[47,31:0] + HEXRADIX + + + [48,31:0] + mem_inst[48,31:0] + HEXRADIX + + + [49,31:0] + mem_inst[49,31:0] + HEXRADIX + + + [50,31:0] + mem_inst[50,31:0] + HEXRADIX + + + [51,31:0] + mem_inst[51,31:0] + HEXRADIX + + + [52,31:0] + mem_inst[52,31:0] + HEXRADIX + + + [53,31:0] + mem_inst[53,31:0] + HEXRADIX + + + [54,31:0] + mem_inst[54,31:0] + HEXRADIX + + + [55,31:0] + mem_inst[55,31:0] + HEXRADIX + + + [56,31:0] + mem_inst[56,31:0] + HEXRADIX + + + [57,31:0] + mem_inst[57,31:0] + HEXRADIX + + + [58,31:0] + mem_inst[58,31:0] + HEXRADIX + + + [59,31:0] + mem_inst[59,31:0] + HEXRADIX + + + [60,31:0] + mem_inst[60,31:0] + HEXRADIX + + + [61,31:0] + mem_inst[61,31:0] + HEXRADIX + + + [62,31:0] + mem_inst[62,31:0] + HEXRADIX + + + [63,31:0] + mem_inst[63,31:0] + HEXRADIX + + + [64,31:0] + mem_inst[64,31:0] + HEXRADIX + + + [65,31:0] + mem_inst[65,31:0] + HEXRADIX + + + [66,31:0] + mem_inst[66,31:0] + HEXRADIX + + + [67,31:0] + mem_inst[67,31:0] + HEXRADIX + + + [68,31:0] + mem_inst[68,31:0] + HEXRADIX + + + [69,31:0] + mem_inst[69,31:0] + HEXRADIX + + + [70,31:0] + mem_inst[70,31:0] + HEXRADIX + + + [71,31:0] + mem_inst[71,31:0] + HEXRADIX + + + [72,31:0] + mem_inst[72,31:0] + HEXRADIX + + + [73,31:0] + mem_inst[73,31:0] + HEXRADIX + + + [74,31:0] + mem_inst[74,31:0] + HEXRADIX + + + [75,31:0] + mem_inst[75,31:0] + HEXRADIX + + + [76,31:0] + mem_inst[76,31:0] + HEXRADIX + + + [77,31:0] + mem_inst[77,31:0] + HEXRADIX + + + [78,31:0] + mem_inst[78,31:0] + HEXRADIX + + + [79,31:0] + mem_inst[79,31:0] + HEXRADIX + + + [80,31:0] + mem_inst[80,31:0] + HEXRADIX + + + [81,31:0] + mem_inst[81,31:0] + HEXRADIX + + + [82,31:0] + mem_inst[82,31:0] + HEXRADIX + + + [83,31:0] + mem_inst[83,31:0] + HEXRADIX + + + [84,31:0] + mem_inst[84,31:0] + HEXRADIX + + + [85,31:0] + mem_inst[85,31:0] + HEXRADIX + + + [86,31:0] + mem_inst[86,31:0] + HEXRADIX + + + [87,31:0] + mem_inst[87,31:0] + HEXRADIX + + + [88,31:0] + mem_inst[88,31:0] + HEXRADIX + + + [89,31:0] + mem_inst[89,31:0] + HEXRADIX + + + [90,31:0] + mem_inst[90,31:0] + HEXRADIX + + + [91,31:0] + mem_inst[91,31:0] + HEXRADIX + + + [92,31:0] + mem_inst[92,31:0] + HEXRADIX + + + [93,31:0] + mem_inst[93,31:0] + HEXRADIX + + + [94,31:0] + mem_inst[94,31:0] + HEXRADIX + + + [95,31:0] + mem_inst[95,31:0] + HEXRADIX + + + [96,31:0] + mem_inst[96,31:0] + HEXRADIX + + + [97,31:0] + mem_inst[97,31:0] + HEXRADIX + + + [98,31:0] + mem_inst[98,31:0] + HEXRADIX + + + [99,31:0] + mem_inst[99,31:0] + HEXRADIX + + + [100,31:0] + mem_inst[100,31:0] + HEXRADIX + + + [101,31:0] + mem_inst[101,31:0] + HEXRADIX + + + [102,31:0] + mem_inst[102,31:0] + HEXRADIX + + + [103,31:0] + mem_inst[103,31:0] + HEXRADIX + + + [104,31:0] + mem_inst[104,31:0] + HEXRADIX + + + [105,31:0] + mem_inst[105,31:0] + HEXRADIX + + + [106,31:0] + mem_inst[106,31:0] + HEXRADIX + + + [107,31:0] + mem_inst[107,31:0] + HEXRADIX + + + [108,31:0] + mem_inst[108,31:0] + HEXRADIX + + + [109,31:0] + mem_inst[109,31:0] + HEXRADIX + + + [110,31:0] + mem_inst[110,31:0] + HEXRADIX + + + [111,31:0] + mem_inst[111,31:0] + HEXRADIX + + + [112,31:0] + mem_inst[112,31:0] + HEXRADIX + + + [113,31:0] + mem_inst[113,31:0] + HEXRADIX + + + [114,31:0] + mem_inst[114,31:0] + HEXRADIX + + + [115,31:0] + mem_inst[115,31:0] + HEXRADIX + + + [116,31:0] + mem_inst[116,31:0] + HEXRADIX + + + [117,31:0] + mem_inst[117,31:0] + HEXRADIX + + + [118,31:0] + mem_inst[118,31:0] + HEXRADIX + + + [119,31:0] + mem_inst[119,31:0] + HEXRADIX + + + [120,31:0] + mem_inst[120,31:0] + HEXRADIX + + + [121,31:0] + mem_inst[121,31:0] + HEXRADIX + + + [122,31:0] + mem_inst[122,31:0] + HEXRADIX + + + [123,31:0] + mem_inst[123,31:0] + HEXRADIX + + + [124,31:0] + mem_inst[124,31:0] + HEXRADIX + + + [125,31:0] + mem_inst[125,31:0] + HEXRADIX + + + [126,31:0] + mem_inst[126,31:0] + HEXRADIX + + + [127,31:0] + mem_inst[127,31:0] + HEXRADIX + + + [128,31:0] + mem_inst[128,31:0] + HEXRADIX + + + [129,31:0] + mem_inst[129,31:0] + HEXRADIX + + + [130,31:0] + mem_inst[130,31:0] + HEXRADIX + + + [131,31:0] + mem_inst[131,31:0] + HEXRADIX + + + [132,31:0] + mem_inst[132,31:0] + HEXRADIX + + + [133,31:0] + mem_inst[133,31:0] + HEXRADIX + + + [134,31:0] + mem_inst[134,31:0] + HEXRADIX + + + [135,31:0] + mem_inst[135,31:0] + HEXRADIX + + + [136,31:0] + mem_inst[136,31:0] + HEXRADIX + + + [137,31:0] + mem_inst[137,31:0] + HEXRADIX + + + [138,31:0] + mem_inst[138,31:0] + HEXRADIX + + + [139,31:0] + mem_inst[139,31:0] + HEXRADIX + + + [140,31:0] + mem_inst[140,31:0] + HEXRADIX + + + [141,31:0] + mem_inst[141,31:0] + HEXRADIX + + + [142,31:0] + mem_inst[142,31:0] + HEXRADIX + + + [143,31:0] + mem_inst[143,31:0] + HEXRADIX + + + [144,31:0] + mem_inst[144,31:0] + HEXRADIX + + + [145,31:0] + mem_inst[145,31:0] + HEXRADIX + + + [146,31:0] + mem_inst[146,31:0] + HEXRADIX + + + [147,31:0] + mem_inst[147,31:0] + HEXRADIX + + + [148,31:0] + mem_inst[148,31:0] + HEXRADIX + + + [149,31:0] + mem_inst[149,31:0] + HEXRADIX + + + [150,31:0] + mem_inst[150,31:0] + HEXRADIX + + + [151,31:0] + mem_inst[151,31:0] + HEXRADIX + + + [152,31:0] + mem_inst[152,31:0] + HEXRADIX + + + [153,31:0] + mem_inst[153,31:0] + HEXRADIX + + + [154,31:0] + mem_inst[154,31:0] + HEXRADIX + + + [155,31:0] + mem_inst[155,31:0] + HEXRADIX + + + [156,31:0] + mem_inst[156,31:0] + HEXRADIX + + + [157,31:0] + mem_inst[157,31:0] + HEXRADIX + + + [158,31:0] + mem_inst[158,31:0] + HEXRADIX + + + [159,31:0] + mem_inst[159,31:0] + HEXRADIX + + + [160,31:0] + mem_inst[160,31:0] + HEXRADIX + + + [161,31:0] + mem_inst[161,31:0] + HEXRADIX + + + [162,31:0] + mem_inst[162,31:0] + HEXRADIX + + + [163,31:0] + mem_inst[163,31:0] + HEXRADIX + + + [164,31:0] + mem_inst[164,31:0] + HEXRADIX + + + [165,31:0] + mem_inst[165,31:0] + HEXRADIX + + + [166,31:0] + mem_inst[166,31:0] + HEXRADIX + + + [167,31:0] + mem_inst[167,31:0] + HEXRADIX + + + [168,31:0] + mem_inst[168,31:0] + HEXRADIX + + + [169,31:0] + mem_inst[169,31:0] + HEXRADIX + + + [170,31:0] + mem_inst[170,31:0] + HEXRADIX + + + [171,31:0] + mem_inst[171,31:0] + HEXRADIX + + + [172,31:0] + mem_inst[172,31:0] + HEXRADIX + + + [173,31:0] + mem_inst[173,31:0] + HEXRADIX + + + [174,31:0] + mem_inst[174,31:0] + HEXRADIX + + + [175,31:0] + mem_inst[175,31:0] + HEXRADIX + + + [176,31:0] + mem_inst[176,31:0] + HEXRADIX + + + [177,31:0] + mem_inst[177,31:0] + HEXRADIX + + + [178,31:0] + mem_inst[178,31:0] + HEXRADIX + + + [179,31:0] + mem_inst[179,31:0] + HEXRADIX + + + [180,31:0] + mem_inst[180,31:0] + HEXRADIX + + + [181,31:0] + mem_inst[181,31:0] + HEXRADIX + + + [182,31:0] + mem_inst[182,31:0] + HEXRADIX + + + [183,31:0] + mem_inst[183,31:0] + HEXRADIX + + + [184,31:0] + mem_inst[184,31:0] + HEXRADIX + + + [185,31:0] + mem_inst[185,31:0] + HEXRADIX + + + [186,31:0] + mem_inst[186,31:0] + HEXRADIX + + + [187,31:0] + mem_inst[187,31:0] + HEXRADIX + + + [188,31:0] + mem_inst[188,31:0] + HEXRADIX + + + [189,31:0] + mem_inst[189,31:0] + HEXRADIX + + + [190,31:0] + mem_inst[190,31:0] + HEXRADIX + + + [191,31:0] + mem_inst[191,31:0] + HEXRADIX + + + [192,31:0] + mem_inst[192,31:0] + HEXRADIX + + + [193,31:0] + mem_inst[193,31:0] + HEXRADIX + + + [194,31:0] + mem_inst[194,31:0] + HEXRADIX + + + [195,31:0] + mem_inst[195,31:0] + HEXRADIX + + + [196,31:0] + mem_inst[196,31:0] + HEXRADIX + + + [197,31:0] + mem_inst[197,31:0] + HEXRADIX + + + [198,31:0] + mem_inst[198,31:0] + HEXRADIX + + + [199,31:0] + mem_inst[199,31:0] + HEXRADIX + + + [200,31:0] + mem_inst[200,31:0] + HEXRADIX + + + [201,31:0] + mem_inst[201,31:0] + HEXRADIX + + + [202,31:0] + mem_inst[202,31:0] + HEXRADIX + + + [203,31:0] + mem_inst[203,31:0] + HEXRADIX + + + [204,31:0] + mem_inst[204,31:0] + HEXRADIX + + + [205,31:0] + mem_inst[205,31:0] + HEXRADIX + + + [206,31:0] + mem_inst[206,31:0] + HEXRADIX + + + [207,31:0] + mem_inst[207,31:0] + HEXRADIX + + + [208,31:0] + mem_inst[208,31:0] + HEXRADIX + + + [209,31:0] + mem_inst[209,31:0] + HEXRADIX + + + [210,31:0] + mem_inst[210,31:0] + HEXRADIX + + + [211,31:0] + mem_inst[211,31:0] + HEXRADIX + + + [212,31:0] + mem_inst[212,31:0] + HEXRADIX + + + [213,31:0] + mem_inst[213,31:0] + HEXRADIX + + + [214,31:0] + mem_inst[214,31:0] + HEXRADIX + + + [215,31:0] + mem_inst[215,31:0] + HEXRADIX + + + [216,31:0] + mem_inst[216,31:0] + HEXRADIX + + + [217,31:0] + mem_inst[217,31:0] + HEXRADIX + + + [218,31:0] + mem_inst[218,31:0] + HEXRADIX + + + [219,31:0] + mem_inst[219,31:0] + HEXRADIX + + + [220,31:0] + mem_inst[220,31:0] + HEXRADIX + + + [221,31:0] + mem_inst[221,31:0] + HEXRADIX + + + [222,31:0] + mem_inst[222,31:0] + HEXRADIX + + + [223,31:0] + mem_inst[223,31:0] + HEXRADIX + + + [224,31:0] + mem_inst[224,31:0] + HEXRADIX + + + [225,31:0] + mem_inst[225,31:0] + HEXRADIX + + + [226,31:0] + mem_inst[226,31:0] + HEXRADIX + + + [227,31:0] + mem_inst[227,31:0] + HEXRADIX + + + [228,31:0] + mem_inst[228,31:0] + HEXRADIX + + + [229,31:0] + mem_inst[229,31:0] + HEXRADIX + + + [230,31:0] + mem_inst[230,31:0] + HEXRADIX + + + [231,31:0] + mem_inst[231,31:0] + HEXRADIX + + + [232,31:0] + mem_inst[232,31:0] + HEXRADIX + + + [233,31:0] + mem_inst[233,31:0] + HEXRADIX + + + [234,31:0] + mem_inst[234,31:0] + HEXRADIX + + + [235,31:0] + mem_inst[235,31:0] + HEXRADIX + + + [236,31:0] + mem_inst[236,31:0] + HEXRADIX + + + [237,31:0] + mem_inst[237,31:0] + HEXRADIX + + + [238,31:0] + mem_inst[238,31:0] + HEXRADIX + + + [239,31:0] + mem_inst[239,31:0] + HEXRADIX + + + [240,31:0] + mem_inst[240,31:0] + HEXRADIX + + + [241,31:0] + mem_inst[241,31:0] + HEXRADIX + + + [242,31:0] + mem_inst[242,31:0] + HEXRADIX + + + [243,31:0] + mem_inst[243,31:0] + HEXRADIX + + + [244,31:0] + mem_inst[244,31:0] + HEXRADIX + + + [245,31:0] + mem_inst[245,31:0] + HEXRADIX + + + [246,31:0] + mem_inst[246,31:0] + HEXRADIX + + + [247,31:0] + mem_inst[247,31:0] + HEXRADIX + + + [248,31:0] + mem_inst[248,31:0] + HEXRADIX + + + [249,31:0] + mem_inst[249,31:0] + HEXRADIX + + + [250,31:0] + mem_inst[250,31:0] + HEXRADIX + + + [251,31:0] + mem_inst[251,31:0] + HEXRADIX + + + [252,31:0] + mem_inst[252,31:0] + HEXRADIX + + + [253,31:0] + mem_inst[253,31:0] + HEXRADIX + + + [254,31:0] + mem_inst[254,31:0] + HEXRADIX + + + [255,31:0] + mem_inst[255,31:0] + HEXRADIX + + regfile[0:31,31:0] regfile[0:31,31:0] @@ -251,6 +1536,16 @@ s_id_rs2[4:0] UNSIGNEDDECRADIX + + s_id_s1[31:0] + s_id_s1[31:0] + HEXRADIX + + + s_id_s2[31:0] + s_id_s2[31:0] + HEXRADIX + s_id_aluop[2:0] s_id_aluop[2:0] diff --git a/test/Makefile b/test/Makefile index 1681182..82d3320 100644 --- a/test/Makefile +++ b/test/Makefile @@ -13,8 +13,11 @@ LDFLAGS = -T test.ld %.o: %.S $(AS) $(ASFLAGS) $^ -o $@ +%.o: %.c + $(CC) $(CFLAGS) $^ -o $@ + %.elf: %.o $(LD) $(LDFLAGS) $^ -o $@ test.hex: test.elf - riscv64-linux-gnu-objdump -s $^ | sed -n '/0000/,$$p' | cut -f3-6 -d ' ' | sed -e 's/ /\n/g' > $@ + riscv64-linux-gnu-objdump -s $^ | sed -n '/0000/,$$p' | cut -f3-6 -d ' ' | sed -e 's/ /\n/g' | sed 's/^\(..\)\(..\)\(..\)\(..\)/\4\3\2\1/' > $@ diff --git a/test/test.S b/test/test.S index d4f69c7..a540baf 100644 --- a/test/test.S +++ b/test/test.S @@ -33,4 +33,32 @@ add x29, x0, x0 add x30, x0, x0 add x31, x0, x0 +# nop required because cpu currently does not detect when something is needed from a later stage of the pipeline. +# 5 clocks allows one instruction to finish before the next starts +nop +nop +nop +nop +nop +addi x1, x0, 0x12 +nop +nop +nop +nop +nop +addi x2, x0, 0x11 +nop +nop +nop +nop +nop +add x3, x2, x1 +loop: +nop +nop +nop +nop +nop +j loop + .data