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

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [gui_plugin/] [CpuWidgets/] [RegsViewWidget.cpp] - Blame information for rev 3

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

Line No. Rev Author Line
1 3 sergeykhbr
/**
2
 * @file
3
 * @copyright  Copyright 2016 GNSS Sensor Ltd. All right reserved.
4
 * @author     Sergey Khabarov - sergeykhbr@gmail.com
5
 * @brief      Single CPU register form.
6
 */
7
 
8
#include "RegWidget.h"
9
#include "RegsViewWidget.h"
10
#include "moc_RegsViewWidget.h"
11
 
12
#include <memory>
13
 
14
namespace debugger {
15
 
16
/** Layout of register by name */
17
static const char *REG_NAMES_LAYOUT[] = {
18
    "ra", "s0",  "a0",
19
    "sp", "s1",  "a1",
20
    "gp", "s2",  "a2",
21
    "tp", "s3",  "a3",
22
    ""  , "s4",  "a4",
23
    "t0", "s5",  "a5",
24
    "t1", "s6",  "a6",
25
    "t2", "s7",  "a7",
26
    "t3", "s8",  "",
27
    "t4", "s9",  "",
28
    "t5", "s10", "pc",
29
    "t6", "s11", "npc",
30
    "break"
31
};
32
 
33
RegsViewWidget::RegsViewWidget(IGui *igui, QWidget *parent)
34
    : QWidget(parent) {
35
    igui_ = igui;
36
 
37
    gridLayout = new QGridLayout(this);
38
    gridLayout->setSpacing(4);
39
    gridLayout->setHorizontalSpacing(10);
40
    gridLayout->setVerticalSpacing(0);
41
    gridLayout->setContentsMargins(4, 4, 4, 4);
42
    setLayout(gridLayout);
43
    cmdRegs_.make_string("regs");
44
    waitingResp_ = false;
45
 
46
    int n = 0;
47
    while (strcmp(REG_NAMES_LAYOUT[n], "break")) {
48
        if (REG_NAMES_LAYOUT[n][0] == '\0') {
49
            n++;
50
            continue;
51
        }
52
        addRegWidget(n, REG_NAMES_LAYOUT[n]);
53
        n++;
54
    }
55
}
56
 
57
RegsViewWidget::~RegsViewWidget() {
58
    igui_->removeFromQueue(static_cast<IGuiCmdHandler *>(this));
59
}
60
 
61
void RegsViewWidget::handleResponse(AttributeType *req, AttributeType *resp) {
62
    resp_ = *resp;
63
    emit signalHandleResponse(&resp_);
64
    waitingResp_ = false;
65
}
66
 
67
void RegsViewWidget::slotUpdateByTimer() {
68
    if (!isVisible()) {
69
        return;
70
    }
71
    if (waitingResp_) {
72
        return;
73
    }
74
    igui_->registerCommand(static_cast<IGuiCmdHandler *>(this),
75
                            &cmdRegs_, true);
76
    waitingResp_ = true;
77
}
78
 
79
void RegsViewWidget::slotRegChanged(AttributeType *wrcmd) {
80
    igui_->registerCommand(0, wrcmd, true);
81
}
82
 
83
void RegsViewWidget::addRegWidget(int idx, const char *name) {
84
    int line = idx / 3;
85
    int col = idx - 3 * line;
86
 
87
    QWidget *pnew = new RegWidget(name, this);
88
    gridLayout->addWidget(pnew, line + 1, col);
89
 
90
    connect(this, SIGNAL(signalHandleResponse(AttributeType *)),
91
            pnew, SLOT(slotHandleResponse(AttributeType *)));
92
 
93
    connect(pnew, SIGNAL(signalChanged(AttributeType *)),
94
            this, SLOT(slotRegChanged(AttributeType *)));
95
}
96
 
97
}  // namespace debugger

powered by: WebSVN 2.1.0

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