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

Subversion Repositories or1k

[/] [or1k/] [tags/] [rel_5/] [or1200/] [rtl/] [verilog/] [or1200_dc_top.v] - Diff between revs 617 and 660

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

Rev 617 Rev 660
Line 42... Line 42...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// 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.
 
//
// 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.
//
//
// Revision 1.1  2002/01/03 08:16:15  lampret
// Revision 1.1  2002/01/03 08:16:15  lampret
// New prefixes for RTL files, prefixed module names. Updated cache controllers and MMUs.
// New prefixes for RTL files, prefixed module names. Updated cache controllers and MMUs.
Line 89... Line 92...
        dcbiu_dat_o, dcbiu_adr_o, dcbiu_cyc_o, dcbiu_stb_o, dcbiu_we_o, dcbiu_sel_o, dcbiu_cab_o,
        dcbiu_dat_o, dcbiu_adr_o, dcbiu_cyc_o, dcbiu_stb_o, dcbiu_we_o, dcbiu_sel_o, dcbiu_cab_o,
        dcbiu_dat_i, dcbiu_ack_i, dcbiu_err_i,
        dcbiu_dat_i, dcbiu_ack_i, dcbiu_err_i,
 
 
        // Internal i/f
        // Internal i/f
        dc_en,
        dc_en,
        dcdmmu_adr_i, dcdmmu_cyc_i, dcdmmu_stb_i, dcdmmu_ci_i,
        dcdmmu_adr_i, dcdmmu_cycstb_i, dcdmmu_ci_i,
        dcpu_we_i, dcpu_sel_i, dcpu_tag_i, dcpu_dat_i,
        dcpu_we_i, dcpu_sel_i, dcpu_tag_i, dcpu_dat_i,
        dcpu_dat_o, dcpu_ack_o, dcpu_rty_o, dcdmmu_err_o, dcdmmu_tag_o,
        dcpu_dat_o, dcpu_ack_o, dcpu_rty_o, dcdmmu_err_o, dcdmmu_tag_o,
 
 
        // SPRs
        // SPRs
        spr_cs, spr_write, spr_dat_i
        spr_cs, spr_write, spr_dat_i
Line 128... Line 131...
//
//
// Internal I/F
// Internal I/F
//
//
input                           dc_en;
input                           dc_en;
input   [31:0]                   dcdmmu_adr_i;
input   [31:0]                   dcdmmu_adr_i;
input                           dcdmmu_cyc_i;
input                           dcdmmu_cycstb_i;
input                           dcdmmu_stb_i;
 
input                           dcdmmu_ci_i;
input                           dcdmmu_ci_i;
input                           dcpu_we_i;
input                           dcpu_we_i;
input   [3:0]                    dcpu_sel_i;
input   [3:0]                    dcpu_sel_i;
input   [3:0]                    dcpu_tag_i;
input   [3:0]                    dcpu_tag_i;
input   [dw-1:0]         dcpu_dat_i;
input   [dw-1:0]         dcpu_dat_i;
Line 170... Line 172...
wire                            dc_inv;
wire                            dc_inv;
wire                            dcfsm_first_hit_ack;
wire                            dcfsm_first_hit_ack;
wire                            dcfsm_first_miss_ack;
wire                            dcfsm_first_miss_ack;
wire                            dcfsm_first_miss_err;
wire                            dcfsm_first_miss_err;
wire                            dcfsm_burst;
wire                            dcfsm_burst;
 
