Line 42... |
Line 42... |
//// ////
|
//// ////
|
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: or1200_cpu.v,v $
|
|
// Revision 2.0 2010/06/30 11:00:00 ORSoC
|
|
// Major update:
|
|
// Structure reordered and bugs fixed.
|
|
//
|
|
// Revision 1.16 2005/01/07 09:28:37 andreje
|
|
// flag for l.cmov instruction added
|
|
//
|
// Revision 1.15 2004/05/09 19:49:04 lampret
|
// Revision 1.15 2004/05/09 19:49:04 lampret
|
// Added some l.cust5 custom instructions as example
|
// Added some l.cust5 custom instructions as example
|
//
|
//
|
// Revision 1.14 2004/04/05 08:29:57 lampret
|
// Revision 1.14 2004/04/05 08:29:57 lampret
|
// Merged branch_qmem into main tree.
|
// Merged branch_qmem into main tree.
|
Line 157... |
Line 164... |
icpu_adr_o, icpu_cycstb_o, icpu_sel_o, icpu_tag_o,
|
icpu_adr_o, icpu_cycstb_o, icpu_sel_o, icpu_tag_o,
|
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, id_pc, branch_op,
|
id_void, id_insn, ex_void,
|
spr_dat_npc, rf_dataw,
|
ex_insn, ex_freeze, wb_insn, wb_freeze, id_pc, ex_pc, wb_pc, branch_op,
|
du_stall, du_addr, du_dat_du, du_read, du_write, du_dsr, du_hwbkpt,
|
spr_dat_npc, rf_dataw, ex_flushpipe,
|
du_except, du_dat_cpu,
|
du_stall, du_addr, du_dat_du, du_read, du_write, du_except_stop, du_except_trig,
|
|
du_dsr, du_dmr1, du_hwbkpt, du_hwbkpt_ls_r, du_dat_cpu, du_lsu_store_dat, du_lsu_load_dat,
|
|
abort_mvspr, abort_ex,
|
|
|
// Data interface
|
// Data interface
|
dc_en,
|
dc_en,
|
dcpu_adr_o, dcpu_cycstb_o, dcpu_we_o, dcpu_sel_o, dcpu_tag_o, dcpu_dat_o,
|
dcpu_adr_o, dcpu_cycstb_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,
|
dmmu_en,
|
sb_en, dmmu_en,
|
|
|
|
// SR Interface
|
|
boot_adr_sel_i,
|
|
|
// Interrupt & tick exceptions
|
// Interrupt & tick exceptions
|
sig_int, sig_tick,
|
sig_int, sig_tick,
|
|
|
// SPR interface
|
// SPR interface
|
Line 212... |
Line 224... |
output immu_en;
|
output immu_en;
|
|
|
//
|
//
|
// Debug interface
|
// Debug interface
|
//
|
//
|
|
output id_void;
|
|
output [31:0] id_insn;
|
|
output ex_void;
|
output [31:0] ex_insn;
|
output [31:0] ex_insn;
|
output ex_freeze;
|
output ex_freeze;
|
|
output [31:0] wb_insn;
|
|
output wb_freeze;
|
output [31:0] id_pc;
|
output [31:0] id_pc;
|
|
output [31:0] ex_pc;
|
|
output [31:0] wb_pc;
|
|
output ex_flushpipe;
|
output [`OR1200_BRANCHOP_WIDTH-1:0] branch_op;
|
output [`OR1200_BRANCHOP_WIDTH-1:0] branch_op;
|
|
|
input du_stall;
|
input du_stall;
|
input [dw-1:0] du_addr;
|
input [dw-1:0] du_addr;
|
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;
|
|
input [24:0] du_dmr1;
|
input du_hwbkpt;
|
input du_hwbkpt;
|
output [12:0] du_except;
|
input du_hwbkpt_ls_r;
|
|
output [12:0] du_except_trig;
|
|
output [12:0] du_except_stop;
|
output [dw-1:0] du_dat_cpu;
|
output [dw-1:0] du_dat_cpu;
|
output [dw-1:0] rf_dataw;
|
output [dw-1:0] rf_dataw;
|
|
output [dw-1:0] du_lsu_store_dat;
|
|
output [dw-1:0] du_lsu_load_dat;
|
|
|
//
|
//
|
// Data (DC) interface
|
// Data (DC) interface
|
//
|
//
|
output [31:0] dcpu_adr_o;
|
output [31:0] dcpu_adr_o;
|
Line 247... |
Line 272... |
output dc_en;
|
output dc_en;
|
|
|
//
|
//
|
// Data (DMMU) interface
|
// Data (DMMU) interface
|
//
|
//
|
|
output sb_en;
|
output dmmu_en;
|
output dmmu_en;
|
|
output abort_ex;
|
|
output abort_mvspr;
|
|
|
|
//
|
|
// SR Interface
|
|
//
|
|
input boot_adr_sel_i;
|
|
|
//
|
//
|
// SPR interface
|
// SPR interface
|
//
|
//
|
output supv;
|
output supv;
|
Line 275... |
Line 308... |
|
|
//
|
//
|
// Internal wires
|
// Internal wires
|
//
|
//
|
wire [31:0] if_insn;
|
wire [31:0] if_insn;
|
|
wire saving_if_insn;
|
wire [31:0] if_pc;
|
wire [31:0] if_pc;
|
wire [31:2] lr_sav;
|
|
wire [aw-1:0] rf_addrw;
|
wire [aw-1:0] rf_addrw;
|
wire [aw-1:0] rf_addra;
|
wire [aw-1:0] rf_addra;
|
wire [aw-1:0] rf_addrb;
|
wire [aw-1:0] rf_addrb;
|
wire rf_rda;
|
wire rf_rda;
|
wire rf_rdb;
|
wire rf_rdb;
|
wire [dw-1:0] simm;
|
wire [dw-1:0] id_simm;
|
wire [dw-1:2] branch_addrofs;
|
wire [dw-1:2] id_branch_addrtarget;
|
|
wire [dw-1:2] ex_branch_addrtarget;
|
wire [`OR1200_ALUOP_WIDTH-1:0] alu_op;
|
wire [`OR1200_ALUOP_WIDTH-1:0] alu_op;
|
wire [`OR1200_SHROTOP_WIDTH-1:0] shrot_op;
|
wire [`OR1200_SHROTOP_WIDTH-1:0] shrot_op;
|
wire [`OR1200_COMPOP_WIDTH-1:0] comp_op;
|
wire [`OR1200_COMPOP_WIDTH-1:0] comp_op;
|
|
wire [`OR1200_BRANCHOP_WIDTH-1:0] pre_branch_op;
|
wire [`OR1200_BRANCHOP_WIDTH-1:0] branch_op;
|
wire [`OR1200_BRANCHOP_WIDTH-1:0] branch_op;
|
wire [`OR1200_LSUOP_WIDTH-1:0] lsu_op;
|
wire [`OR1200_LSUOP_WIDTH-1:0] id_lsu_op;
|
wire genpc_freeze;
|
wire genpc_freeze;
|
wire if_freeze;
|
wire if_freeze;
|
wire id_freeze;
|
wire id_freeze;
|
wire ex_freeze;
|
wire ex_freeze;
|
wire wb_freeze;
|
wire wb_freeze;
|
Line 300... |
Line 335... |
wire [`OR1200_SEL_WIDTH-1:0] sel_b;
|
wire [`OR1200_SEL_WIDTH-1:0] sel_b;
|
wire [`OR1200_RFWBOP_WIDTH-1:0] rfwb_op;
|
wire [`OR1200_RFWBOP_WIDTH-1:0] rfwb_op;
|
wire [dw-1:0] rf_dataw;
|
wire [dw-1:0] rf_dataw;
|
wire [dw-1:0] rf_dataa;
|
wire [dw-1:0] rf_dataa;
|
wire [dw-1:0] rf_datab;
|
wire [dw-1:0] rf_datab;
|
|
wire [dw-1:0] muxed_a;
|
wire [dw-1:0] muxed_b;
|
wire [dw-1:0] muxed_b;
|
wire [dw-1:0] wb_forw;
|
wire [dw-1:0] wb_forw;
|
wire wbforw_valid;
|
wire wbforw_valid;
|
wire [dw-1:0] operand_a;
|
wire [dw-1:0] operand_a;
|
wire [dw-1:0] operand_b;
|
wire [dw-1:0] operand_b;
|
wire [dw-1:0] alu_dataout;
|
wire [dw-1:0] alu_dataout;
|
wire [dw-1:0] lsu_dataout;
|
wire [dw-1:0] lsu_dataout;
|
wire [dw-1:0] sprs_dataout;
|
wire [dw-1:0] sprs_dataout;
|
wire [31:0] lsu_addrofs;
|
wire [31:0] ex_simm;
|
wire [`OR1200_MULTICYCLE_WIDTH-1:0] multicycle;
|
wire [`OR1200_MULTICYCLE_WIDTH-1:0] multicycle;
|
wire [`OR1200_EXCEPT_WIDTH-1:0] except_type;
|
wire [`OR1200_EXCEPT_WIDTH-1:0] except_type;
|
wire [4:0] cust5_op;
|
wire [4:0] cust5_op;
|
wire [5:0] cust5_limm;
|
wire [5:0] cust5_limm;
|
wire flushpipe;
|
wire if_flushpipe;
|
|
wire id_flushpipe;
|
|
wire ex_flushpipe;
|
|
wire wb_flushpipe;
|
wire extend_flush;
|
wire extend_flush;
|
wire branch_taken;
|
wire ex_branch_taken;
|
wire flag;
|
wire flag;
|
wire flagforw;
|
wire flagforw;
|
wire flag_we;
|
wire flag_we;
|
|
wire flag_we_alu;
|
wire carry;
|
wire carry;
|
wire cyforw;
|
wire cyforw;
|
wire cy_we;
|
wire cy_we_alu;
|
|
wire cy_we_rf;
|
wire lsu_stall;
|
wire lsu_stall;
|
wire epcr_we;
|
wire epcr_we;
|
wire eear_we;
|
wire eear_we;
|
wire esr_we;
|
wire esr_we;
|
wire pc_we;
|
wire pc_we;
|
Line 333... |
Line 374... |
wire [31:0] eear;
|
wire [31:0] eear;
|
wire [`OR1200_SR_WIDTH-1:0] esr;
|
wire [`OR1200_SR_WIDTH-1:0] esr;
|
wire sr_we;
|
wire sr_we;
|
wire [`OR1200_SR_WIDTH-1:0] to_sr;
|
wire [`OR1200_SR_WIDTH-1:0] to_sr;
|
wire [`OR1200_SR_WIDTH-1:0] sr;
|
wire [`OR1200_SR_WIDTH-1:0] sr;
|
|
wire except_flushpipe;
|
wire except_start;
|
wire except_start;
|
wire except_started;
|
wire except_started;
|
wire [31:0] wb_insn;
|
wire [31:0] wb_insn;
|
wire [15:0] spr_addrimm;
|
|
wire sig_syscall;
|
wire sig_syscall;
|
wire sig_trap;
|
wire sig_trap;
|
wire [31:0] spr_dat_cfgr;
|
wire [31:0] spr_dat_cfgr;
|
wire [31:0] spr_dat_rf;
|
wire [31:0] spr_dat_rf;
|
wire [31:0] spr_dat_npc;
|
wire [31:0] spr_dat_npc;
|
wire [31:0] spr_dat_ppc;
|
wire [31:0] spr_dat_ppc;
|
wire [31:0] spr_dat_mac;
|
wire [31:0] spr_dat_mac;
|
wire force_dslot_fetch;
|
wire force_dslot_fetch;
|
wire no_more_dslot;
|
wire no_more_dslot;
|
wire ex_void;
|
wire ex_void;
|
|
wire ex_spr_read;
|
|
wire ex_spr_write;
|
wire if_stall;
|
wire if_stall;
|
wire id_macrc_op;
|
wire id_macrc_op;
|
wire ex_macrc_op;
|
wire ex_macrc_op;
|
|
wire [`OR1200_MACOP_WIDTH-1:0] id_mac_op;
|
wire [`OR1200_MACOP_WIDTH-1:0] mac_op;
|
wire [`OR1200_MACOP_WIDTH-1:0] mac_op;
|
wire [31:0] mult_mac_result;
|
wire [31:0] mult_mac_result;
|
wire mac_stall;
|
wire mac_stall;
|
|
wire [12:0] except_trig;
|
wire [12:0] except_stop;
|
wire [12:0] except_stop;
|
wire genpc_refetch;
|
wire genpc_refetch;
|
wire rfe;
|
wire rfe;
|
wire lsu_unstall;
|
wire lsu_unstall;
|
wire except_align;
|
wire except_align;
|
Line 366... |
Line 411... |
wire except_itlbmiss;
|
wire except_itlbmiss;
|
wire except_immufault;
|
wire except_immufault;
|
wire except_ibuserr;
|
wire except_ibuserr;
|
wire except_dbuserr;
|
wire except_dbuserr;
|
wire abort_ex;
|
wire abort_ex;
|
|
wire abort_mvspr;
|
|
|
//
|
//
|
// Send exceptions to Debug Unit
|
// Send exceptions to Debug Unit
|
//
|
//
|
assign du_except = except_stop;
|
assign du_except_trig = except_trig;
|
|
assign du_except_stop = except_stop;
|
|
assign du_lsu_store_dat = operand_b;
|
|
assign du_lsu_load_dat = lsu_dataout;
|
|
|
//
|
//
|
// Data cache enable
|
// Data cache enable
|
//
|
//
|
|
`ifdef OR1200_NO_DC
|
|
assign dc_en = 1'b0;
|
|
`else
|
assign dc_en = sr[`OR1200_SR_DCE];
|
assign dc_en = sr[`OR1200_SR_DCE];
|
|
`endif
|
|
|
//
|
//
|
// Instruction cache enable
|
// Instruction cache enable
|
//
|
//
|
|
`ifdef OR1200_NO_IC
|
|
assign ic_en = 1'b0;
|
|
`else
|
assign ic_en = sr[`OR1200_SR_ICE];
|
assign ic_en = sr[`OR1200_SR_ICE];
|
|
`endif
|
|
|
|
//
|
|
// SB enable
|
|
//
|
|
`ifdef OR1200_SB_IMPLEMENTED
|
|
//assign sb_en = sr[`OR1200_SR_SBE]; // SBE not defined -- jb
|
|
`else
|
|
assign sb_en = 1'b0;
|
|
`endif
|
|
|
//
|
//
|
// DMMU enable
|
// DMMU enable
|
//
|
//
|
|
`ifdef OR1200_NO_DMMU
|
|
assign dmmu_en = 1'b0;
|
|
`else
|
assign dmmu_en = sr[`OR1200_SR_DME];
|
assign dmmu_en = sr[`OR1200_SR_DME];
|
|
`endif
|
|
|
//
|
//
|
// IMMU enable
|
// IMMU enable
|
//
|
//
|
assign immu_en = sr[`OR1200_SR_IME];
|
`ifdef OR1200_NO_IMMU
|
|
assign immu_en = 1'b0;
|
|
`else
|
|
assign immu_en = sr[`OR1200_SR_IME] & ~except_started;
|
|
`endif
|
|
|
//
|
//
|
// SUPV bit
|
// SUPV bit
|
//
|
//
|
assign supv = sr[`OR1200_SR_SM];
|
assign supv = sr[`OR1200_SR_SM];
|
|
|
//
|
//
|
|
// FLAG write enable
|
|
//
|
|
assign flag_we = flag_we_alu && ~abort_mvspr;
|
|
|
|
//
|
// Instantiation of instruction fetch block
|
// Instantiation of instruction fetch block
|
//
|
//
|
or1200_genpc or1200_genpc(
|
or1200_genpc or1200_genpc(
|
.clk(clk),
|
.clk(clk),
|
.rst(rst),
|
.rst(rst),
|
Line 410... |
Line 489... |
.icpu_sel_o(icpu_sel_o),
|
.icpu_sel_o(icpu_sel_o),
|
.icpu_tag_o(icpu_tag_o),
|
.icpu_tag_o(icpu_tag_o),
|
.icpu_rty_i(icpu_rty_i),
|
.icpu_rty_i(icpu_rty_i),
|
.icpu_adr_i(icpu_adr_i),
|
.icpu_adr_i(icpu_adr_i),
|
|
|
|
.pre_branch_op(pre_branch_op),
|
.branch_op(branch_op),
|
.branch_op(branch_op),
|
.except_type(except_type),
|
.except_type(except_type),
|
.except_start(except_start),
|
.except_start(except_start),
|
.except_prefix(sr[`OR1200_SR_EPH]),
|
.except_prefix(sr[`OR1200_SR_EPH]),
|
.branch_addrofs(branch_addrofs),
|
.id_branch_addrtarget(id_branch_addrtarget),
|
.lr_restor(operand_b),
|
.ex_branch_addrtarget(ex_branch_addrtarget),
|
|
.muxed_b(muxed_b),
|
|
.operand_b(operand_b),
|
.flag(flag),
|
.flag(flag),
|
.taken(branch_taken),
|
.flagforw(flagforw),
|
.binsn_addr(lr_sav),
|
.ex_branch_taken(ex_branch_taken),
|
.epcr(epcr),
|
.epcr(epcr),
|
.spr_dat_i(spr_dat_cpu),
|
.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),
|
.genpc_stop_prefetch(1'b0),
|
|
.no_more_dslot(no_more_dslot)
|
.no_more_dslot(no_more_dslot)
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of instruction fetch block
|
// Instantiation of instruction fetch block
|
Line 443... |
Line 524... |
.icpu_tag_i(icpu_tag_i),
|
.icpu_tag_i(icpu_tag_i),
|
|
|
.if_freeze(if_freeze),
|
.if_freeze(if_freeze),
|
.if_insn(if_insn),
|
.if_insn(if_insn),
|
.if_pc(if_pc),
|
.if_pc(if_pc),
|
.flushpipe(flushpipe),
|
.saving_if_insn(saving_if_insn),
|
|
.if_flushpipe(if_flushpipe),
|
.if_stall(if_stall),
|
.if_stall(if_stall),
|
.no_more_dslot(no_more_dslot),
|
.no_more_dslot(no_more_dslot),
|
.genpc_refetch(genpc_refetch),
|
.genpc_refetch(genpc_refetch),
|
.rfe(rfe),
|
.rfe(rfe),
|
.except_itlbmiss(except_itlbmiss),
|
.except_itlbmiss(except_itlbmiss),
|
Line 462... |
Line 544... |
.clk(clk),
|
.clk(clk),
|
.rst(rst),
|
.rst(rst),
|
.id_freeze(id_freeze),
|
.id_freeze(id_freeze),
|
.ex_freeze(ex_freeze),
|
.ex_freeze(ex_freeze),
|
.wb_freeze(wb_freeze),
|
.wb_freeze(wb_freeze),
|
.flushpipe(flushpipe),
|
.if_flushpipe(if_flushpipe),
|
|
.id_flushpipe(id_flushpipe),
|
|
.ex_flushpipe(ex_flushpipe),
|
|
.wb_flushpipe(wb_flushpipe),
|
|
.extend_flush(extend_flush),
|
|
.except_flushpipe(except_flushpipe),
|
|
.abort_mvspr(abort_mvspr),
|
.if_insn(if_insn),
|
.if_insn(if_insn),
|
|
.id_insn(id_insn),
|
.ex_insn(ex_insn),
|
.ex_insn(ex_insn),
|
.branch_op(branch_op),
|
.id_branch_op(pre_branch_op),
|
.branch_taken(branch_taken),
|
.ex_branch_op(branch_op),
|
|
.ex_branch_taken(ex_branch_taken),
|
.rf_addra(rf_addra),
|
.rf_addra(rf_addra),
|
.rf_addrb(rf_addrb),
|
.rf_addrb(rf_addrb),
|
.rf_rda(rf_rda),
|
.rf_rda(rf_rda),
|
.rf_rdb(rf_rdb),
|
.rf_rdb(rf_rdb),
|
.alu_op(alu_op),
|
.alu_op(alu_op),
|
.mac_op(mac_op),
|
.mac_op(mac_op),
|
.shrot_op(shrot_op),
|
.shrot_op(shrot_op),
|
.comp_op(comp_op),
|
.comp_op(comp_op),
|
.rf_addrw(rf_addrw),
|
.rf_addrw(rf_addrw),
|
.rfwb_op(rfwb_op),
|
.rfwb_op(rfwb_op),
|
|
.pc_we(pc_we),
|
.wb_insn(wb_insn),
|
.wb_insn(wb_insn),
|
.simm(simm),
|
.id_simm(id_simm),
|
.branch_addrofs(branch_addrofs),
|
.id_branch_addrtarget(id_branch_addrtarget),
|
.lsu_addrofs(lsu_addrofs),
|
.ex_branch_addrtarget(ex_branch_addrtarget),
|
|
.ex_simm(ex_simm),
|
.sel_a(sel_a),
|
.sel_a(sel_a),
|
.sel_b(sel_b),
|
.sel_b(sel_b),
|
.lsu_op(lsu_op),
|
.id_lsu_op(id_lsu_op),
|
.cust5_op(cust5_op),
|
.cust5_op(cust5_op),
|
.cust5_limm(cust5_limm),
|
.cust5_limm(cust5_limm),
|
|
.id_pc(id_pc),
|
|
.ex_pc(ex_pc),
|
.multicycle(multicycle),
|
.multicycle(multicycle),
|
.spr_addrimm(spr_addrimm),
|
|
.wbforw_valid(wbforw_valid),
|
.wbforw_valid(wbforw_valid),
|
.sig_syscall(sig_syscall),
|
.sig_syscall(sig_syscall),
|
.sig_trap(sig_trap),
|
.sig_trap(sig_trap),
|
.force_dslot_fetch(force_dslot_fetch),
|
.force_dslot_fetch(force_dslot_fetch),
|
.no_more_dslot(no_more_dslot),
|
.no_more_dslot(no_more_dslot),
|
|
.id_void(id_void),
|
.ex_void(ex_void),
|
.ex_void(ex_void),
|
|
.ex_spr_read(ex_spr_read),
|
|
.ex_spr_write(ex_spr_write),
|
|
.id_mac_op(id_mac_op),
|
.id_macrc_op(id_macrc_op),
|
.id_macrc_op(id_macrc_op),
|
.ex_macrc_op(ex_macrc_op),
|
.ex_macrc_op(ex_macrc_op),
|
.rfe(rfe),
|
.rfe(rfe),
|
.du_hwbkpt(du_hwbkpt),
|
.du_hwbkpt(du_hwbkpt),
|
.except_illegal(except_illegal)
|
.except_illegal(except_illegal)
|
Line 507... |
Line 604... |
// Instantiation of register file
|
// Instantiation of register file
|
//
|
//
|
or1200_rf or1200_rf(
|
or1200_rf or1200_rf(
|
.clk(clk),
|
.clk(clk),
|
.rst(rst),
|
.rst(rst),
|
|
.cy_we_i(cy_we_alu),
|
|
.cy_we_o(cy_we_rf),
|
.supv(sr[`OR1200_SR_SM]),
|
.supv(sr[`OR1200_SR_SM]),
|
.wb_freeze(wb_freeze),
|
.wb_freeze(wb_freeze),
|
.addrw(rf_addrw),
|
.addrw(rf_addrw),
|
.dataw(rf_dataw),
|
.dataw(rf_dataw),
|
.id_freeze(id_freeze),
|
.id_freeze(id_freeze),
|
.we(rfwb_op[0]),
|
.we(rfwb_op[0]),
|
.flushpipe(flushpipe),
|
.flushpipe(wb_flushpipe),
|
.addra(rf_addra),
|
.addra(rf_addra),
|
.rda(rf_rda),
|
.rda(rf_rda),
|
.dataa(rf_dataa),
|
.dataa(rf_dataa),
|
.addrb(rf_addrb),
|
.addrb(rf_addrb),
|
.rdb(rf_rdb),
|
.rdb(rf_rdb),
|
Line 539... |
Line 638... |
.ex_freeze(ex_freeze),
|
.ex_freeze(ex_freeze),
|
.rf_dataa(rf_dataa),
|
.rf_dataa(rf_dataa),
|
.rf_datab(rf_datab),
|
.rf_datab(rf_datab),
|
.ex_forw(rf_dataw),
|
.ex_forw(rf_dataw),
|
.wb_forw(wb_forw),
|
.wb_forw(wb_forw),
|
.simm(simm),
|
.simm(id_simm),
|
.sel_a(sel_a),
|
.sel_a(sel_a),
|
.sel_b(sel_b),
|
.sel_b(sel_b),
|
.operand_a(operand_a),
|
.operand_a(operand_a),
|
.operand_b(operand_b),
|
.operand_b(operand_b),
|
|
.muxed_a(muxed_a),
|
.muxed_b(muxed_b)
|
.muxed_b(muxed_b)
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of CPU's ALU
|
// Instantiation of CPU's ALU
|
Line 562... |
Line 662... |
.comp_op(comp_op),
|
.comp_op(comp_op),
|
.cust5_op(cust5_op),
|
.cust5_op(cust5_op),
|
.cust5_limm(cust5_limm),
|
.cust5_limm(cust5_limm),
|
.result(alu_dataout),
|
.result(alu_dataout),
|
.flagforw(flagforw),
|
.flagforw(flagforw),
|
.flag_we(flag_we),
|
.flag_we(flag_we_alu),
|
.cyforw(cyforw),
|
.cyforw(cyforw),
|
.cy_we(cy_we),
|
.cy_we(cy_we_alu),
|
.flag(flag),
|
.flag(flag),
|
.carry(carry)
|
.carry(carry)
|
);
|
);
|
|
|
//
|
//
|
Line 598... |
Line 698... |
//
|
//
|
or1200_sprs or1200_sprs(
|
or1200_sprs or1200_sprs(
|
.clk(clk),
|
.clk(clk),
|
.rst(rst),
|
.rst(rst),
|
.addrbase(operand_a),
|
.addrbase(operand_a),
|
.addrofs(spr_addrimm),
|
.addrofs(ex_simm[15:0]),
|
.dat_i(operand_b),
|
.dat_i(operand_b),
|
.alu_op(alu_op),
|
.ex_spr_read(ex_spr_read),
|
|
.ex_spr_write(ex_spr_write),
|
.flagforw(flagforw),
|
.flagforw(flagforw),
|
.flag_we(flag_we),
|
.flag_we(flag_we),
|
.flag(flag),
|
.flag(flag),
|
.cyforw(cyforw),
|
.cyforw(cyforw),
|
.cy_we(cy_we),
|
.cy_we(cy_we_rf),
|
.carry(carry),
|
.carry(carry),
|
.to_wbmux(sprs_dataout),
|
.to_wbmux(sprs_dataout),
|
|
|
.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),
|
.du_dat_cpu(du_dat_cpu),
|
|
.boot_adr_sel_i(boot_adr_sel_i),
|
.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),
|
.spr_dat_cfgr(spr_dat_cfgr),
|
.spr_dat_cfgr(spr_dat_cfgr),
|
Line 650... |
Line 751... |
|
|
//
|
//
|
// Instantiation of load/store unit
|
// Instantiation of load/store unit
|
//
|
//
|
or1200_lsu or1200_lsu(
|
or1200_lsu or1200_lsu(
|
.addrbase(operand_a),
|
.clk(clk),
|
.addrofs(lsu_addrofs),
|
.rst(rst),
|
.lsu_op(lsu_op),
|
.id_addrbase(muxed_a),
|
|
.id_addrofs(id_simm),
|
|
.ex_addrbase(operand_a),
|
|
.ex_addrofs(ex_simm),
|
|
.id_lsu_op(id_lsu_op),
|
.lsu_datain(operand_b),
|
.lsu_datain(operand_b),
|
.lsu_dataout(lsu_dataout),
|
.lsu_dataout(lsu_dataout),
|
.lsu_stall(lsu_stall),
|
.lsu_stall(lsu_stall),
|
.lsu_unstall(lsu_unstall),
|
.lsu_unstall(lsu_unstall),
|
.du_stall(du_stall),
|
.du_stall(du_stall),
|
.except_align(except_align),
|
.except_align(except_align),
|
.except_dtlbmiss(except_dtlbmiss),
|
.except_dtlbmiss(except_dtlbmiss),
|
.except_dmmufault(except_dmmufault),
|
.except_dmmufault(except_dmmufault),
|
.except_dbuserr(except_dbuserr),
|
.except_dbuserr(except_dbuserr),
|
|
.id_freeze(id_freeze),
|
|
.ex_freeze(ex_freeze),
|
|
.flushpipe(ex_flushpipe),
|
|
|
.dcpu_adr_o(dcpu_adr_o),
|
.dcpu_adr_o(dcpu_adr_o),
|
.dcpu_cycstb_o(dcpu_cycstb_o),
|
.dcpu_cycstb_o(dcpu_cycstb_o),
|
.dcpu_we_o(dcpu_we_o),
|
.dcpu_we_o(dcpu_we_o),
|
.dcpu_sel_o(dcpu_sel_o),
|
.dcpu_sel_o(dcpu_sel_o),
|
Line 687... |
Line 795... |
.wb_freeze(wb_freeze),
|
.wb_freeze(wb_freeze),
|
.rfwb_op(rfwb_op),
|
.rfwb_op(rfwb_op),
|
.muxin_a(alu_dataout),
|
.muxin_a(alu_dataout),
|
.muxin_b(lsu_dataout),
|
.muxin_b(lsu_dataout),
|
.muxin_c(sprs_dataout),
|
.muxin_c(sprs_dataout),
|
.muxin_d({lr_sav, 2'b0}),
|
.muxin_d(ex_pc),
|
.muxout(rf_dataw),
|
.muxout(rf_dataw),
|
.muxreg(wb_forw),
|
.muxreg(wb_forw),
|
.muxreg_valid(wbforw_valid)
|
.muxreg_valid(wbforw_valid)
|
);
|
);
|
|
|
Line 700... |
Line 808... |
//
|
//
|
or1200_freeze or1200_freeze(
|
or1200_freeze or1200_freeze(
|
.clk(clk),
|
.clk(clk),
|
.rst(rst),
|
.rst(rst),
|
.multicycle(multicycle),
|
.multicycle(multicycle),
|
.flushpipe(flushpipe),
|
.flushpipe(wb_flushpipe),
|
.extend_flush(extend_flush),
|
.extend_flush(extend_flush),
|
.lsu_stall(lsu_stall),
|
.lsu_stall(lsu_stall),
|
.if_stall(if_stall),
|
.if_stall(if_stall),
|
.lsu_unstall(lsu_unstall),
|
.lsu_unstall(lsu_unstall),
|
.force_dslot_fetch(force_dslot_fetch),
|
.force_dslot_fetch(force_dslot_fetch),
|
.abort_ex(abort_ex),
|
.abort_ex(abort_ex),
|
.du_stall(du_stall),
|
.du_stall(du_stall),
|
.mac_stall(mac_stall),
|
.mac_stall(mac_stall),
|
|
.saving_if_insn(saving_if_insn),
|
.genpc_freeze(genpc_freeze),
|
.genpc_freeze(genpc_freeze),
|
.if_freeze(if_freeze),
|
.if_freeze(if_freeze),
|
.id_freeze(id_freeze),
|
.id_freeze(id_freeze),
|
.ex_freeze(ex_freeze),
|
.ex_freeze(ex_freeze),
|
.wb_freeze(wb_freeze),
|
.wb_freeze(wb_freeze),
|
Line 737... |
Line 846... |
.sig_syscall(sig_syscall),
|
.sig_syscall(sig_syscall),
|
.sig_trap(sig_trap),
|
.sig_trap(sig_trap),
|
.sig_itlbmiss(except_itlbmiss),
|
.sig_itlbmiss(except_itlbmiss),
|
.sig_immufault(except_immufault),
|
.sig_immufault(except_immufault),
|
.sig_tick(sig_tick),
|
.sig_tick(sig_tick),
|
.branch_taken(branch_taken),
|
.ex_branch_taken(ex_branch_taken),
|
.icpu_ack_i(icpu_ack_i),
|
.icpu_ack_i(icpu_ack_i),
|
.icpu_err_i(icpu_err_i),
|
.icpu_err_i(icpu_err_i),
|
.dcpu_ack_i(dcpu_ack_i),
|
.dcpu_ack_i(dcpu_ack_i),
|
.dcpu_err_i(dcpu_err_i),
|
.dcpu_err_i(dcpu_err_i),
|
.genpc_freeze(genpc_freeze),
|
.genpc_freeze(genpc_freeze),
|
Line 749... |
Line 858... |
.ex_freeze(ex_freeze),
|
.ex_freeze(ex_freeze),
|
.wb_freeze(wb_freeze),
|
.wb_freeze(wb_freeze),
|
.if_stall(if_stall),
|
.if_stall(if_stall),
|
.if_pc(if_pc),
|
.if_pc(if_pc),
|
.id_pc(id_pc),
|
.id_pc(id_pc),
|
.lr_sav(lr_sav),
|
.ex_pc(ex_pc),
|
.flushpipe(flushpipe),
|
.wb_pc(wb_pc),
|
|
.id_flushpipe(id_flushpipe),
|
|
.ex_flushpipe(ex_flushpipe),
|
.extend_flush(extend_flush),
|
.extend_flush(extend_flush),
|
|
.except_flushpipe(except_flushpipe),
|
|
.abort_mvspr(abort_mvspr),
|
.except_type(except_type),
|
.except_type(except_type),
|
.except_start(except_start),
|
.except_start(except_start),
|
.except_started(except_started),
|
.except_started(except_started),
|
.except_stop(except_stop),
|
.except_stop(except_stop),
|
|
.except_trig(except_trig),
|
.ex_void(ex_void),
|
.ex_void(ex_void),
|
.spr_dat_ppc(spr_dat_ppc),
|
.spr_dat_ppc(spr_dat_ppc),
|
.spr_dat_npc(spr_dat_npc),
|
.spr_dat_npc(spr_dat_npc),
|
|
|
.datain(operand_b),
|
.datain(spr_dat_cpu),
|
|
.branch_op(branch_op),
|
.du_dsr(du_dsr),
|
.du_dsr(du_dsr),
|
|
.du_dmr1(du_dmr1),
|
|
.du_hwbkpt(du_hwbkpt),
|
|
.du_hwbkpt_ls_r(du_hwbkpt_ls_r),
|
.epcr_we(epcr_we),
|
.epcr_we(epcr_we),
|
.eear_we(eear_we),
|
.eear_we(eear_we),
|
.esr_we(esr_we),
|
.esr_we(esr_we),
|
.pc_we(pc_we),
|
.pc_we(pc_we),
|
.epcr(epcr),
|
.epcr(epcr),
|