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

Subversion Repositories or1k

[/] [or1k/] [branches/] [branch_qmem/] [or1200/] [rtl/] [verilog/] [or1200_dc_top.v] - Diff between revs 1163 and 1171

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

Rev 1163 Rev 1171
Line 42... Line 42...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.6  2002/10/17 20:04:40  lampret
 
// Added BIST scan. Special VS RAMs need to be used to implement BIST.
 
//
// Revision 1.5  2002/08/18 19:54:47  lampret
// Revision 1.5  2002/08/18 19:54:47  lampret
// Added store buffer.
// Added store buffer.
//
//
// Revision 1.4  2002/02/11 04:33:17  lampret
// Revision 1.4  2002/02/11 04:33:17  lampret
// Speed optimizations (removed duplicate _cyc_ and _stb_). Fixed D/IMMU cache-inhibit attr.
// Speed optimizations (removed duplicate _cyc_ and _stb_). Fixed D/IMMU cache-inhibit attr.
Line 98... Line 101...
        dcsb_dat_o, dcsb_adr_o, dcsb_cyc_o, dcsb_stb_o, dcsb_we_o, dcsb_sel_o, dcsb_cab_o,
        dcsb_dat_o, dcsb_adr_o, dcsb_cyc_o, dcsb_stb_o, dcsb_we_o, dcsb_sel_o, dcsb_cab_o,
        dcsb_dat_i, dcsb_ack_i, dcsb_err_i,
        dcsb_dat_i, dcsb_ack_i, dcsb_err_i,
 
 
        // Internal i/f
        // Internal i/f
        dc_en,
        dc_en,
        dcdmmu_adr_i, dcdmmu_cycstb_i, dcdmmu_ci_i,
        dcqmem_adr_i, dcqmem_cycstb_i, dcqmem_ci_i,
        dcpu_we_i, dcpu_sel_i, dcpu_tag_i, dcpu_dat_i,
        dcqmem_we_i, dcqmem_sel_i, dcqmem_tag_i, dcqmem_dat_i,
        dcpu_dat_o, dcpu_ack_o, dcpu_rty_o, dcdmmu_err_o, dcdmmu_tag_o,
        dcqmem_dat_o, dcqmem_ack_o, dcqmem_rty_o, dcqmem_err_o, dcqmem_tag_o,
 
 
`ifdef OR1200_BIST
`ifdef OR1200_BIST
        // RAM BIST
        // RAM BIST
        scanb_rst, scanb_si, scanb_so, scanb_en, scanb_clk,
        scanb_rst, scanb_si, scanb_so, scanb_en, scanb_clk,
