Line 43... |
Line 43... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.2 2002/01/14 06:18:22 lampret
|
|
// Fixed mem2reg bug in FAST implementation. Updated debug unit to work with new genpc/if.
|
|
//
|
// Revision 1.1 2002/01/03 08:16:15 lampret
|
// Revision 1.1 2002/01/03 08:16:15 lampret
|
// New prefixes for RTL files, prefixed module names. Updated cache controllers and MMUs.
|
// New prefixes for RTL files, prefixed module names. Updated cache controllers and MMUs.
|
//
|
//
|
// Revision 1.10 2001/11/20 18:46:15 simons
|
// Revision 1.10 2001/11/20 18:46:15 simons
|
// Break point bug fixed
|
// Break point bug fixed
|
Line 83... |
Line 86... |
// External i/f to IC
|
// External i/f to IC
|
icpu_adr_o, icpu_cyc_o, icpu_stb_o, icpu_sel_o, icpu_tag_o,
|
icpu_adr_o, icpu_cyc_o, icpu_stb_o, icpu_sel_o, icpu_tag_o,
|
icpu_ack_i, icpu_rty_i, icpu_err_i, icpu_adr_i,
|
icpu_ack_i, icpu_rty_i, icpu_err_i, icpu_adr_i,
|
|
|
// Internal i/f
|
// Internal i/f
|
branch_op, except_type,
|
branch_op, except_type, except_prefix,
|
branch_addrofs, lr_restor, flag, taken, except_start,
|
branch_addrofs, lr_restor, flag, taken, except_start,
|
binsn_addr, epcr, spr_dat_i, spr_pc_we, genpc_refetch,
|
binsn_addr, epcr, spr_dat_i, spr_pc_we, genpc_refetch,
|
genpc_freeze, flushpipe
|
genpc_freeze, flushpipe
|
);
|
);
|
|
|
Line 117... |
Line 120... |
//
|
//
|
// Internal i/f
|
// Internal i/f
|
//
|
//
|
input [`OR1200_BRANCHOP_WIDTH-1:0] branch_op;
|
input [`OR1200_BRANCHOP_WIDTH-1:0] branch_op;
|
input [`OR1200_EXCEPT_WIDTH-1:0] except_type;
|
input [`OR1200_EXCEPT_WIDTH-1:0] except_type;
|
|
input except_prefix;
|
input [31:2] branch_addrofs;
|
input [31:2] branch_addrofs;
|
input [31:0] lr_restor;
|
input [31:0] lr_restor;
|
input flag;
|
input flag;
|
output taken;
|
output taken;
|
input except_start;
|
input except_start;
|
Line 156... |
Line 160... |
|
|
//
|
//
|
// Async calculation of new PC value. This value is used for addressing the IC.
|
// Async calculation of new PC value. This value is used for addressing the IC.
|
//
|
//
|
always @(pcreg or branch_addrofs or binsn_addr or flag or branch_op or except_type
|
always @(pcreg or branch_addrofs or binsn_addr or flag or branch_op or except_type
|
or except_start or lr_restor or epcr or spr_pc_we or spr_dat_i) begin
|
or except_start or lr_restor or epcr or spr_pc_we or spr_dat_i or except_prefix) begin
|
casex ({spr_pc_we, except_start, branch_op}) // synopsys parallel_case
|
casex ({spr_pc_we, except_start, branch_op}) // synopsys parallel_case
|
{2'b00, `OR1200_BRANCHOP_NOP}: begin
|
{2'b00, `OR1200_BRANCHOP_NOP}: begin
|
pc = {pcreg + 'd1, 2'b0};
|
pc = {pcreg + 'd1, 2'b0};
|
taken = 1'b0;
|
taken = 1'b0;
|
end
|
end
|
Line 242... |
Line 246... |
`ifdef OR1200_VERBOSE
|
`ifdef OR1200_VERBOSE
|
// synopsys translate_off
|
// synopsys translate_off
|
$display("Starting exception: %h.", except_type);
|
$display("Starting exception: %h.", except_type);
|
// synopsys translate_on
|
// synopsys translate_on
|
`endif
|
`endif
|
pc = { 20'h0_0000, except_type, 8'h00};
|
pc = { {4{except_prefix}}, 16'h0000, except_type, 8'h00};
|
taken = 1'b1;
|
taken = 1'b1;
|
end
|
end
|
default: begin
|
default: begin
|
`ifdef OR1200_VERBOSE
|
`ifdef OR1200_VERBOSE
|
// synopsys translate_off
|
// synopsys translate_off
|