OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [rel_26/] [or1200/] [rtl/] [verilog/] [or1200_ic_top.v] - Diff between revs 636 and 660

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 636 Rev 660
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
//
//

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.