Line 73... |
Line 73... |
|
|
// Data WISHBONE INTERFACE
|
// Data WISHBONE INTERFACE
|
dwb_clk_i, dwb_rst_i, dwb_ack_i, dwb_err_i, dwb_rty_i, dwb_dat_i,
|
dwb_clk_i, dwb_rst_i, dwb_ack_i, dwb_err_i, dwb_rty_i, dwb_dat_i,
|
dwb_cyc_o, dwb_adr_o, dwb_stb_o, dwb_we_o, dwb_sel_o, dwb_dat_o,
|
dwb_cyc_o, dwb_adr_o, dwb_stb_o, dwb_we_o, dwb_sel_o, dwb_dat_o,
|
|
|
// Trace
|
// External Debug Interface
|
tp_dir_in, tp_sel, tp_in, tp_out,
|
dbg_stall_i, dbg_dat_i, dbg_adr_i, dbg_op_i, dbg_ewt_i,
|
|
dbg_lss_o, dbg_is_o, dbg_wp_o, dbg_bp_o, dbg_dat_o,
|
|
|
// Power Management
|
// Power Management
|
pm_clksd, pm_cpustall, pm_dc_gate, pm_ic_gate, pm_dmmu_gate,
|
pm_clksd, pm_cpustall, pm_dc_gate, pm_ic_gate, pm_dmmu_gate,
|
pm_immu_gate, pm_tt_gate, pm_cpu_gate, pm_wakeup, pm_lvolt
|
pm_immu_gate, pm_tt_gate, pm_cpu_gate, pm_wakeup, pm_lvolt
|
|
|
Line 131... |
Line 132... |
output dwb_we_o; // indicates write transfer
|
output dwb_we_o; // indicates write transfer
|
output [3:0] dwb_sel_o; // byte select outputs
|
output [3:0] dwb_sel_o; // byte select outputs
|
output [dw-1:0] dwb_dat_o; // output data bus
|
output [dw-1:0] dwb_dat_o; // output data bus
|
|
|
//
|
//
|
|
// External Debug Interface
|
|
//
|
|
input dbg_stall_i; // External Stall Input
|
|
input [dw-1:0] dbg_dat_i; // External Data Input
|
|
input [aw-1:0] dbg_adr_i; // External Address Input
|
|
input [2:0] dbg_op_i; // External Operation Select Input
|
|
input dbg_ewt_i; // External Watchpoint Trigger Input
|
|
output [3:0] dbg_lss_o; // External Load/Store Unit Status
|
|
output [1:0] dbg_is_o; // External Insn Fetch Status
|
|
output [10:0] dbg_wp_o; // Watchpoints Outputs
|
|
output dbg_bp_o; // Breakpoint Output
|
|
output [dw-1:0] dbg_dat_o; // External Data Output
|
|
|
|
//
|
// Power Management
|
// Power Management
|
//
|
//
|
input pm_cpustall;
|
input pm_cpustall;
|
output pm_clksd;
|
output pm_clksd;
|
output pm_dc_gate;
|
output pm_dc_gate;
|
Line 144... |
Line 159... |
output pm_tt_gate;
|
output pm_tt_gate;
|
output pm_cpu_gate;
|
output pm_cpu_gate;
|
output pm_wakeup;
|
output pm_wakeup;
|
output pm_lvolt;
|
output pm_lvolt;
|
|
|
|
|
//
|
//
|
// Internal wires and regs
|
// Internal wires and regs
|
//
|
//
|
|
|
//
|
//
|
Line 244... |
Line 260... |
//
|
//
|
wire [dw-1:0] spr_dat_tt;
|
wire [dw-1:0] spr_dat_tt;
|
wire tt_int;
|
wire tt_int;
|
|
|
//
|
//
|
// CPU and external Trace port
|
|
//
|
|
input tp_dir_in;
|
|
input [1:0] tp_sel;
|
|
input [dw-1:0] tp_in;
|
|
output [dw-1:0] tp_out;
|
|
|
|
//
|
|
// Trace port and caches/MMUs
|
// Trace port and caches/MMUs
|
//
|
//
|
wire [`TP2W_WIDTH-1:0] tp2w;
|
wire [`TP2W_WIDTH-1:0] tp2w;
|
wire [`TP3W_WIDTH-1:0] tp3w;
|
wire [`TP3W_WIDTH-1:0] tp3w;
|
|
|
Line 363... |
Line 371... |
.icfetch_op(icfetch_op),
|
.icfetch_op(icfetch_op),
|
.icfetch_dataout(icfetch_dataout),
|
.icfetch_dataout(icfetch_dataout),
|
.icfetch_stall(icfetch_stall),
|
.icfetch_stall(icfetch_stall),
|
.ic_en(ic_en),
|
.ic_en(ic_en),
|
|
|
|
// SPR access
|
|
.spr_cs(spr_cs[`SPR_GROUP_IC]),
|
|
.spr_write(spr_we),
|
|
.spr_addr(spr_addr),
|
|
.spr_dat_i(spr_dat_cpu),
|
|
|
// These connect IC to BIU
|
// These connect IC to BIU
|
.icbiu_rdy(icbiu_rdy),
|
.icbiu_rdy(icbiu_rdy),
|
.icbiu_datain(icbiu_from_biu),
|
.icbiu_datain(icbiu_from_biu),
|
.icbiu_addr(icbiu_addr),
|
.icbiu_addr(icbiu_addr),
|
.icbiu_read(icbiu_read),
|
.icbiu_read(icbiu_read),
|
.icbiu_sel(icbiu_sel),
|
.icbiu_sel(icbiu_sel)
|
|
|
// These connect IC to SPRS
|
|
.spr_dat_i(spr_dat_cpu)
|
|
);
|
);
|
|
|
//
|
//
|
// Instantiation of Instruction Cache
|
// Instantiation of Instruction Cache
|
//
|
//
|
Line 389... |
Line 400... |
.ic_stall(icfetch_stall),
|
.ic_stall(icfetch_stall),
|
.ic_fetchop(icfetch_op),
|
.ic_fetchop(icfetch_op),
|
.ic_en(ic_en),
|
.ic_en(ic_en),
|
|
|
// Connection CPU to external Trace port
|
// Connection CPU to external Trace port
|
.tp_dir_in(tp_dir_in),
|
.tp_dir_in(1'b0),
|
.tp_sel(tp_sel),
|
.tp_sel(2'b00),
|
.tp_in(tp_in),
|
.tp_in(32'h00000000),
|
.tp_out(tp_out),
|
.tp_out(),
|
|
|
// Connection IMMU and CPU internally
|
// Connection IMMU and CPU internally
|
.immu_en(immu_en),
|
.immu_en(immu_en),
|
.immuexcept_miss(immuexcept_miss),
|
.immuexcept_miss(immuexcept_miss),
|
.immuexcept_fault(immuexcept_fault),
|
.immuexcept_fault(immuexcept_fault),
|
Line 480... |
Line 491... |
.dclsu_dataout(dclsu_from_dc),
|
.dclsu_dataout(dclsu_from_dc),
|
.dclsu_stall(dclsu_stall),
|
.dclsu_stall(dclsu_stall),
|
.dclsu_unstall(dclsu_unstall),
|
.dclsu_unstall(dclsu_unstall),
|
.dc_en(dc_en),
|
.dc_en(dc_en),
|
|
|
|
// SPR access
|
|
.spr_cs(spr_cs[`SPR_GROUP_DC]),
|
|
.spr_write(spr_we),
|
|
.spr_addr(spr_addr),
|
|
.spr_dat_i(spr_dat_cpu),
|
|
|
// These connect DC to BIU
|
// These connect DC to BIU
|
.dcbiu_rdy(dcbiu_rdy),
|
.dcbiu_rdy(dcbiu_rdy),
|
.dcbiu_datain(dcbiu_from_biu),
|
.dcbiu_datain(dcbiu_from_biu),
|
.dcbiu_dataout(dcbiu_to_biu),
|
.dcbiu_dataout(dcbiu_to_biu),
|
.dcbiu_addr(dcbiu_addr),
|
.dcbiu_addr(dcbiu_addr),
|
Line 494... |
Line 511... |
// Trace port
|
// Trace port
|
.tp2w(tp2w)
|
.tp2w(tp2w)
|
);
|
);
|
|
|
//
|
//
|
|
// Instantiation of Debug Unit
|
|
//
|
|
du du(
|
|
// RISC Internal Interface
|
|
.clk(clk),
|
|
.rst(rst),
|
|
.dclsu_lsuop(dclsu_lsuop),
|
|
.icfetch_op(icfetch_op),
|
|
|
|
// DU's access to SPR unit
|
|
.du_stall(),
|
|
.du_addr(),
|
|
.du_dat_i(32'h00000000),
|
|
.du_dat_o(),
|
|
.du_read(),
|
|
.du_write(),
|
|
|
|
// Access to DU's SPRs
|
|
.spr_cs(spr_cs[`SPR_GROUP_DU]),
|
|
.spr_write(spr_we),
|
|
.spr_addr(spr_addr),
|
|
.spr_dat_i(spr_dat_cpu),
|
|
.spr_dat_o(),
|
|
|
|
// External Debug Interface
|
|
.dbg_stall_i(dbg_stall_i),
|
|
.dbg_dat_i(dbg_dat_i),
|
|
.dbg_adr_i(dbg_adr_i),
|
|
.dbg_op_i(dbg_op_i),
|
|
.dbg_ewt_i(dbg_ewt_i),
|
|
.dbg_lss_o(dbg_lss_o),
|
|
.dbg_is_o(dbg_is_o),
|
|
.dbg_wp_o(dbg_wp_o),
|
|
.dbg_bp_o(dbg_bp_o),
|
|
.dbg_dat_o(dbg_dat_o)
|
|
);
|
|
|
|
//
|
// Programmable interrupt controller
|
// Programmable interrupt controller
|
//
|
//
|
pic pic(
|
pic pic(
|
// RISC Internal Interface
|
// RISC Internal Interface
|
.clk(clk),
|
.clk(clk),
|