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

Subversion Repositories or1k

[/] [or1k/] [branches/] [mp3_stable/] [or1200/] [rtl/] [verilog/] [du.v] - Diff between revs 210 and 215

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

Rev 210 Rev 215
Line 56... Line 56...
//
//
 
 
module du(
module du(
        // RISC Internal Interface
        // RISC Internal Interface
        clk, rst,
        clk, rst,
 
        dclsu_lsuop, icfetch_op, ex_freeze, branch_op,
        du_stall, du_addr, du_dat_i, du_dat_o, du_read, du_write, du_except,
        du_stall, du_addr, du_dat_i, du_dat_o, du_read, du_write, du_except,
        spr_cs, spr_write, spr_addr, spr_dat_i, spr_dat_o,
        spr_cs, spr_write, spr_addr, spr_dat_i, spr_dat_o,
        dclsu_lsuop, icfetch_op,
 
 
 
        // External Debug Interface
        // External Debug Interface
        dbg_stall_i, dbg_dat_i, dbg_adr_i, dbg_op_i, dbg_ewt_i,
        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
        dbg_lss_o, dbg_is_o, dbg_wp_o, dbg_bp_o, dbg_dat_o
);
);
Line 77... Line 77...
//
//
// RISC Internal Interface
// RISC Internal Interface
//
//
input                           clk;            // Clock
input                           clk;            // Clock
input                           rst;            // Reset
input                           rst;            // Reset
 
input   [`LSUOP_WIDTH-1:0]       dclsu_lsuop;    // LSU status
 
input   [`FETCHOP_WIDTH-1:0]     icfetch_op;     // IFETCH unit status
 
input                           ex_freeze;      // EX stage freeze
 
input   [`BRANCHOP_WIDTH-1:0]    branch_op;      // Branch op
output                          du_stall;       // Debug Unit Stall
output                          du_stall;       // Debug Unit Stall
output  [aw-1:0]         du_addr;        // Debug Unit Address
output  [aw-1:0]         du_addr;        // Debug Unit Address
input   [dw-1:0]         du_dat_i;       // Debug Unit Data In
input   [dw-1:0]         du_dat_i;       // Debug Unit Data In
output  [dw-1:0]         du_dat_o;       // Debug Unit Data Out
output  [dw-1:0]         du_dat_o;       // Debug Unit Data Out
output                          du_read;        // Debug Unit Read Enable
output                          du_read;        // Debug Unit Read Enable
Line 89... Line 93...
input                           spr_cs;         // SPR Chip Select
input                           spr_cs;         // SPR Chip Select
input                           spr_write;      // SPR Read/Write
input                           spr_write;      // SPR Read/Write
input   [aw-1:0]         spr_addr;       // SPR Address
input   [aw-1:0]         spr_addr;       // SPR Address
input   [dw-1:0]         spr_dat_i;      // SPR Data Input
input   [dw-1:0]         spr_dat_i;      // SPR Data Input
output  [dw-1:0]         spr_dat_o;      // SPR Data Output
output  [dw-1:0]         spr_dat_o;      // SPR Data Output
input   [`LSUOP_WIDTH-1:0]       dclsu_lsuop;    // LSU status
 
