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

Subversion Repositories ao486

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
3
`define CMD_WBINVD      #AUTOGEN_NEXT_CMD
4
 
5
// check CPL
6
`define CMDEX_WBINVD_STEP_0     4'd0
7
// do invalidate
8
`define CMDEX_WBINVD_STEP_1     4'd1
9
// idle
10
`define CMDEX_WBINVD_STEP_2     4'd2
11
12
 
13
14
dec_ready_2byte_one && decoder[7:0] == 8'h09
15
`CMD_WBINVD
16
SET(dec_cmdex, `CMDEX_WBINVD_STEP_0);
17
SET(consume_one);
18
SET(dec_is_complex);
19
20
 
21
22
`CMDEX_WBINVD_STEP_0
23
`CMDEX_WBINVD_STEP_1
24
LOOP(`CMDEX_WBINVD_STEP_2);
25
26
 
27
 
28
29
IF(exe_cmd == `CMD_WBINVD && exe_cmdex == `CMDEX_WBINVD_STEP_0);
30
    IF(cpl > 2'd0);
31
        SET(exe_waiting);
32
        SET(exe_trigger_gp_fault); //exception GP(0)
33
    ENDIF();
34
ENDIF();
35
36
 
37
38
reg e_wbinvd_code_done;
39
reg e_wbinvd_data_done;
40
 
41
always @(posedge clk or negedge rst_n) begin
42
    if(rst_n == 1'b0)       e_wbinvd_code_done <= `FALSE;
43
    else if(exe_reset)      e_wbinvd_code_done <= `FALSE;
44
    else if(exe_ready)      e_wbinvd_code_done <= `FALSE;
45
    else if(invdcode_done)  e_wbinvd_code_done <= `TRUE;
46
end
47
 
48
always @(posedge clk or negedge rst_n) begin
49
    if(rst_n == 1'b0)         e_wbinvd_data_done <= `FALSE;
50
    else if(exe_reset)        e_wbinvd_data_done <= `FALSE;
51
    else if(exe_ready)        e_wbinvd_data_done <= `FALSE;
52
    else if(wbinvddata_done)  e_wbinvd_data_done <= `TRUE;
53
end
54
55
 
56
57
IF(exe_cmd == `CMD_WBINVD && exe_cmdex == `CMDEX_WBINVD_STEP_1);
58
 
59
    SET(invdcode_do,   ~(e_wbinvd_code_done));
60
    SET(wbinvddata_do, ~(e_wbinvd_data_done));
61
 
62
    IF(~(e_wbinvd_code_done && e_wbinvd_data_done));
63
        SET(exe_waiting);
64
    ENDIF();
65
ENDIF();
66
67
 
68
69
IF(wr_cmd == `CMD_WBINVD && wr_cmdex == `CMDEX_WBINVD_STEP_0);
70
    SET(wr_not_finished);
71
ENDIF();
72
73
 
74
75
IF(wr_cmd == `CMD_WBINVD && wr_cmdex == `CMDEX_WBINVD_STEP_1);
76
 
77
    // reset part of pipeline
78
    SET(wr_req_reset_micro);
79
    SET(wr_req_reset_rd);
80
    SET(wr_req_reset_exe);
81
ENDIF();
82

powered by: WebSVN 2.1.0

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