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

Subversion Repositories ao486

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 alfik
 
2
 
3
4
`define CMD_BOUND #AUTOGEN_NEXT_CMD
5
 
6
`define CMDEX_BOUND_STEP_FIRST  4'd0
7
`define CMDEX_BOUND_STEP_LAST   4'd1
8
9
 
10
11
dec_ready_modregrm_one && decoder[7:0] == 8'h62
12
prefix_group_1_lock || `DEC_MODREGRM_IS_MOD_11
13
`CMD_BOUND
14
SET(dec_cmdex, `CMDEX_BOUND_STEP_FIRST);
15
SET(consume_modregrm_one);
16
SET(dec_is_complex);
17
18
 
19
20
`CMDEX_BOUND_STEP_FIRST
21
LAST(`CMDEX_BOUND_STEP_LAST);
22
23
 
24
25
IF(rd_cmd == `CMD_BOUND && rd_cmdex == `CMDEX_BOUND_STEP_FIRST);
26
 
27
    SET(rd_src_is_memory);
28
 
29
    IF(rd_mutex_busy_memory); SET(rd_waiting);
30
    ELSE();
31
        SET(read_virtual);
32
 
33
        IF(~(read_for_rd_ready)); SET(rd_waiting); ENDIF();
34
    ENDIF();
35
ENDIF();
36
37
 
38
39
IF(rd_cmd == `CMD_BOUND && rd_cmdex == `CMDEX_BOUND_STEP_LAST);
40
 
41
    SET(address_ea_buffer);
42
 
43
    SET(rd_dst_is_reg);
44
    SET(rd_src_is_memory);
45
 
46
    IF(rd_mutex_busy_memory); SET(rd_waiting);
47
    ELSE();
48
        SET(read_virtual); // special ea
49
 
50
        IF(~(read_for_rd_ready)); SET(rd_waiting); ENDIF();
51
    ENDIF();
52
ENDIF();
53
54
 
55
56
IF(exe_cmd == `CMD_BOUND && exe_cmdex == `CMDEX_BOUND_STEP_FIRST);
57
    SAVE(exe_buffer, src);
58
ENDIF();
59
60
 
61
62
wire signed [31:0] e_bound_min;
63
wire signed [31:0] e_bound_max;
64
wire signed [31:0] e_bound_dst;
65
 
66
assign e_bound_min = (exe_operand_16bit)? { {16{exe_buffer[15]}}, exe_buffer[15:0] } : exe_buffer;
67
assign e_bound_max = (exe_operand_16bit)? { {16{src[15]}},        src[15:0] }        : src;
68
assign e_bound_dst = (exe_operand_16bit)? { {16{dst[15]}},        dst[15:0] }        : dst;
69
 
70
assign exe_bound_fault = exe_cmd == `CMD_BOUND && exe_cmdex == `CMDEX_BOUND_STEP_LAST &&
71
    (e_bound_dst < e_bound_min || e_bound_dst > e_bound_max);
72
73
 
74
75
IF(exe_cmd == `CMD_BOUND && exe_cmdex == `CMDEX_BOUND_STEP_LAST);
76
   IF(exe_bound_fault); SET(exe_waiting); ENDIF();
77
ENDIF();
78
79
 
80
81
IF(wr_cmd == `CMD_BOUND && wr_cmdex == `CMDEX_BOUND_STEP_FIRST);
82
    SET(wr_not_finished);
83
ENDIF();
84

powered by: WebSVN 2.1.0

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