Line 42... |
Line 42... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.5 2002/01/18 07:56:00 lampret
|
|
// No more low/high priority interrupts (PICPR removed). Added tick timer exception. Added exception prefix (SR[EPH]). Fixed single-step bug whenreading NPC.
|
|
//
|
// Revision 1.4 2002/01/14 21:11:50 lampret
|
// Revision 1.4 2002/01/14 21:11:50 lampret
|
// Changed alignment exception EPCR. Not tested yet.
|
// Changed alignment exception EPCR. Not tested yet.
|
//
|
//
|
// Revision 1.3 2002/01/14 19:09:57 lampret
|
// Revision 1.3 2002/01/14 19:09:57 lampret
|
// Fixed order of syscall and range exceptions.
|
// Fixed order of syscall and range exceptions.
|
Line 118... |
Line 121... |
// Internal i/f
|
// Internal i/f
|
sig_ibuserr, sig_dbuserr, sig_illegal, sig_align, sig_range, sig_dtlbmiss, sig_dmmufault,
|
sig_ibuserr, sig_dbuserr, sig_illegal, sig_align, sig_range, sig_dtlbmiss, sig_dmmufault,
|
sig_int, sig_syscall, sig_trap, sig_itlbmiss, sig_immufault, sig_tick,
|
sig_int, sig_syscall, sig_trap, sig_itlbmiss, sig_immufault, sig_tick,
|
branch_taken, id_freeze, ex_freeze, wb_freeze, if_stall,
|
branch_taken, id_freeze, ex_freeze, wb_freeze, if_stall,
|
if_pc, lr_sav, flushpipe, extend_flush, except_type, except_start,
|
if_pc, lr_sav, flushpipe, extend_flush, except_type, except_start,
|
except_started, except_stop, has_dslot,
|
except_started, except_stop, ex_void,
|
spr_dat_ppc, spr_dat_npc, datain, du_dsr, epcr_we, eear_we, esr_we, pc_we, epcr, eear,
|
spr_dat_ppc, spr_dat_npc, datain, du_dsr, epcr_we, eear_we, esr_we, pc_we, epcr, eear,
|
esr, sr, lsu_addr
|
esr, sr, lsu_addr
|
);
|
);
|
|
|
//
|
//
|
Line 165... |
Line 168... |
output extend_flush;
|
output extend_flush;
|
output [`OR1200_EXCEPT_WIDTH-1:0] except_type;
|
output [`OR1200_EXCEPT_WIDTH-1:0] except_type;
|
output except_start;
|
output except_start;
|
output except_started;
|
output except_started;
|
output [12:0] except_stop;
|
output [12:0] except_stop;
|
input has_dslot;
|
input ex_void;
|
output [31:0] spr_dat_ppc;
|
output [31:0] spr_dat_ppc;
|
output [31:0] spr_dat_npc;
|
output [31:0] spr_dat_npc;
|
|
|
//
|
//
|
// Internal regs and wires
|
// Internal regs and wires
|
Line 201... |
Line 204... |
// Simple combinatorial logic
|
// Simple combinatorial logic
|
//
|
//
|
assign except_started = extend_flush & except_start;
|
assign except_started = extend_flush & except_start;
|
assign lr_sav = ex_pc[31:2];
|
assign lr_sav = ex_pc[31:2];
|
assign spr_dat_ppc = wb_pc;
|
assign spr_dat_ppc = wb_pc;
|
assign spr_dat_npc = has_dslot ? ex_pc : id_pc;
|
assign spr_dat_npc = ex_void ? id_pc : ex_pc;
|
//assign except_start = (except_type != `OR1200_EXCEPT_NONE); // damjan
|
//assign except_start = (except_type != `OR1200_EXCEPT_NONE); // damjan
|
assign except_start = (except_type != `OR1200_EXCEPT_NONE) & extend_flush;
|
assign except_start = (except_type != `OR1200_EXCEPT_NONE) & extend_flush;
|
assign int_pending = sig_int & sr[`OR1200_SR_IEE] & delayed_iee[2] & ~ex_freeze & ~branch_taken & ~ex_dslot;
|
assign int_pending = sig_int & sr[`OR1200_SR_IEE] & delayed_iee[2] & ~ex_freeze & ~branch_taken & ~ex_dslot;
|
assign tick_pending = sig_tick & sr[`OR1200_SR_TEE] & delayed_tee[2] & ~ex_freeze & ~branch_taken & ~ex_dslot;
|
assign tick_pending = sig_tick & sr[`OR1200_SR_TEE] & delayed_tee[2] & ~ex_freeze & ~branch_taken & ~ex_dslot;
|
|
|