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

Subversion Repositories ao486

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
3
`define CMD_INVLPG          #AUTOGEN_NEXT_CMD
4
 
5
// wait for seg_linear to be ok
6
`define CMDEX_INVLPG_STEP_0     4'd0
7
// invalidate
8
`define CMDEX_INVLPG_STEP_1     4'd1
9
// stop next commands
10
`define CMDEX_INVLPG_STEP_2     4'd2
11
12
 
13
14
dec_ready_2byte_modregrm && decoder[7:0] == 8'h01 && decoder[13:11] == 3'd7
15
prefix_group_1_lock || `DEC_MODREGRM_IS_MOD_11
16
`CMD_INVLPG
17
SET(dec_cmdex, `CMDEX_INVLPG_STEP_0);
18
SET(consume_modregrm_one);
19
SET(dec_is_complex);
20
21
 
22
23
`CMDEX_INVLPG_STEP_0
24
`CMDEX_INVLPG_STEP_1
25
LOOP(`CMDEX_INVLPG_STEP_2);
26
27
 
28
29
IF(rd_cmd == `CMD_INVLPG && rd_cmdex == `CMDEX_INVLPG_STEP_1);
30
 
31
    IF(~(rd_address_effective_ready)); SET(rd_waiting); ENDIF();
32
ENDIF();
33
34
 
35
36
IF(exe_cmd == `CMD_INVLPG && exe_cmdex == `CMDEX_INVLPG_STEP_0);
37
    IF(cpl > 2'd0);
38
        SET(exe_waiting);
39
        SET(exe_trigger_gp_fault); //exception GP(0)
40
    ENDIF();
41
ENDIF();
42
43
 
44
45
IF(exe_cmd == `CMD_INVLPG && exe_cmdex == `CMDEX_INVLPG_STEP_1);
46
 
47
    SET(tlbflushsingle_do);
48
    SET(tlbflushsingle_address, exe_linear);
49
 
50
    IF(~(tlbflushsingle_done)); SET(exe_waiting); ENDIF();
51
ENDIF();
52
53
 
54
55
IF(wr_cmd == `CMD_INVLPG && wr_cmdex == `CMDEX_INVLPG_STEP_0);
56
    SET(wr_not_finished);
57
ENDIF();
58
59
 
60
61
IF(wr_cmd == `CMD_INVLPG && wr_cmdex == `CMDEX_INVLPG_STEP_1);
62
 
63
    // reset part of pipeline
64
    SET(wr_req_reset_micro);
65
    SET(wr_req_reset_rd);
66
    SET(wr_req_reset_exe);
67
ENDIF();
68

powered by: WebSVN 2.1.0

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