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:54 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/14 06:18:22 lampret
|
// 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.
|
// Fixed mem2reg bug in FAST implementation. Updated debug unit to work with new genpc/if.
|
Line 92... |
Line 95... |
icbiu_dat_o, icbiu_adr_o, icbiu_cyc_o, icbiu_stb_o, icbiu_we_o, icbiu_sel_o, icbiu_cab_o,
|
icbiu_dat_o, icbiu_adr_o, icbiu_cyc_o, icbiu_stb_o, icbiu_we_o, icbiu_sel_o, icbiu_cab_o,
|
icbiu_dat_i, icbiu_ack_i, icbiu_err_i,
|
icbiu_dat_i, icbiu_ack_i, icbiu_err_i,
|
|
|
// Internal i/f
|
// Internal i/f
|
ic_en,
|
ic_en,
|
icimmu_adr_i, icimmu_cyc_i, icimmu_stb_i, icimmu_ci_i,
|
icimmu_adr_i, icimmu_cycstb_i, icimmu_ci_i,
|
icpu_we_i, icpu_sel_i, icpu_tag_i,
|
icpu_we_i, icpu_sel_i, icpu_tag_i,
|
icpu_dat_o, icpu_ack_o, icimmu_rty_o, icimmu_err_o, icimmu_tag_o,
|
icpu_dat_o, icpu_ack_o, icimmu_rty_o, icimmu_err_o, icimmu_tag_o,
|
|
|
// SPRs
|
// SPRs
|
spr_cs, spr_write, spr_dat_i
|
spr_cs, spr_write, spr_dat_i
|
Line 131... |
Line 134... |
//
|
//
|
// Internal I/F
|
// Internal I/F
|
//
|
//
|
input ic_en;
|
input ic_en;
|
input [31:0] icimmu_adr_i;
|
input [31:0] icimmu_adr_i;
|
input icimmu_cyc_i;
|
input icimmu_cycstb_i;
|
input icimmu_stb_i;
|
|
input icimmu_ci_i;
|
input icimmu_ci_i;
|
input icpu_we_i;
|
input icpu_we_i;
|
input [3:0] icpu_sel_i;
|
input [3:0] icpu_sel_i;
|
input [3:0] icpu_tag_i;
|
input [3:0] icpu_tag_i;
|
output [dw-1:0] icpu_dat_o;
|
output [dw-1:0] icpu_dat_o;
|
Line 171... |
Line 173... |
wire ic_inv;
|
wire ic_inv;
|
wire icfsm_first_hit_ack;
|
wire icfsm_first_hit_ack;
|
wire icfsm_first_miss_ack;
|
wire icfsm_first_miss_ack;
|
wire icfsm_first_miss_err;
|
wire icfsm_first_miss_err;
|
wire icfsm_burst;
|
wire icfsm_burst;
|
|
wire icfsm_tag_we;
|
|
|
//
|
//
|
// Simple assignments
|
// Simple assignments
|
//
|
//
|
assign icbiu_adr_o = ic_addr;
|
assign icbiu_adr_o = ic_addr;
|
assign ic_inv = spr_cs & spr_write;
|
assign ic_inv = spr_cs & spr_write;
|
assign ictag_we = (icfsm_biu_read & icbiu_ack_i) | ic_inv;
|
assign ictag_we = icfsm_tag_we | ic_inv;
|
assign ictag_addr = ic_inv ? spr_dat_i[`OR1200_ICINDXH:`OR1200_ICLS] : ic_addr[`OR1200_ICINDXH:`OR1200_ICLS];
|
assign ictag_addr = ic_inv ? spr_dat_i[`OR1200_ICINDXH:`OR1200_ICLS] : ic_addr[`OR1200_ICINDXH:`OR1200_ICLS];
|
assign ictag_en = ic_inv | ic_en;
|
assign ictag_en = ic_inv | ic_en;
|
assign ictag_v = ~ic_inv;
|
assign ictag_v = ~ic_inv;
|
|
|
//
|
//
|
Line 191... |
Line 194... |
assign icbiu_dat_o = 32'h00000000;
|
assign icbiu_dat_o = 32'h00000000;
|
|
|
//
|
//
|
// Bypases of the IC when IC is disabled
|
// Bypases of the IC when IC is disabled
|
//
|
//
|
assign icbiu_cyc_o = (ic_en) ? icfsm_biu_read : icimmu_cyc_i;
|
assign icbiu_cyc_o = (ic_en) ? icfsm_biu_read : icimmu_cycstb_i;
|
assign icbiu_stb_o = (ic_en) ? icfsm_biu_read : icimmu_stb_i;
|
assign icbiu_stb_o = (ic_en) ? icfsm_biu_read : icimmu_cycstb_i;
|
assign icbiu_we_o = 1'b0;
|
assign icbiu_we_o = 1'b0;
|
assign icbiu_sel_o = (ic_en & icfsm_biu_read) ? 4'b1111 : icpu_sel_i;
|
assign icbiu_sel_o = (ic_en & icfsm_biu_read) ? 4'b1111 : icpu_sel_i;
|
assign icbiu_cab_o = (ic_en) ? icfsm_burst : 1'b0;
|
assign icbiu_cab_o = (ic_en) ? icfsm_burst : 1'b0;
|
assign icimmu_rty_o = ~icpu_ack_o & ~icimmu_err_o;
|
assign icimmu_rty_o = ~icpu_ack_o & ~icimmu_err_o;
|
assign icimmu_tag_o = icimmu_err_o ? `OR1200_ITAG_BE : icpu_tag_i;
|
assign icimmu_tag_o = icimmu_err_o ? `OR1200_ITAG_BE : icpu_tag_i;
|
Line 237... |
Line 240... |
//
|
//
|
or1200_ic_fsm or1200_ic_fsm(
|
or1200_ic_fsm or1200_ic_fsm(
|
.clk(clk),
|
.clk(clk),
|
.rst(rst),
|
.rst(rst),
|
.ic_en(ic_en),
|
.ic_en(ic_en),
|
.icimmu_cyc_i(icimmu_cyc_i),
|
.icimmu_cycstb_i(icimmu_cycstb_i),
|
.icimmu_stb_i(icimmu_stb_i),
|
|
.icimmu_ci_i(icimmu_ci_i),
|
.icimmu_ci_i(icimmu_ci_i),
|
.icpu_sel_i(icpu_sel_i),
|
.icpu_sel_i(icpu_sel_i),
|
.tagcomp_miss(tagcomp_miss),
|
.tagcomp_miss(tagcomp_miss),
|
.biudata_valid(icbiu_ack_i),
|
.biudata_valid(icbiu_ack_i),
|
.biudata_error(icbiu_err_i),
|
.biudata_error(icbiu_err_i),
|
Line 251... |
Line 253... |
.icram_we(icram_we),
|
.icram_we(icram_we),
|
.biu_read(icfsm_biu_read),
|
.biu_read(icfsm_biu_read),
|
.first_hit_ack(icfsm_first_hit_ack),
|
.first_hit_ack(icfsm_first_hit_ack),
|
.first_miss_ack(icfsm_first_miss_ack),
|
.first_miss_ack(icfsm_first_miss_ack),
|
.first_miss_err(icfsm_first_miss_err),
|
.first_miss_err(icfsm_first_miss_err),
|
.burst(icfsm_burst)
|
.burst(icfsm_burst),
|
|
.tag_we(icfsm_tag_we)
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of IC main memory
|
// Instantiation of IC main memory
|
//
|
//
|