OpenCores
URL https://opencores.org/ocsvn/ssbcc/ssbcc/trunk

Subversion Repositories ssbcc

[/] [ssbcc/] [trunk/] [core/] [9x8/] [display_trace.v] - Blame information for rev 12

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 12 sinclairrf
// Copyright 2013-2015, Sinclair R.F., Inc.
2 2 sinclairrf
// Display micro controller PC, opcode, and stacks.
3 12 sinclairrf
localparam L__TRACE_SIZE        = 1                     // s_interrupt
4
                                + 1                     // s_interrupted
5
                                + C_PC_WIDTH            // pc width
6 2 sinclairrf
                                + 9                     // opcode width
7
                                + C_DATA_PTR_WIDTH      // data stack pointer width
8
                                + 1                     // s_N_valid
9
                                + 8                     // s_N
10
                                + 1                     // s_T_valid
11
                                + 8                     // s_T
12
                                + 1                     // s_R_valid
13
                                + C_RETURN_WIDTH        // s_R
14
                                + C_RETURN_PTR_WIDTH    // return stack pointer width
15
                                ;
16
task display_trace;
17
  input                     [L__TRACE_SIZE-1:0] s_raw;
18 12 sinclairrf
  reg                                   s_interrupt;
19
  reg                                   s_interrupted;
20 2 sinclairrf
  reg                  [C_PC_WIDTH-1:0] s_PC;
21
  reg                             [8:0] s_opcode;
22
  reg            [C_DATA_PTR_WIDTH-1:0] s_Np_stack_ptr;
23
  reg                                   s_N_valid;
24
  reg                             [7:0] s_N;
25
  reg                                   s_T_valid;
26
  reg                             [7:0] s_T;
27
  reg                                   s_R_valid;
28
  reg              [C_RETURN_WIDTH-1:0] s_R;
29
  reg          [C_RETURN_PTR_WIDTH-1:0] s_Rw_ptr;
30
  reg                         [7*8-1:0] s_opcode_name;
31
  begin
32 12 sinclairrf
    { s_interrupt, s_interrupted, s_PC, s_opcode, s_Np_stack_ptr, s_N_valid, s_N, s_T_valid, s_T, s_R_valid, s_R, s_Rw_ptr } = s_raw;
33
    if (s_interrupt)
34
      s_opcode_name = "int    ";
35
    else if (s_interrupted)
36
      s_opcode_name = "nop_int";
37
    else casez (s_opcode)
38 2 sinclairrf
      9'b00_0000_000 : s_opcode_name = "nop    ";
39
      9'b00_0000_001 : s_opcode_name = "<<0    ";
40
      9'b00_0000_010 : s_opcode_name = "<<1    ";
41
      9'b00_0000_011 : s_opcode_name = "<<msb  ";
42
      9'b00_0000_100 : s_opcode_name = "0>>    ";
43
      9'b00_0000_101 : s_opcode_name = "1>>    ";
44
      9'b00_0000_110 : s_opcode_name = "msb>>  ";
45
      9'b00_0000_111 : s_opcode_name = "lsb>>  ";
46
      9'b00_0001_000 : s_opcode_name = "dup    ";
47
      9'b00_0001_001 : s_opcode_name = "r@     ";
48
      9'b00_0001_010 : s_opcode_name = "over   ";
49 7 sinclairrf
      9'b00_0001_011 : s_opcode_name = "+c     ";
50
      9'b00_0001_111 : s_opcode_name = "-c     ";
51 2 sinclairrf
      9'b00_0010_010 : s_opcode_name = "swap   ";
52
      9'b00_0011_000 : s_opcode_name = "+      ";
53
      9'b00_0011_100 : s_opcode_name = "-      ";
54
      9'b00_0100_000 : s_opcode_name = "0=     ";
55
      9'b00_0100_001 : s_opcode_name = "0<>    ";
56
      9'b00_0100_010 : s_opcode_name = "-1=    ";
57
      9'b00_0100_011 : s_opcode_name = "-1<>   ";
58
      9'b00_0101_000 : s_opcode_name = "return ";
59
      9'b00_0110_000 : s_opcode_name = "inport ";
60
      9'b00_0111_000 : s_opcode_name = "outport";
61
      9'b00_1000_000 : s_opcode_name = ">r     ";
62
      9'b00_1001_001 : s_opcode_name = "r>     ";
63
      9'b00_1010_000 : s_opcode_name = "&      ";
64
      9'b00_1010_001 : s_opcode_name = "or     ";
65
      9'b00_1010_010 : s_opcode_name = "^      ";
66
      9'b00_1010_011 : s_opcode_name = "nip    ";
67
      9'b00_1010_100 : s_opcode_name = "drop   ";
68
      9'b00_1011_000 : s_opcode_name = "1+     ";
69
      9'b00_1011_100 : s_opcode_name = "1-     ";
70
      9'b00_1100_000 : s_opcode_name = "store0 ";
71
      9'b00_1100_001 : s_opcode_name = "store1 ";
72
      9'b00_1100_010 : s_opcode_name = "store2 ";
73
      9'b00_1100_011 : s_opcode_name = "store3 ";
74
      9'b00_1101_000 : s_opcode_name = "fetch0 ";
75
      9'b00_1101_001 : s_opcode_name = "fetch1 ";
76
      9'b00_1101_010 : s_opcode_name = "fetch2 ";
77
      9'b00_1101_011 : s_opcode_name = "fetch3 ";
78
      9'b00_1110_000 : s_opcode_name = "store0+";
79
      9'b00_1110_001 : s_opcode_name = "store1+";
80
      9'b00_1110_010 : s_opcode_name = "store2+";
81
      9'b00_1110_011 : s_opcode_name = "store3+";
82
      9'b00_1110_100 : s_opcode_name = "store0-";
83
      9'b00_1110_101 : s_opcode_name = "store1-";
84
      9'b00_1110_110 : s_opcode_name = "store2-";
85
      9'b00_1110_111 : s_opcode_name = "store3-";
86
      9'b00_1111_000 : s_opcode_name = "fetch0+";
87
      9'b00_1111_001 : s_opcode_name = "fetch1+";
88
      9'b00_1111_010 : s_opcode_name = "fetch2+";
89
      9'b00_1111_011 : s_opcode_name = "fetch3+";
90
      9'b00_1111_100 : s_opcode_name = "fetch0-";
91
      9'b00_1111_101 : s_opcode_name = "fetch1-";
92
      9'b00_1111_110 : s_opcode_name = "fetch2-";
93
      9'b00_1111_111 : s_opcode_name = "fetch3-";
94
      9'b0_100_????? : s_opcode_name = "jump   ";
95
      9'b0_110_????? : s_opcode_name = "call   ";
96
      9'b0_101_????? : s_opcode_name = "jumpc  ";
97
      9'b0_111_????? : s_opcode_name = "callc  ";
98
      9'b1_????_???? : s_opcode_name = "push   ";
99
             default : s_opcode_name = "INVALID";
100
    endcase
101
    $write("%X %X %s : %X", s_PC, s_opcode, s_opcode_name, s_Np_stack_ptr);
102
    if (s_N_valid) $write(" %x",s_N); else $write(" XX");
103
    if (s_T_valid) $write(" %x",s_T); else $write(" XX");
104
    if (s_R_valid) $write(" : %x",s_R); else $write(" : %s",{((C_RETURN_WIDTH+3)/4){8'h58}});
105
    $write(" %X\n",s_Rw_ptr);
106
  end
107
endtask

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.