Line 42... |
Line 42... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.4 2002/02/01 19:56:55 lampret
|
|
// Fixed combinational loops.
|
|
//
|
// Revision 1.3 2002/01/28 01:16:00 lampret
|
// Revision 1.3 2002/01/28 01:16:00 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.
|
// 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.2 2002/01/18 07:56:00 lampret
|
// Revision 1.2 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 245... |
Line 248... |
// DMMU and DC
|
// DMMU and DC
|
//
|
//
|
wire dcdmmu_err_dc;
|
wire dcdmmu_err_dc;
|
wire [3:0] dcdmmu_tag_dc;
|
wire [3:0] dcdmmu_tag_dc;
|
wire [aw-1:0] dcdmmu_adr_dmmu;
|
wire [aw-1:0] dcdmmu_adr_dmmu;
|
wire dcdmmu_cyc_dmmu;
|
wire dcdmmu_cycstb_dmmu;
|
wire dcdmmu_stb_dmmu;
|
|
wire dcdmmu_ci_dmmu;
|
wire dcdmmu_ci_dmmu;
|
|
|
//
|
//
|
// CPU and data memory subsystem
|
// CPU and data memory subsystem
|
//
|
//
|
Line 275... |
Line 277... |
//
|
//
|
// CPU and insn memory subsystem
|
// CPU and insn memory subsystem
|
//
|
//
|
wire ic_en;
|
wire ic_en;
|
wire [31:0] icpu_adr_cpu;
|
wire [31:0] icpu_adr_cpu;
|
wire icpu_cyc_cpu;
|
wire icpu_cycstb_cpu;
|
wire icpu_stb_cpu;
|
|
wire icpu_we_cpu;
|
wire icpu_we_cpu;
|
wire [3:0] icpu_sel_cpu;
|
wire [3:0] icpu_sel_cpu;
|
wire [3:0] icpu_tag_cpu;
|
wire [3:0] icpu_tag_cpu;
|
wire [31:0] icpu_dat_ic;
|
wire [31:0] icpu_dat_ic;
|
wire icpu_ack_ic;
|
wire icpu_ack_ic;
|
Line 293... |
Line 294... |
//
|
//
|
wire [aw-1:0] icimmu_adr_immu;
|
wire [aw-1:0] icimmu_adr_immu;
|
wire icimmu_rty_ic;
|
wire icimmu_rty_ic;
|
wire icimmu_err_ic;
|
wire icimmu_err_ic;
|
wire [3:0] icimmu_tag_ic;
|
wire [3:0] icimmu_tag_ic;
|
wire icimmu_cyc_immu;
|
wire icimmu_cycstb_immu;
|
wire icimmu_stb_immu;
|
|
wire icimmu_ci_immu;
|
wire icimmu_ci_immu;
|
|
|
//
|
//
|
// Connection between CPU and PIC
|
// Connection between CPU and PIC
|
//
|
//
|
Line 419... |
Line 419... |
// CPU i/f
|
// CPU i/f
|
.ic_en(ic_en),
|
.ic_en(ic_en),
|
.immu_en(immu_en),
|
.immu_en(immu_en),
|
.supv(supv),
|
.supv(supv),
|
.icpu_adr_i(icpu_adr_cpu),
|
.icpu_adr_i(icpu_adr_cpu),
|
.icpu_cyc_i(icpu_cyc_cpu),
|
.icpu_cycstb_i(icpu_cycstb_cpu),
|
.icpu_stb_i(icpu_stb_cpu),
|
|
.icpu_adr_o(icpu_adr_immu),
|
.icpu_adr_o(icpu_adr_immu),
|
.icpu_tag_o(icpu_tag_immu),
|
.icpu_tag_o(icpu_tag_immu),
|
.icpu_rty_o(icpu_rty_immu),
|
.icpu_rty_o(icpu_rty_immu),
|
.icpu_err_o(icpu_err_immu),
|
.icpu_err_o(icpu_err_immu),
|
|
|
Line 438... |
Line 437... |
// IC i/f
|
// IC i/f
|
.icimmu_rty_i(icimmu_rty_ic),
|
.icimmu_rty_i(icimmu_rty_ic),
|
.icimmu_err_i(icimmu_err_ic),
|
.icimmu_err_i(icimmu_err_ic),
|
.icimmu_tag_i(icimmu_tag_ic),
|
.icimmu_tag_i(icimmu_tag_ic),
|
.icimmu_adr_o(icimmu_adr_immu),
|
.icimmu_adr_o(icimmu_adr_immu),
|
.icimmu_cyc_o(icimmu_cyc_immu),
|
.icimmu_cycstb_o(icimmu_cycstb_immu),
|
.icimmu_stb_o(icimmu_stb_immu),
|
|
.icimmu_ci_o(icimmu_ci_immu)
|
.icimmu_ci_o(icimmu_ci_immu)
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of Instruction Cache
|
// Instantiation of Instruction Cache
|
Line 453... |
Line 451... |
.rst(rst_i),
|
.rst(rst_i),
|
|
|
// IC and CPU/IMMU
|
// IC and CPU/IMMU
|
.ic_en(ic_en),
|
.ic_en(ic_en),
|
.icimmu_adr_i(icimmu_adr_immu),
|
.icimmu_adr_i(icimmu_adr_immu),
|
.icimmu_cyc_i(icimmu_cyc_immu),
|
.icimmu_cycstb_i(icimmu_cycstb_immu),
|
.icimmu_stb_i(icimmu_stb_immu),
|
|
.icimmu_ci_i(icimmu_ci_immu),
|
.icimmu_ci_i(icimmu_ci_immu),
|
.icpu_we_i(icpu_we_cpu),
|
.icpu_we_i(icpu_we_cpu),
|
.icpu_sel_i(icpu_sel_cpu),
|
.icpu_sel_i(icpu_sel_cpu),
|
.icpu_tag_i(icpu_tag_cpu),
|
.icpu_tag_i(icpu_tag_cpu),
|
.icpu_dat_o(icpu_dat_ic),
|
.icpu_dat_o(icpu_dat_ic),
|
Line 493... |
Line 490... |
.rst(rst_i),
|
.rst(rst_i),
|
|
|
// Connection IC and IFETCHER inside CPU
|
// Connection IC and IFETCHER inside CPU
|
.ic_en(ic_en),
|
.ic_en(ic_en),
|
.icpu_adr_o(icpu_adr_cpu),
|
.icpu_adr_o(icpu_adr_cpu),
|
.icpu_cyc_o(icpu_cyc_cpu),
|
.icpu_cycstb_o(icpu_cycstb_cpu),
|
.icpu_stb_o(icpu_stb_cpu),
|
|
.icpu_we_o(icpu_we_cpu),
|
.icpu_we_o(icpu_we_cpu),
|
.icpu_sel_o(icpu_sel_cpu),
|
.icpu_sel_o(icpu_sel_cpu),
|
.icpu_tag_o(icpu_tag_cpu),
|
.icpu_tag_o(icpu_tag_cpu),
|
.icpu_dat_i(icpu_dat_ic),
|
.icpu_dat_i(icpu_dat_ic),
|
.icpu_ack_i(icpu_ack_ic),
|
.icpu_ack_i(icpu_ack_ic),
|
Line 524... |
Line 520... |
.immu_en(immu_en),
|
.immu_en(immu_en),
|
|
|
// Connection DC and CPU
|
// Connection DC and CPU
|
.dc_en(dc_en),
|
.dc_en(dc_en),
|
.dcpu_adr_o(dcpu_adr_cpu),
|
.dcpu_adr_o(dcpu_adr_cpu),
|
.dcpu_cyc_o(dcpu_cyc_cpu),
|
.dcpu_cycstb_o(dcpu_cycstb_cpu),
|
.dcpu_stb_o(dcpu_stb_cpu),
|
|
.dcpu_we_o(dcpu_we_cpu),
|
.dcpu_we_o(dcpu_we_cpu),
|
.dcpu_sel_o(dcpu_sel_cpu),
|
.dcpu_sel_o(dcpu_sel_cpu),
|
.dcpu_tag_o(dcpu_tag_cpu),
|
.dcpu_tag_o(dcpu_tag_cpu),
|
.dcpu_dat_o(dcpu_dat_cpu),
|
.dcpu_dat_o(dcpu_dat_cpu),
|
.dcpu_dat_i(dcpu_dat_dc),
|
.dcpu_dat_i(dcpu_dat_dc),
|
Line 570... |
Line 565... |
// CPU i/f
|
// CPU i/f
|
.dc_en(dc_en),
|
.dc_en(dc_en),
|
.dmmu_en(dmmu_en),
|
.dmmu_en(dmmu_en),
|
.supv(supv),
|
.supv(supv),
|
.dcpu_adr_i(dcpu_adr_cpu),
|
.dcpu_adr_i(dcpu_adr_cpu),
|
.dcpu_cyc_i(dcpu_cyc_cpu),
|
.dcpu_cycstb_i(dcpu_cycstb_cpu),
|
.dcpu_stb_i(dcpu_stb_cpu),
|
|
.dcpu_we_i(dcpu_we_cpu),
|
.dcpu_we_i(dcpu_we_cpu),
|
.dcpu_tag_o(dcpu_tag_dmmu),
|
.dcpu_tag_o(dcpu_tag_dmmu),
|
.dcpu_err_o(dcpu_err_dmmu),
|
.dcpu_err_o(dcpu_err_dmmu),
|
|
|
// SPR access
|
// SPR access
|
Line 587... |
Line 581... |
|
|
// DC i/f
|
// DC i/f
|
.dcdmmu_err_i(dcdmmu_err_dc),
|
.dcdmmu_err_i(dcdmmu_err_dc),
|
.dcdmmu_tag_i(dcdmmu_tag_dc),
|
.dcdmmu_tag_i(dcdmmu_tag_dc),
|
.dcdmmu_adr_o(dcdmmu_adr_dmmu),
|
.dcdmmu_adr_o(dcdmmu_adr_dmmu),
|
.dcdmmu_cyc_o(dcdmmu_cyc_dmmu),
|
.dcdmmu_cycstb_o(dcdmmu_cycstb_dmmu),
|
.dcdmmu_stb_o(dcdmmu_stb_dmmu),
|
|
.dcdmmu_ci_o(dcdmmu_ci_dmmu)
|
.dcdmmu_ci_o(dcdmmu_ci_dmmu)
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of Data Cache
|
// Instantiation of Data Cache
|
Line 602... |
Line 595... |
.rst(rst_i),
|
.rst(rst_i),
|
|
|
// DC and CPU/DMMU
|
// DC and CPU/DMMU
|
.dc_en(dc_en),
|
.dc_en(dc_en),
|
.dcdmmu_adr_i(dcdmmu_adr_dmmu),
|
.dcdmmu_adr_i(dcdmmu_adr_dmmu),
|
.dcdmmu_cyc_i(dcdmmu_cyc_dmmu),
|
.dcdmmu_cycstb_i(dcdmmu_cycstb_dmmu),
|
.dcdmmu_stb_i(dcdmmu_stb_dmmu),
|
|
.dcdmmu_ci_i(dcdmmu_ci_dmmu),
|
.dcdmmu_ci_i(dcdmmu_ci_dmmu),
|
.dcpu_we_i(dcpu_we_cpu),
|
.dcpu_we_i(dcpu_we_cpu),
|
.dcpu_sel_i(dcpu_sel_cpu),
|
.dcpu_sel_i(dcpu_sel_cpu),
|
.dcpu_tag_i(dcpu_tag_cpu),
|
.dcpu_tag_i(dcpu_tag_cpu),
|
.dcpu_dat_i(dcpu_dat_cpu),
|
.dcpu_dat_i(dcpu_dat_cpu),
|
Line 640... |
Line 632... |
//
|
//
|
or1200_du or1200_du(
|
or1200_du or1200_du(
|
// RISC Internal Interface
|
// RISC Internal Interface
|
.clk(clk_i),
|
.clk(clk_i),
|
.rst(rst_i),
|
.rst(rst_i),
|
.dcpu_cyc_i(dcpu_cyc_cpu),
|
.dcpu_cycstb_i(dcpu_cycstb_cpu),
|
.dcpu_stb_i(dcpu_stb_cpu),
|
|
.dcpu_we_i(dcpu_we_cpu),
|
.dcpu_we_i(dcpu_we_cpu),
|
.icpu_cyc_i(icpu_cyc_cpu),
|
.icpu_cycstb_i(icpu_cycstb_cpu),
|
.icpu_stb_i(icpu_stb_cpu),
|
|
.ex_freeze(ex_freeze),
|
.ex_freeze(ex_freeze),
|
.branch_op(branch_op),
|
.branch_op(branch_op),
|
.ex_insn(ex_insn),
|
.ex_insn(ex_insn),
|
.du_dsr(du_dsr),
|
.du_dsr(du_dsr),
|
|
|