Line 43... |
Line 43... |
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
//
|
//
|
// CVS Revision History
|
// CVS Revision History
|
//
|
//
|
// $Log: not supported by cvs2svn $
|
// $Log: not supported by cvs2svn $
|
|
// Revision 1.2 2001/09/18 14:13:47 mohor
|
|
// Trace fixed. Some registers changed, trace simplified.
|
|
//
|
// Revision 1.1.1.1 2001/09/13 13:49:19 mohor
|
// Revision 1.1.1.1 2001/09/13 13:49:19 mohor
|
// Initial official release.
|
// Initial official release.
|
//
|
//
|
// Revision 1.3 2001/06/01 22:22:35 mohor
|
// Revision 1.3 2001/06/01 22:22:35 mohor
|
// This is a backup. It is not a fully working version. Not for use, yet.
|
// This is a backup. It is not a fully working version. Not for use, yet.
|
Line 60... |
Line 63... |
//
|
//
|
|
|
`include "dbg_timescale.v"
|
`include "dbg_timescale.v"
|
`include "dbg_defines.v"
|
`include "dbg_defines.v"
|
|
|
module dbg_registers(DataIn, DataOut, Address, RW, Access, Clk, Reset,
|
module dbg_registers(DataIn, DataOut, Address, RW, Access, Clk, Bp, Reset,
|
`ifdef TRACE_ENABLED
|
`ifdef TRACE_ENABLED
|
ContinMode,
|
ContinMode,
|
TraceEnable, WpTrigger, BpTrigger, LSSTrigger,
|
TraceEnable, WpTrigger, BpTrigger, LSSTrigger,
|
ITrigger, TriggerOper, WpQualif, BpQualif, LSSQualif, IQualif,
|
ITrigger, TriggerOper, WpQualif, BpQualif, LSSQualif, IQualif,
|
QualifOper, RecordPC, RecordLSEA, RecordLDATA,
|
QualifOper, RecordPC, RecordLSEA, RecordLDATA,
|
Line 83... |
Line 86... |
input [4:0] Address;
|
input [4:0] Address;
|
|
|
input RW;
|
input RW;
|
input Access;
|
input Access;
|
input Clk;
|
input Clk;
|
|
input Bp;
|
input Reset;
|
input Reset;
|
|
|
output [31:0] DataOut;
|
output [31:0] DataOut;
|
reg [31:0] DataOut;
|
reg [31:0] DataOut;
|
|
|
Line 137... |
Line 141... |
`endif
|
`endif
|
|
|
output RiscStall;
|
output RiscStall;
|
output RiscReset;
|
output RiscReset;
|
|
|
|
|
wire MODER_Acc = (Address == `MODER_ADR) & Access;
|
wire MODER_Acc = (Address == `MODER_ADR) & Access;
|
wire RISCOP_Acc = (Address == `RISCOP_ADR) & Access;
|
wire RISCOP_Acc = (Address == `RISCOP_ADR) & Access;
|
`ifdef TRACE_ENABLED
|
`ifdef TRACE_ENABLED
|
wire TSEL_Acc = (Address == `TSEL_ADR) & Access;
|
wire TSEL_Acc = (Address == `TSEL_ADR) & Access;
|
wire QSEL_Acc = (Address == `QSEL_ADR) & Access;
|
wire QSEL_Acc = (Address == `QSEL_ADR) & Access;
|
Line 170... |
Line 173... |
wire RECSEL_Rd = RECSEL_Acc & ~RW;
|
wire RECSEL_Rd = RECSEL_Acc & ~RW;
|
`endif
|
`endif
|
|
|
|
|
wire [31:0] MODEROut;
|
wire [31:0] MODEROut;
|
wire [1:0] RISCOPOut;
|
wire [1:1] RISCOPOut;
|
|
|
`ifdef TRACE_ENABLED
|
`ifdef TRACE_ENABLED
|
wire [31:0] TSELOut;
|
wire [31:0] TSELOut;
|
wire [31:0] QSELOut;
|
wire [31:0] QSELOut;
|
wire [31:0] SSELOut;
|
wire [31:0] SSELOut;
|
Line 188... |
Line 191... |
`else
|
`else
|
assign MODEROut[31:0] = 32'h0000;
|
assign MODEROut[31:0] = 32'h0000;
|
`endif
|
`endif
|
|
|
|
|
dbg_register #(2) RISCOP (.DataIn(DataIn[1:0]), .DataOut(RISCOPOut[1:0]), .Write(RISCOP_Wr), .Clk(Clk), .Reset(Reset), .Default(`RISCOP_DEF));
|
reg RiscStallBp;
|
|
always @(posedge Clk or posedge Reset)
|
|
begin
|
|
if(Reset)
|
|
RiscStallBp <= 1'b0;
|
|
else
|
|
if(Bp) // Breakpoint sets bit
|
|
RiscStallBp <= 1'b1;
|
|
else
|
|
if(RISCOP_Wr) // Register access can set or clear bit
|
|
RiscStallBp <= DataIn[0];
|
|
end
|
|
|
|
dbg_register #(1) RISCOP (.DataIn(DataIn[1]), .DataOut(RISCOPOut[1]), .Write(RISCOP_Wr), .Clk(Clk), .Reset(Reset), .Default(1'b0));
|
|
|
|
|
`ifdef TRACE_ENABLED
|
`ifdef TRACE_ENABLED
|
dbg_register #(2) MODER (.DataIn(DataIn[17:16]), .DataOut(MODEROut[17:16]), .Write(MODER_Wr), .Clk(Clk), .Reset(Reset), .Default(`MODER_DEF));
|
dbg_register #(2) MODER (.DataIn(DataIn[17:16]), .DataOut(MODEROut[17:16]), .Write(MODER_Wr), .Clk(Clk), .Reset(Reset), .Default(`MODER_DEF));
|
dbg_register #(32) TSEL (.DataIn(DataIn), .DataOut(TSELOut), .Write(TSEL_Wr), .Clk(Clk), .Reset(Reset), .Default(`TSEL_DEF));
|
dbg_register #(32) TSEL (.DataIn(DataIn), .DataOut(TSELOut), .Write(TSEL_Wr), .Clk(Clk), .Reset(Reset), .Default(`TSEL_DEF));
|
dbg_register #(32) QSEL (.DataIn(DataIn), .DataOut(QSELOut), .Write(QSEL_Wr), .Clk(Clk), .Reset(Reset), .Default(`QSEL_DEF));
|
dbg_register #(32) QSEL (.DataIn(DataIn), .DataOut(QSELOut), .Write(QSEL_Wr), .Clk(Clk), .Reset(Reset), .Default(`QSEL_DEF));
|
Line 204... |
Line 221... |
|
|
always @ (posedge Clk)
|
always @ (posedge Clk)
|
begin
|
begin
|
if(MODER_Rd) DataOut<= #Tp MODEROut;
|
if(MODER_Rd) DataOut<= #Tp MODEROut;
|
else
|
else
|
if(RISCOP_Rd) DataOut<= #Tp {30'h0, RISCOPOut};
|
if(RISCOP_Rd) DataOut<= #Tp {30'h0, RISCOPOut[1], RiscStall};
|
`ifdef TRACE_ENABLED
|
`ifdef TRACE_ENABLED
|
else
|
else
|
if(TSEL_Rd) DataOut<= #Tp TSELOut;
|
if(TSEL_Rd) DataOut<= #Tp TSELOut;
|
else
|
else
|
if(QSEL_Rd) DataOut<= #Tp QSELOut;
|
if(QSEL_Rd) DataOut<= #Tp QSELOut;
|
Line 262... |
Line 279... |
assign RecordReadSPR = RECSELOut[4];
|
assign RecordReadSPR = RECSELOut[4];
|
assign RecordWriteSPR = RECSELOut[5];
|
assign RecordWriteSPR = RECSELOut[5];
|
assign RecordINSTR = RECSELOut[6];
|
assign RecordINSTR = RECSELOut[6];
|
`endif
|
`endif
|
|
|
assign RiscStall = RISCOPOut[0];
|
assign RiscStall = Bp | RiscStallBp; // Bp asynchronously sets the RiscStall, then RiscStallBp (from register) holds it active
|
assign RiscReset = RISCOPOut[1];
|
assign RiscReset = RISCOPOut[1];
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|