URL
https://opencores.org/ocsvn/ao486/ao486/trunk
Subversion Repositories ao486
[/] [ao486/] [trunk/] [rtl/] [ao486/] [commands/] [CMD_INT_INTO.txt] - Rev 2
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>