`endif
`endif
Line 141... Line 144...
 
 
//
//
// Internal I/F
// Internal I/F
//
//
input                           dc_en;
input                           dc_en;
input   [31:0]                   dcdmmu_adr_i;
input   [31:0]                   dcqmem_adr_i;
input                           dcdmmu_cycstb_i;
input                           dcqmem_cycstb_i;
input                           dcdmmu_ci_i;
input                           dcqmem_ci_i;
input                           dcpu_we_i;
input                           dcqmem_we_i;
input   [3:0]                    dcpu_sel_i;
input   [3:0]                    dcqmem_sel_i;
input   [3:0]                    dcpu_tag_i;
input   [3:0]                    dcqmem_tag_i;
input   [dw-1:0]         dcpu_dat_i;
input   [dw-1:0]         dcqmem_dat_i;
output  [dw-1:0]         dcpu_dat_o;
output  [dw-1:0]         dcqmem_dat_o;
output                          dcpu_ack_o;
output                          dcqmem_ack_o;
output                          dcpu_rty_o;
output                          dcqmem_rty_o;
output                          dcdmmu_err_o;
output                          dcqmem_err_o;
output  [3:0]                    dcdmmu_tag_o;
output  [3:0]                    dcqmem_tag_o;
 
 
`ifdef OR1200_BIST
`ifdef OR1200_BIST
//
//
// RAM BIST
// RAM BIST
//
//
Line 220... Line 223...
 
 
//
//
// Data to BIU is from DCRAM when DC is enabled or from LSU when
// Data to BIU is from DCRAM when DC is enabled or from LSU when
// DC is disabled
// DC is disabled
//
//
assign dcsb_dat_o = dcpu_dat_i;
assign dcsb_dat_o = dcqmem_dat_i;
 
 
//
//
// Bypases of the DC when DC is disabled
// Bypases of the DC when DC is disabled
//
//
assign dcsb_cyc_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcdmmu_cycstb_i;
assign dcsb_cyc_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcqmem_cycstb_i;
assign dcsb_stb_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcdmmu_cycstb_i;
assign dcsb_stb_o = (dc_en) ? dcfsm_biu_read | dcfsm_biu_write : dcqmem_cycstb_i;
assign dcsb_we_o = (dc_en) ? dcfsm_biu_write : dcpu_we_i;
assign dcsb_we_o = (dc_en) ? dcfsm_biu_write : dcqmem_we_i;
assign dcsb_sel_o = (dc_en & dcfsm_biu_read & !dcfsm_biu_write & !dcdmmu_ci_i) ? 4'b1111 : dcpu_sel_i;
assign dcsb_sel_o = (dc_en & dcfsm_biu_read & !dcfsm_biu_write & !dcqmem_ci_i) ? 4'b1111 : dcqmem_sel_i;
assign dcsb_cab_o = (dc_en) ? dcfsm_burst : 1'b0;
assign dcsb_cab_o = (dc_en) ? dcfsm_burst : 1'b0;
assign dcpu_rty_o = ~dcpu_ack_o;
assign dcqmem_rty_o = ~dcqmem_ack_o;
assign dcdmmu_tag_o = dcdmmu_err_o ? `OR1200_DTAG_BE : dcpu_tag_i;
assign dcqmem_tag_o = dcqmem_err_o ? `OR1200_DTAG_BE : dcqmem_tag_i;
 
 
//
//
// DC/LSU normal and error termination
// DC/LSU normal and error termination
//
//
assign dcpu_ack_o = dc_en ? dcfsm_first_hit_ack | dcfsm_first_miss_ack : dcsb_ack_i;
assign dcqmem_ack_o = dc_en ? dcfsm_first_hit_ack | dcfsm_first_miss_ack : dcsb_ack_i;
assign dcdmmu_err_o = dc_en ? dcfsm_first_miss_err : dcsb_err_i;
assign dcqmem_err_o = dc_en ? dcfsm_first_miss_err : dcsb_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 : dcqmem_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) ? dcsb_dat_i : dcpu_dat_i;
assign to_dcram = (dcfsm_biu_read) ? dcsb_dat_i : dcqmem_dat_i;
 
 
//
//
// Select between data generated by DCRAM or passed by BIU
// Select between data generated by DCRAM or passed by BIU
//
//
assign dcpu_dat_o = dcfsm_first_miss_ack | !dc_en ? dcsb_dat_i : from_dcram;
assign dcqmem_dat_o = dcfsm_first_miss_ack | !dc_en ? dcsb_dat_i : from_dcram;
 
 
//
//
// Tag comparison
// Tag comparison
//
//
always @(tag or saved_addr or tag_v) begin
always @(tag or saved_addr or tag_v) begin
Line 271... Line 274...
//
//
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_cycstb_i(dcdmmu_cycstb_i),
        .dcqmem_cycstb_i(dcqmem_cycstb_i),
        .dcdmmu_ci_i(dcdmmu_ci_i),
        .dcqmem_ci_i(dcqmem_ci_i),
        .dcpu_we_i(dcpu_we_i),
        .dcqmem_we_i(dcqmem_we_i),
        .dcpu_sel_i(dcpu_sel_i),
        .dcqmem_sel_i(dcqmem_sel_i),
        .tagcomp_miss(tagcomp_miss),
        .tagcomp_miss(tagcomp_miss),
        .biudata_valid(dcsb_ack_i),
        .biudata_valid(dcsb_ack_i),
        .biudata_error(dcsb_err_i),
        .biudata_error(dcsb_err_i),
        .start_addr(dcdmmu_adr_i),
        .start_addr(dcqmem_adr_i),
        .saved_addr(saved_addr),
        .saved_addr(saved_addr),
        .dcram_we(dcram_we),
        .dcram_we(dcram_we),
        .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),

powered by: WebSVN 2.1.0

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