wire                            dcfsm_tag_we;
 
 
//
//
// Simple assignments
// Simple assignments
//
//
assign dcbiu_adr_o = dc_addr;
assign dcbiu_adr_o = dc_addr;
assign dc_inv = spr_cs & spr_write;
assign dc_inv = spr_cs & spr_write;
assign dctag_we = (dcfsm_biu_read & dcbiu_ack_i) | dc_inv;
assign dctag_we = dcfsm_tag_we | dc_inv;
assign dctag_addr = dc_inv ? spr_dat_i[`OR1200_DCINDXH:`OR1200_DCLS] : dc_addr[`OR1200_DCINDXH:`OR1200_DCLS];
assign dctag_addr = dc_inv ? spr_dat_i[`OR1200_DCINDXH:`OR1200_DCLS] : dc_addr[`OR1200_DCINDXH:`OR1200_DCLS];
assign dctag_en = dc_inv | dc_en;
assign dctag_en = dc_inv | dc_en;
assign dctag_v = ~dc_inv;
assign dctag_v = ~dc_inv;
 
 
//
//
Line 190... Line 193...
assign dcbiu_dat_o = dcpu_dat_i;
assign dcbiu_dat_o = dcpu_dat_i;
 
 
//
//
// Bypases of the DC when DC is disabled
// Bypases of the DC when DC is disabled
//
//
assign dcbiu_cyc_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcdmmu_cyc_i;
assign dcbiu_cyc_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcdmmu_cycstb_i;
assign dcbiu_stb_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcdmmu_stb_i;
assign dcbiu_stb_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcdmmu_cycstb_i;
assign dcbiu_we_o = (dc_en) ? dcfsm_biu_write : dcpu_we_i;
assign dcbiu_we_o = (dc_en) ? dcfsm_biu_write : dcpu_we_i;
assign dcbiu_sel_o = (dc_en & dcfsm_biu_read & !dcfsm_biu_write & !dcdmmu_ci_i) ? 4'b1111 : dcpu_sel_i;
assign dcbiu_sel_o = (dc_en & dcfsm_biu_read & !dcfsm_biu_write & !dcdmmu_ci_i) ? 4'b1111 : dcpu_sel_i;
assign dcbiu_cab_o = (dc_en) ? dcfsm_burst : 1'b0;
assign dcbiu_cab_o = (dc_en) ? dcfsm_burst : 1'b0;
assign dcpu_rty_o = ~dcpu_ack_o;
assign dcpu_rty_o = ~dcpu_ack_o;
assign dcdmmu_tag_o = dcdmmu_err_o ? `OR1200_DTAG_BE : dcpu_tag_i;
assign dcdmmu_tag_o = dcdmmu_err_o ? `OR1200_DTAG_BE : dcpu_tag_i;
Line 207... Line 210...
assign dcdmmu_err_o = dc_en ? dcfsm_first_miss_err : dcbiu_err_i;
assign dcdmmu_err_o = dc_en ? dcfsm_first_miss_err : dcbiu_err_i;
 
 
//
//
// Select between claddr generated by DC FSM and addr[3:2] generated by LSU
// Select between claddr generated by DC FSM and addr[3:2] generated by LSU
//
//
assign dc_addr = (dcfsm_biu_read | dcfsm_biu_write) ? saved_addr : dcdmmu_adr_i;
//assign dc_addr = (dcfsm_biu_read | dcfsm_biu_write) ? saved_addr : dcdmmu_adr_i;
 
 
//
//
// Select between input data generated by LSU or by BIU
// Select between input data generated by LSU or by BIU
//
//
assign to_dcram = (dcfsm_biu_read) ? dcbiu_dat_i : dcpu_dat_i;
assign to_dcram = (dcfsm_biu_read) ? dcbiu_dat_i : dcpu_dat_i;
Line 236... Line 239...
//
//
or1200_dc_fsm or1200_dc_fsm(
or1200_dc_fsm or1200_dc_fsm(
        .clk(clk),
        .clk(clk),
        .rst(rst),
        .rst(rst),
        .dc_en(dc_en),
        .dc_en(dc_en),
        .dcdmmu_cyc_i(dcdmmu_cyc_i),
        .dcdmmu_cycstb_i(dcdmmu_cycstb_i),
        .dcdmmu_stb_i(dcdmmu_stb_i),
 
        .dcdmmu_ci_i(dcdmmu_ci_i),
        .dcdmmu_ci_i(dcdmmu_ci_i),
        .dcpu_we_i(dcpu_we_i),
        .dcpu_we_i(dcpu_we_i),
        .dcpu_sel_i(dcpu_sel_i),
        .dcpu_sel_i(dcpu_sel_i),
        .tagcomp_miss(tagcomp_miss),
        .tagcomp_miss(tagcomp_miss),
        .biudata_valid(dcbiu_ack_i),
        .biudata_valid(dcbiu_ack_i),
Line 252... Line 254...
        .biu_read(dcfsm_biu_read),
        .biu_read(dcfsm_biu_read),
        .biu_write(dcfsm_biu_write),
        .biu_write(dcfsm_biu_write),
        .first_hit_ack(dcfsm_first_hit_ack),
        .first_hit_ack(dcfsm_first_hit_ack),
        .first_miss_ack(dcfsm_first_miss_ack),
        .first_miss_ack(dcfsm_first_miss_ack),
        .first_miss_err(dcfsm_first_miss_err),
        .first_miss_err(dcfsm_first_miss_err),
        .burst(dcfsm_burst)
        .burst(dcfsm_burst),
 
        .tag_we(dcfsm_tag_we),
 
        .dc_addr(dc_addr)
);
);
 
 
//
//
// Instantiation of DC main memory
// Instantiation of DC main memory
//
//

powered by: WebSVN 2.1.0

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