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

Subversion Repositories ao486

[/] [ao486/] [trunk/] [rtl/] [ao486/] [commands/] [CMD_INT_INTO.txt] - Rev 8

Go to most recent revision | Compare with Previous | Blame | View Log


<defines>
`define CMD_INT_INTO    #AUTOGEN_NEXT_CMD

`define CMDEX_INT_INTO_INT_STEP_0    4'd0
`define CMDEX_INT_INTO_INT3_STEP_0   4'd1
`define CMDEX_INT_INTO_INTO_STEP_0   4'd2

`define CMDEX_INT_INTO_INT1_STEP_0   4'd3
</defines>

<decode>
(dec_ready_one && (decoder[7:0] == 8'hCC || decoder[7:0] == 8'hCE || decoder[7:0] == 8'hF1)) || (dec_ready_one_one && decoder[7:0] == 8'hCD)
`CMD_INT_INTO
SET(dec_cmdex,
    (decoder[2:0] == 3'b100)? `CMDEX_INT_INTO_INT3_STEP_0 :
    (decoder[2:0] == 3'b101)? `CMDEX_INT_INTO_INT_STEP_0 :
    (decoder[2:0] == 3'b110)? `CMDEX_INT_INTO_INTO_STEP_0 :
                              `CMDEX_INT_INTO_INT1_STEP_0);
IF((decoder[0] ^ decoder[2]) == 1'b1); SET(consume_one); ELSE(); SET(consume_one_one); ENDIF();
SET(dec_is_complex);
</decode>

<microcode>
//no push
IF(mc_cmd == `CMD_INT_INTO && (mc_cmdex_last == `CMDEX_INT_INTO_INT_STEP_0 || mc_cmdex_last == `CMDEX_INT_INTO_INT3_STEP_0 || mc_cmdex_last == `CMDEX_INT_INTO_INT1_STEP_0));
    JMP(`CMDEX_int_STEP_0);
ENDIF();

IF(`CMDEX_INT_INTO_INTO_STEP_0 && oflag);
    JMP(`CMDEX_int_STEP_0);
ENDIF();

IF(`CMDEX_INT_INTO_INTO_STEP_0 && ~(oflag));
    `CMDEX_INT_INTO_INTO_STEP_0
ENDIF();
</microcode>

<read>
IF(rd_cmd == `CMD_INT_INTO && rd_cmdex == `CMDEX_INT_INTO_INTO_STEP_0);
    IF(rd_mutex_busy_eflags); SET(rd_waiting); ENDIF();
ENDIF();
</read>

<write>
IF(wr_cmd == `CMD_INT_INTO && wr_cmdex == `CMDEX_INT_INTO_INT_STEP_0);
    SET(wr_not_finished);
    
    SET(wr_int);
    SET(wr_int_soft_int);
    SET(wr_int_soft_int_ib);
    SET(wr_int_vector, wr_decoder[15:8]);
ENDIF();
</write>

<write>
IF(wr_cmd == `CMD_INT_INTO && wr_cmdex == `CMDEX_INT_INTO_INT3_STEP_0);
    SET(wr_not_finished);
    
    SET(wr_int);
    SET(wr_int_soft_int);
    //wr_int_soft_int_ib false
    SET(wr_int_vector, `EXCEPTION_BP);
ENDIF();
</write>

<write>
IF(wr_cmd == `CMD_INT_INTO && wr_cmdex == `CMDEX_INT_INTO_INT1_STEP_0);
    SET(wr_not_finished);
    
    SET(wr_int);
    //wr_int_soft_int false
    //wr_int_soft_int_ib false
    SET(wr_int_vector, `EXCEPTION_DB);
    
    SET(wr_exception_external_set);
ENDIF();
</write>

<write>
IF(wr_cmd == `CMD_INT_INTO && wr_cmdex == `CMDEX_INT_INTO_INTO_STEP_0);
    
    IF(oflag);
        SET(wr_not_finished);
        
        SET(wr_int);
        SET(wr_int_soft_int);
        //wr_int_soft_int_ib false
        SET(wr_int_vector, `EXCEPTION_OF);
    ELSE();
    
        SET(wr_req_reset_micro);
        SET(wr_req_reset_rd);
        SET(wr_req_reset_exe);
    ENDIF();
ENDIF();
</write>



Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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