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

Subversion Repositories ao486

[/] [ao486/] [trunk/] [rtl/] [ao486/] [commands/] [CMD_debug_reg.txt] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
3
`define CMD_debug_reg       #AUTOGEN_NEXT_CMD
4
 
5
`define CMDEX_debug_reg_MOV_store_STEP_0    4'd0
6
 
7
`define CMDEX_debug_reg_MOV_load_STEP_0     4'd1
8
`define CMDEX_debug_reg_MOV_load_STEP_1     4'd2
9
10
 
11
12
dec_ready_2byte_modregrm && { decoder[7:2], 1'b0, decoder[0] } == 8'h21
13
`CMD_debug_reg
14
IF(decoder[1]); SET(dec_cmdex, `CMDEX_debug_reg_MOV_load_STEP_0); ELSE(); SET(dec_cmdex, `CMDEX_debug_reg_MOV_store_STEP_0); ENDIF();
15
SET(consume_modregrm_one);
16
IF(decoder[1]); SET(dec_is_complex); ENDIF();
17
18
 
19
20
`CMDEX_debug_reg_MOV_load_STEP_0
21
LOOP(`CMDEX_debug_reg_MOV_load_STEP_1);
22
23
 
24
25
IF(rd_cmd == `CMD_debug_reg && rd_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0);
26
 
27
    SET(rd_dst_is_rm);
28
 
29
    SET(rd_req_rm);
30
 
31
    // wait for prev step; not to set dr7.GD before
32
    IF(rd_mutex_busy_active); SET(rd_waiting); ENDIF();
33
ENDIF();
34
35
 
36
37
IF(rd_cmd == `CMD_debug_reg && rd_cmdex == `CMDEX_debug_reg_MOV_load_STEP_0);
38
 
39
    SET(rd_src_is_rm);
40
 
41
    // wait for prev step; not to set dr7.GD before // no req required
42
    IF(rd_mutex_busy_active); SET(rd_waiting); ENDIF();
43
ENDIF();
44
45
 
46
47
IF(exe_cmd == `CMD_debug_reg && (exe_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0 || exe_cmdex == `CMDEX_debug_reg_MOV_load_STEP_0));
48
 
49
    IF(exe_cmdex == `CMDEX_debug_reg_MOV_load_STEP_0);
50
        SET(exe_result2, src);
51
    ENDIF();
52
 
53
    IF(exe_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0 && exe_modregrm_reg == 3'd0); SET(exe_result, dr0); ENDIF();
54
    IF(exe_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0 && exe_modregrm_reg == 3'd1); SET(exe_result, dr1); ENDIF();
55
    IF(exe_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0 && exe_modregrm_reg == 3'd2); SET(exe_result, dr2); ENDIF();
56
    IF(exe_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0 && exe_modregrm_reg == 3'd3); SET(exe_result, dr3); ENDIF();
57
 
58
    IF(exe_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0 && (exe_modregrm_reg == 3'd4 || exe_modregrm_reg == 3'd6));
59
        SET(exe_result, { 16'hFFFF, dr6_bt, dr6_bs, dr6_bd, dr6_b12, 8'hFF, dr6_breakpoints });
60
    ENDIF();
61
 
62
    IF(exe_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0 && (exe_modregrm_reg == 3'd5 || exe_modregrm_reg == 3'd7));
63
        SET(exe_result, dr7);
64
    ENDIF();
65
 
66
    IF(dr7[`DR7_BIT_GD]);
67
        SET(dr6_bd_set, `TRUE);
68
 
69
        SET(exe_waiting);
70
        SET(exe_trigger_db_fault); //exception DB(0)
71
    ELSE();
72
        IF(cpl > 2'd0);
73
            SET(exe_waiting);
74
            SET(exe_trigger_gp_fault); //exception GP(0)
75
        ENDIF();
76
    ENDIF();
77
ENDIF();
78
79
 
80
81
IF(wr_cmd == `CMD_debug_reg && wr_cmdex == `CMDEX_debug_reg_MOV_store_STEP_0);
82
    SET(wr_regrm_dword);
83
    SET(write_regrm);
84
ENDIF();
85
86
 
87
88
IF(wr_cmd == `CMD_debug_reg && wr_cmdex == `CMDEX_debug_reg_MOV_load_STEP_0);
89
    SET(wr_not_finished);
90
 
91
    IF(wr_decoder[13:11] == 3'd0); SAVE(dr0, result2); ENDIF();
92
    IF(wr_decoder[13:11] == 3'd1); SAVE(dr1, result2); ENDIF();
93
    IF(wr_decoder[13:11] == 3'd2); SAVE(dr2, result2); ENDIF();
94
    IF(wr_decoder[13:11] == 3'd3); SAVE(dr3, result2); ENDIF();
95
 
96
    IF((wr_decoder[13:11] == 3'd4 || wr_decoder[13:11] == 3'd6));
97
        SAVE(dr6_breakpoints, result2[3:0]);
98
 
99
        SAVE(dr6_b12,    result2[12]);
100
        SAVE(dr6_bd,     result2[13]);
101
        SAVE(dr6_bs,     result2[14]);
102
        SAVE(dr6_bt,     result2[15]);
103
    ENDIF();
104
 
105
    IF((wr_decoder[13:11] == 3'd5 || wr_decoder[13:11] == 3'd7));
106
        SAVE(dr7,    result2 | 32'h00000400);
107
    ENDIF();
108
ENDIF();
109
110
 
111
112
IF(wr_cmd == `CMD_debug_reg && wr_cmdex == `CMDEX_debug_reg_MOV_load_STEP_1);
113
    // reset pipeline
114
    SET(wr_req_reset_micro);
115
    SET(wr_req_reset_rd);
116
    SET(wr_req_reset_exe);
117
ENDIF();
118

powered by: WebSVN 2.1.0

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