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

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [socsim_plugin/] [rfctrl.cpp] - 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 2017 GNSS Sensor Ltd. All right reserved.
4
 * @author     Sergey Khabarov - sergeykhbr@gmail.com
5
 * @brief      RF front-end black-box model.
6
 */
7
 
8
#include "api_core.h"
9
#include "rfctrl.h"
10
 
11
namespace debugger {
12
 
13
RfController::RfController(const char *name)  : IService(name) {
14
    registerInterface(static_cast<IMemoryOperation *>(this));
15
    registerAttribute("BaseAddress", &baseAddress_);
16
    registerAttribute("Length", &length_);
17
 
18
    baseAddress_.make_uint64(0);
19
    length_.make_uint64(0);
20
 
21
    memset(&regs_, 0, sizeof(regs_));
22
}
23
 
24
RfController::~RfController() {
25
}
26
 
27
void RfController::postinitService() {
28
}
29
 
30
void RfController::b_transport(Axi4TransactionType *trans) {
31
    uint64_t mask = (length_.to_uint64() - 1);
32
    uint64_t off = ((trans->addr - getBaseAddress()) & mask) / 4;
33
    trans->response = MemResp_Valid;
34
    if (trans->action == MemAction_Write) {
35
        for (uint64_t i = 0; i < trans->xsize/4; i++) {
36
            if ((trans->wstrb & (0xf << 4*i)) == 0) {
37
                continue;
38
            }
39
            switch (off + i) {
40
            case (0x2c >> 2):
41
                RISCV_info("Run channel %d", trans->wpayload.b32[i]);
42
                regs_.run = 0xf;    // simulate loading delay
43
                break;
44
            case (0x3c >> 2): //rw_ant_status
45
                regs_.rw_ant_status &= ~0x3;  //enable power ant1/2
46
                regs_.rw_ant_status |= trans->wpayload.b32[i];
47
                break;
48
            default:;
49
            }
50
        }
51
    } else {
52
        for (uint64_t i = 0; i < trans->xsize/4; i++) {
53
            switch (off + i) {
54
            case (0x2c >> 2): // run
55
                regs_.run >>= 1;
56
                trans->rpayload.b32[i] = regs_.run;
57
                break;
58
            case (0x3c >> 2): //rw_ant_status
59
                trans->rpayload.b32[i] = regs_.rw_ant_status;
60
                break;
61
            default:
62
                trans->rpayload.b32[i] = ~0;
63
            }
64
        }
65
    }
66
}
67
 
68
}  // namespace debugger

powered by: WebSVN 2.1.0

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