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

Subversion Repositories ao486

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
3
`define CMD_CMPS        #AUTOGEN_NEXT_CMD
4
 
5
`define CMDEX_CMPS_FIRST    4'd0
6
`define CMDEX_CMPS_LAST     4'd1
7
8
 
9
10
dec_ready_one && { decoder[7:1], 1'b0 } == 8'hA6
11
`CMD_CMPS
12
SET(dec_cmdex,`CMDEX_CMPS_FIRST);
13
IF(decoder[0] == 1'b0); SET(dec_is_8bit); ENDIF();
14
SET(consume_one);
15
SET(dec_is_complex);
16
17
 
18
19
IF(`CMDEX_CMPS_FIRST);
20
    `CMDEX_CMPS_LAST
21
ENDIF();
22
 
23
IF(`CMDEX_CMPS_LAST);
24
    `CMDEX_CMPS_FIRST
25
ENDIF();
26
27
 
28
29
IF(rd_cmd == `CMD_CMPS && rd_cmdex == `CMDEX_CMPS_FIRST);
30
 
31
    SET(address_esi);
32
 
33
    //waiting for esi in 'address_waiting'
34
 
35
    IF(rd_mutex_busy_memory || (rd_mutex_busy_ecx && rd_prefix_group_1_rep != 2'd0)); SET(rd_waiting); //waiting for ecx for rd_ignore_string
36
    ELSE();
37
 
38
        IF(~(rd_string_ignore));
39
            SET(rd_src_is_memory);
40
 
41
            SET(rd_req_eflags);
42
            SET(rd_req_esi);
43
            SET(rd_req_edi);
44
            //not needed -- reset after finish //IF(rd_prefix_group_1_rep != 2'd0); SET(rd_req_ecx); ENDIF();
45
 
46
            SET(read_virtual);
47
 
48
            IF(~(read_for_rd_ready)); SET(rd_waiting); ENDIF();
49
        ENDIF();
50
    ENDIF();
51
ENDIF();
52
53
 
54
55
IF(rd_cmd == `CMD_CMPS && rd_cmdex == `CMDEX_CMPS_LAST);
56
 
57
    SET(address_edi);
58
 
59
    //waiting for edi in 'address_waiting'
60
 
61
    IF(~(rd_string_ignore));
62
        SET(rd_src_is_memory);
63
        SET(rd_dst_is_memory_last);
64
 
65
        SET(rd_req_eflags);
66
        SET(rd_req_esi);
67
        SET(rd_req_edi);
68
        //not needed -- reset after finish //IF(rd_prefix_group_1_rep != 2'd0); SET(rd_req_ecx); ENDIF();
69
 
70
        SET(read_virtual);
71
 
72
        IF(~(read_for_rd_ready)); SET(rd_waiting); ENDIF();
73
    ENDIF();
74
ENDIF();
75
76
 
77
78
IF(exe_cmd == `CMD_CMPS);
79
 
80
    SET(exe_result, exe_arith_sub[31:0]);
81
    SET(exe_arith_index, (`ARITH_VALID | `ARITH_SUB));
82
ENDIF();
83
84
 
85
86
IF(wr_cmd == `CMD_CMPS && wr_cmdex == `CMDEX_CMPS_FIRST);
87
    SET(wr_not_finished);
88
ENDIF();
89
90
 
91
92
IF(wr_cmd == `CMD_CMPS && wr_cmdex == `CMDEX_CMPS_LAST);
93
 
94
    IF(~(wr_string_ignore));
95
        SAVE(esi, wr_esi_final);
96
        SAVE(edi, wr_edi_final);
97
        IF(wr_prefix_group_1_rep != 2'd0); SAVE(ecx, wr_ecx_final); ENDIF();
98
 
99
        SAVE(zflag, zflag_result);
100
        SAVE(sflag, sflag_result);
101
        SAVE(pflag, pflag_result);
102
 
103
        SAVE(aflag, aflag_arith);
104
        SAVE(cflag, cflag_arith);
105
        SAVE(oflag, oflag_arith);
106
    ENDIF();
107
 
108
    IF(wr_string_ignore || wr_string_zf_finish || wr_prefix_group_1_rep == 2'd0);
109
        SET(wr_req_reset_micro);
110
        SET(wr_req_reset_rd);
111
        SET(wr_req_reset_exe);
112
    ENDIF();
113
 
114
    IF(~(wr_string_ignore) && ~(wr_string_zf_finish) && wr_prefix_group_1_rep != 2'd0);
115
        SET(wr_not_finished);
116
 
117
        SET(wr_string_in_progress);
118
    ENDIF();
119
ENDIF();
120

powered by: WebSVN 2.1.0

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