Line 43... |
Line 43... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.5 2002/01/28 01:15:59 lampret
|
|
// Changed 'void' nop-ops instead of insn[0] to use insn[16]. Debug unit stalls the tick timer. Prepared new flag generation for add and and insns. Blocked DC/IC while they are turned off. Fixed I/D MMU SPRs layout except WAYs. TODO: smart IC invalidate, l.j 2 and TLB ways.
|
|
//
|
// Revision 1.4 2002/01/18 14:21:43 lampret
|
// Revision 1.4 2002/01/18 14:21:43 lampret
|
// Fixed 'the NPC single-step fix'.
|
// Fixed 'the NPC single-step fix'.
|
//
|
//
|
// Revision 1.3 2002/01/18 07:56:00 lampret
|
// Revision 1.3 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.
|
// No more low/high priority interrupts (PICPR removed). Added tick timer exception. Added exception prefix (SR[EPH]). Fixed single-step bug whenreading NPC.
|
Line 122... |
Line 125... |
icpu_dat_i, icpu_ack_i, icpu_rty_i, icpu_err_i, icpu_adr_i, icpu_tag_i,
|
icpu_dat_i, icpu_ack_i, icpu_rty_i, icpu_err_i, icpu_adr_i, icpu_tag_i,
|
immu_en,
|
immu_en,
|
|
|
// Debug unit
|
// Debug unit
|
ex_insn, ex_freeze, branch_op,
|
ex_insn, ex_freeze, branch_op,
|
du_stall, du_addr, du_dat_du, du_read, du_write, du_dsr, du_except,
|
du_stall, du_addr, du_dat_du, du_read, du_write, du_dsr, du_except, du_dat_cpu,
|
|
|
// Data interface
|
// Data interface
|
dc_en,
|
dc_en,
|
dcpu_adr_o, dcpu_cyc_o, dcpu_stb_o, dcpu_we_o, dcpu_sel_o, dcpu_tag_o, dcpu_dat_o,
|
dcpu_adr_o, dcpu_cyc_o, dcpu_stb_o, dcpu_we_o, dcpu_sel_o, dcpu_tag_o, dcpu_dat_o,
|
dcpu_dat_i, dcpu_ack_i, dcpu_rty_i, dcpu_err_i, dcpu_tag_i,
|
dcpu_dat_i, dcpu_ack_i, dcpu_rty_i, dcpu_err_i, dcpu_tag_i,
|
Line 134... |
Line 137... |
|
|
// Interrupt & tick exceptions
|
// Interrupt & tick exceptions
|
sig_int, sig_tick,
|
sig_int, sig_tick,
|
|
|
// SPR interface
|
// SPR interface
|
supv, spr_addr, spr_dataout, spr_dat_pic, spr_dat_tt, spr_dat_pm,
|
supv, spr_addr, spr_dat_cpu, spr_dat_pic, spr_dat_tt, spr_dat_pm,
|
spr_dat_dmmu, spr_dat_immu, spr_dat_du, spr_cs, spr_we
|
spr_dat_dmmu, spr_dat_immu, spr_dat_du, spr_cs, spr_we
|
);
|
);
|
|
|
parameter dw = `OR1200_OPERAND_WIDTH;
|
parameter dw = `OR1200_OPERAND_WIDTH;
|
parameter aw = `OR1200_REGFILE_ADDR_WIDTH;
|
parameter aw = `OR1200_REGFILE_ADDR_WIDTH;
|
Line 186... |
Line 189... |
input [dw-1:0] du_dat_du;
|
input [dw-1:0] du_dat_du;
|
input du_read;
|
input du_read;
|
input du_write;
|
input du_write;
|
input [`OR1200_DU_DSR_WIDTH-1:0] du_dsr;
|
input [`OR1200_DU_DSR_WIDTH-1:0] du_dsr;
|
output [12:0] du_except;
|
output [12:0] du_except;
|
|
output [dw-1:0] du_dat_cpu;
|
|
|
//
|
//
|
// Data (DC) interface
|
// Data (DC) interface
|
//
|
//
|
output [31:0] dcpu_adr_o;
|
output [31:0] dcpu_adr_o;
|
Line 220... |
Line 224... |
input [dw-1:0] spr_dat_pm;
|
input [dw-1:0] spr_dat_pm;
|
input [dw-1:0] spr_dat_dmmu;
|
input [dw-1:0] spr_dat_dmmu;
|
input [dw-1:0] spr_dat_immu;
|
input [dw-1:0] spr_dat_immu;
|
input [dw-1:0] spr_dat_du;
|
input [dw-1:0] spr_dat_du;
|
output [dw-1:0] spr_addr;
|
output [dw-1:0] spr_addr;
|
output [dw-1:0] spr_dataout;
|
output [dw-1:0] spr_dat_cpu;
|
output [31:0] spr_cs;
|
output [31:0] spr_cs;
|
output spr_we;
|
output spr_we;
|
|
|
//
|
//
|
// Interrupt exceptions
|
// Interrupt exceptions
|
Line 380... |
Line 384... |
.lr_restor(operand_b),
|
.lr_restor(operand_b),
|
.flag(flag),
|
.flag(flag),
|
.taken(branch_taken),
|
.taken(branch_taken),
|
.binsn_addr(lr_sav),
|
.binsn_addr(lr_sav),
|
.epcr(epcr),
|
.epcr(epcr),
|
.spr_dat_i(spr_dataout),
|
.spr_dat_i(spr_dat_cpu),
|
.spr_pc_we(pc_we),
|
.spr_pc_we(pc_we),
|
.genpc_refetch(genpc_refetch),
|
.genpc_refetch(genpc_refetch),
|
.genpc_freeze(genpc_freeze),
|
.genpc_freeze(genpc_freeze),
|
.flushpipe(flushpipe),
|
.flushpipe(flushpipe),
|
.no_more_dslot(no_more_dslot)
|
.no_more_dslot(no_more_dslot)
|
Line 482... |
Line 486... |
.rdb(rf_rdb),
|
.rdb(rf_rdb),
|
.datab(rf_datab),
|
.datab(rf_datab),
|
.spr_cs(spr_cs[`OR1200_SPR_GROUP_SYS]),
|
.spr_cs(spr_cs[`OR1200_SPR_GROUP_SYS]),
|
.spr_write(spr_we),
|
.spr_write(spr_we),
|
.spr_addr(spr_addr),
|
.spr_addr(spr_addr),
|
.spr_dat_i(spr_dataout),
|
.spr_dat_i(spr_dat_cpu),
|
.spr_dat_o(spr_dat_rf)
|
.spr_dat_o(spr_dat_rf)
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of operand muxes
|
// Instantiation of operand muxes
|
Line 540... |
Line 544... |
.result(mult_mac_result),
|
.result(mult_mac_result),
|
.mac_stall_r(mac_stall),
|
.mac_stall_r(mac_stall),
|
.spr_cs(spr_cs[`OR1200_SPR_GROUP_MAC]),
|
.spr_cs(spr_cs[`OR1200_SPR_GROUP_MAC]),
|
.spr_write(spr_we),
|
.spr_write(spr_we),
|
.spr_addr(spr_addr),
|
.spr_addr(spr_addr),
|
.spr_dat_i(spr_dataout),
|
.spr_dat_i(spr_dat_cpu),
|
.spr_dat_o(spr_dat_mac)
|
.spr_dat_o(spr_dat_mac)
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of CPU's SPRS block
|
// Instantiation of CPU's SPRS block
|
Line 563... |
Line 567... |
|
|
.du_addr(du_addr),
|
.du_addr(du_addr),
|
.du_dat_du(du_dat_du),
|
.du_dat_du(du_dat_du),
|
.du_read(du_read),
|
.du_read(du_read),
|
.du_write(du_write),
|
.du_write(du_write),
|
|
.du_dat_cpu(du_dat_cpu),
|
|
|
.spr_addr(spr_addr),
|
.spr_addr(spr_addr),
|
.spr_dat_pic(spr_dat_pic),
|
.spr_dat_pic(spr_dat_pic),
|
.spr_dat_tt(spr_dat_tt),
|
.spr_dat_tt(spr_dat_tt),
|
.spr_dat_pm(spr_dat_pm),
|
.spr_dat_pm(spr_dat_pm),
|
Line 576... |
Line 581... |
.spr_dat_ppc(spr_dat_ppc),
|
.spr_dat_ppc(spr_dat_ppc),
|
.spr_dat_mac(spr_dat_mac),
|
.spr_dat_mac(spr_dat_mac),
|
.spr_dat_dmmu(spr_dat_dmmu),
|
.spr_dat_dmmu(spr_dat_dmmu),
|
.spr_dat_immu(spr_dat_immu),
|
.spr_dat_immu(spr_dat_immu),
|
.spr_dat_du(spr_dat_du),
|
.spr_dat_du(spr_dat_du),
|
.spr_dataout(spr_dataout),
|
.spr_dat_o(spr_dat_cpu),
|
.spr_cs(spr_cs),
|
.spr_cs(spr_cs),
|
.spr_we(spr_we),
|
.spr_we(spr_we),
|
|
|
.epcr_we(epcr_we),
|
.epcr_we(epcr_we),
|
.eear_we(eear_we),
|
.eear_we(eear_we),
|