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),
|