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

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [cpu_sysc_plugin/] [riverlib/] [core/] [dbg_port.h] - Blame information for rev 2

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sergeykhbr
/**
2
 * @file
3
 * @copyright  Copyright 2016 GNSS Sensor Ltd. All right reserved.
4
 * @author     Sergey Khabarov - sergeykhbr@gmail.com
5
 * @brief      Debug port.
6
 * @details    Must be connected to DSU.
7
 */
8
 
9
#ifndef __DEBUGGER_RIVERLIB_DBG_PORT_H__
10
#define __DEBUGGER_RIVERLIB_DBG_PORT_H__
11
 
12
#include <systemc.h>
13
#include "../river_cfg.h"
14
#include "stacktrbuf.h"
15
 
16
namespace debugger {
17
 
18
SC_MODULE(DbgPort) {
19
    sc_in<bool> i_clk;                                  // CPU clock
20
    sc_in<bool> i_nrst;                                 // Reset. Active LOW.
21
    // "RIVER" Debug interface
22
    sc_in<bool> i_dport_valid;                          // Debug access from DSU is valid
23
    sc_in<bool> i_dport_write;                          // Write command flag
24
    sc_in<sc_uint<2>> i_dport_region;                   // Registers region ID: 0=CSR; 1=IREGS; 2=Control
25
    sc_in<sc_uint<12>> i_dport_addr;                    // Register idx
26
    sc_in<sc_uint<RISCV_ARCH>> i_dport_wdata;           // Write value
27
    sc_out<bool> o_dport_ready;                         // Response is ready
28
    sc_out<sc_uint<RISCV_ARCH>> o_dport_rdata;          // Response value
29
    // CPU debugging signals:
30
    sc_out<sc_uint<12>> o_core_addr;                    // Address of the sub-region register
31
    sc_out<sc_uint<RISCV_ARCH>> o_core_wdata;           // Write data
32
    sc_out<bool> o_csr_ena;                             // Region 0: Access to CSR bank is enabled.
33
    sc_out<bool> o_csr_write;                           // Region 0: CSR write enable
34
    sc_in<sc_uint<RISCV_ARCH>> i_csr_rdata;             // Region 0: CSR read value
35
    sc_out<bool> o_ireg_ena;                            // Region 1: Access to integer register bank is enabled
36
    sc_out<bool> o_ireg_write;                          // Region 1: Integer registers bank write pulse
37
    sc_out<bool> o_npc_write;                           // Region 1: npc write enable
38
    sc_in<sc_uint<RISCV_ARCH>> i_ireg_rdata;            // Region 1: Integer register read value
39
    sc_in<sc_uint<BUS_ADDR_WIDTH>> i_pc;                // Region 1: Instruction pointer
40
    sc_in<sc_uint<BUS_ADDR_WIDTH>> i_npc;               // Region 1: Next Instruction pointer
41
    sc_in<bool> i_e_valid;                              // Stepping control signal
42
    sc_in<bool> i_e_call;                               // pseudo-instruction CALL
43
    sc_in<bool> i_e_ret;                                // pseudo-instruction RET
44
    sc_in<bool> i_m_valid;                              // To compute number of valid executed instruction
45
    sc_out<sc_uint<64>> o_clock_cnt;                    // Number of clocks excluding halt state
46
    sc_out<sc_uint<64>> o_executed_cnt;                 // Number of executed instructions
47
    sc_out<bool> o_halt;                                // Halt signal is equal to hold pipeline
48
    sc_in<bool> i_ebreak;                               // ebreak instruction decoded
49
    sc_out<bool> o_break_mode;                          // Behaviour on EBREAK instruction: 0 = halt; 1 = generate trap
50
    sc_out<bool> o_br_fetch_valid;                      // Fetch injection address/instr are valid
51
    sc_out<sc_uint<BUS_ADDR_WIDTH>> o_br_address_fetch; // Fetch injection address to skip ebreak instruciton only once
52
    sc_out<sc_uint<32>> o_br_instr_fetch;               // Real instruction value that was replaced by ebreak
53
    // Cache debug signals:
54
    sc_in<sc_uint<2>> i_istate;                         // ICache transaction state
55
    sc_in<sc_uint<2>> i_dstate;                         // DCache transaction state
56
    sc_in<sc_uint<2>> i_cstate;                         // CacheTop state machine value
57
    sc_in<sc_biguint<DBG_FETCH_TRACE_SIZE*64>> i_instr_buf;               // todo: remove it
58
 
59
    void comb();
60
    void registers();
61
 
62
    SC_HAS_PROCESS(DbgPort);
63
 
64
    DbgPort(sc_module_name name_);
65
    virtual ~DbgPort();
66
 
67
    void generateVCD(sc_trace_file *i_vcd, sc_trace_file *o_vcd);
68
 
69
private:
70
    struct RegistersType {
71
        sc_signal<bool> ready;
72
        sc_signal<bool> halt;
73
        sc_signal<bool> breakpoint;
74
        sc_signal<bool> stepping_mode;
75
        sc_signal<sc_uint<RISCV_ARCH>> stepping_mode_cnt;
76
        sc_signal<bool> trap_on_break;
77
        sc_signal<sc_uint<BUS_ADDR_WIDTH>> br_address_fetch;
78
        sc_signal<sc_uint<32>> br_instr_fetch;
79
        sc_signal<bool> br_fetch_valid;
80
 
81
        sc_signal<sc_uint<RISCV_ARCH>> rdata;
82
        sc_signal<sc_uint<RISCV_ARCH>> stepping_mode_steps; // Number of steps before halt in stepping mode
83
        sc_signal<sc_uint<64>> clock_cnt;                   // Timer in clocks.
84
        sc_signal<sc_uint<64>> executed_cnt;                // Number of valid executed instructions
85
        sc_signal<sc_uint<5>> stack_trace_cnt;              // Stack trace buffer counter (Log2[CFG_STACK_TRACE_BUF_SIZE])
86
        sc_signal<bool> rd_trbuf_ena;
87
        sc_signal<bool> rd_trbuf_addr0;
88
    } v, r;
89
 
90
    sc_signal<sc_uint<5>> wb_stack_raddr;
91
    sc_signal<sc_biguint<2*BUS_ADDR_WIDTH>> wb_stack_rdata;
92
    sc_signal<bool> w_stack_we;
93
    sc_signal<sc_uint<5>> wb_stack_waddr;
94
    sc_signal<sc_biguint<2*BUS_ADDR_WIDTH>> wb_stack_wdata;
95
 
96
    StackTraceBuffer *trbuf0;
97
};
98
 
99
 
100
}  // namespace debugger
101
 
102
#endif  // __DEBUGGER_RIVERLIB_DBG_PORT_H__

powered by: WebSVN 2.1.0

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