input   [`FETCHOP_WIDTH-1:0]     icfetch_op;     // IFETCH unit status
 
 
 
//
//
// External Debug Interface
// External Debug Interface
//
//
input                           dbg_stall_i;    // External Stall Input
input                           dbg_stall_i;    // External Stall Input
Line 127... Line 129...
assign du_write = (dbg_op_i == `DU_OP_WRITESPR);
assign du_write = (dbg_op_i == `DU_OP_WRITESPR);
 
 
`ifdef DU_IMPLEMENTED
`ifdef DU_IMPLEMENTED
 
 
//
//
 
// Debug Mode Register 1 (only ST and BT implemented)
 
//
 
`ifdef DU_DMR1
 
reg     [23:22]                 dmr1;           // DMR1 implemented (ST & BT)
 
`else
 
wire    [23:22]                 dmr1;           // DMR1 not implemented
 
`endif
 
 
 
//
 
// Debug Mode Register 2 (not implemented)
 
//
 
`ifdef DU_DMR2
 
wire    [31:0]                   dmr2;           // DMR not implemented
 
`endif
 
 
 
//
// Debug Stop Register
// Debug Stop Register
//
//
`ifdef DU_DSR
`ifdef DU_DSR
reg     [13:0]                   dsr;            // DSR implemented
reg     [13:0]                   dsr;            // DSR implemented
`else
`else
Line 140... Line 158...
//
//
// Debug Reason Register
// Debug Reason Register
//
//
`ifdef DU_DRR
`ifdef DU_DRR
reg     [13:0]                   drr;            // DRR implemented
reg     [13:0]                   drr;            // DRR implemented
wire    [13:0]                   except_unmasked;
reg     [13:0]                   except_unmasked;
`else
`else
wire    [13:0]                   drr;            // DRR not implemented
wire    [13:0]                   drr;            // DRR not implemented
`endif
`endif
 
 
//
//
// Internal wires
// Internal wires
//
//
wire    [13:0]                   except_masked;
wire    [13:0]                   except_masked;
 
wire                            dmr1_sel;       // DMR1 select
wire                            dsr_sel;        // DSR select
wire                            dsr_sel;        // DSR select
wire                            drr_sel;        // DSR select
wire                            drr_sel;        // DRR select
 
reg                             dbg_bp_r;
`ifdef DU_READREGS
`ifdef DU_READREGS
reg     [31:0]                   spr_dat_o;
reg     [31:0]                   spr_dat_o;
`endif
`endif
 
 
//
//
// DU registers address decoder
// DU registers address decoder
//
//
 
`ifdef DU_DMR1
 
assign dmr1_sel = (spr_cs && (spr_addr[`SPROFS_BITS] == `DU_OFS_DMR1));
 
`endif
`ifdef DU_DSR
`ifdef DU_DSR
assign dsr_sel = (spr_cs &&
assign dsr_sel = (spr_cs && (spr_addr[`SPROFS_BITS] == `DU_OFS_DSR));
                  (spr_addr[`SPROFS_BITS] == `DU_OFS_DSR)) ? 1'b1 : 1'b0;
 
`endif
`endif
`ifdef DU_DRR
`ifdef DU_DRR
assign drr_sel = (spr_cs &&
assign drr_sel = (spr_cs && (spr_addr[`SPROFS_BITS] == `DU_OFS_DRR));
                  (spr_addr[`SPROFS_BITS] == `DU_OFS_DRR)) ? 1'b1 : 1'b0;
 
`endif
`endif
 
 
//
//
// Decode started exception
// Decode started exception
//
//
Line 195... Line 216...
// Get only 'stop' exceptions
// Get only 'stop' exceptions
//
//
assign except_masked = dsr & except_unmasked;
assign except_masked = dsr & except_unmasked;
 
 
//
//
// Assert dbg_bp_o if one of 'stop' exceptions gets activated
// dbg_bp_o is registered
//
//
assign dbg_bp_o = |except_masked;
assign dbg_bp_o = dbg_bp_r;
 
 
 
//
 
// Breakpoint activation register
 
//
 
always @(posedge clk or posedge rst)
 
        if (rst)
 
// SIMON
 
//              dbg_bp_r <= #1 1'b1;
 
                dbg_bp_r <= #1 1'b0;
 
        else
 
                dbg_bp_r <= |except_masked
 
`ifdef DU_DMR1_ST
 
                        | ~ex_freeze & dmr1[`DU_DMR1_ST]
 
`endif
 
`ifdef DU_DMR1_BT
 
                        | ~ex_freeze & (branch_op != `BRANCHOP_NOP) & dmr1[`DU_DMR1_BT]
 
`endif
 
                        ;
 
 
 
//
 
// Write to DMR1
 
//
 
`ifdef DU_DMR1
 
always @(posedge clk or posedge rst)
 
        if (rst)
 
                dmr1 <= 2'b00;
 
        else if (dmr1_sel && spr_write)
 
                dmr1 <= #1 spr_dat_i[23:22];
 
`else
 
assign dmr1 = 2'b00;
 
`endif
 
 
 
//
 
// DMR2 bits tied to zero
 
//
 
`ifdef DU_DMR2
 
assign dmr2 = 32'h0000_0000;
 
`endif
 
 
//
//
// Write to DSR
// Write to DSR
//
//
`ifdef DU_DSR
`ifdef DU_DSR
Line 221... Line 280...
always @(posedge clk or posedge rst)
always @(posedge clk or posedge rst)
        if (rst)
        if (rst)
                drr <= 14'b0;
                drr <= 14'b0;
        else if (drr_sel && spr_write)
        else if (drr_sel && spr_write)
                drr <= #1 spr_dat_i[13:0];
                drr <= #1 spr_dat_i[13:0];
        else (dbg_bp_o)
        else
                drr <= #1 drr | except_masked;
                drr <= #1 drr | except_masked;
`else
`else
assign drr = 14'b0;
assign drr = 14'b0;
`endif
`endif
 
 
Line 233... Line 292...
// Read DU registers
// Read DU registers
//
//
`ifdef DU_READREGS
`ifdef DU_READREGS
always @(spr_addr or dsr or drr)
always @(spr_addr or dsr or drr)
        case (spr_addr[`SPROFS_BITS])
        case (spr_addr[`SPROFS_BITS])
 
`ifdef DU_DMR1
 
                `DU_OFS_DMR1:
 
                        spr_dat_o = {8'b0, dmr1, 22'b0};
 
`endif
 
`ifdef DU_DMR2
 
                `DU_OFS_DMR2:
 
                        spr_dat_o = dmr2;
 
`endif
`ifdef DU_DSR
`ifdef DU_DSR
                `DU_OFS_DSR:
                `DU_OFS_DSR:
                        spr_dat_o = {18'b0, dsr};
                        spr_dat_o = {18'b0, dsr};
`endif
`endif
`ifdef DU_DRR
`ifdef DU_DRR

powered by: WebSVN 2.1.0

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