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

Subversion Repositories dbg_interface

[/] [dbg_interface/] [tags/] [sdram_test_working/] [rtl/] [verilog/] [dbg_trace.v] - Diff between revs 2 and 5

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

Rev 2 Rev 5
Line 43... Line 43...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.1.1.1  2001/09/13 13:49:19  mohor
 
// 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.
//
//
// Revision 1.2  2001/05/18 13:10:00  mohor
// Revision 1.2  2001/05/18 13:10:00  mohor
// Headers changed. All additional information is now avaliable in the README.txt file.
// Headers changed. All additional information is now avaliable in the README.txt file.
Line 59... Line 62...
 
 
`include "dbg_timescale.v"
`include "dbg_timescale.v"
`include "dbg_defines.v"
`include "dbg_defines.v"
 
 
// module Trace
// module Trace
module dbg_trace (Wp, Bp, DataIn, OpSelect, LsStatus, IStatus, CpuStall,
module dbg_trace (Wp, Bp, DataIn, OpSelect, LsStatus, IStatus, RiscStall,
                  Mclk, Reset, TraceChain, ContinMode, TraceEnable, RecSelDepend,
                  Mclk, Reset, TraceChain, ContinMode, TraceEnable,
                  WpTrigger, BpTrigger, LSSTrigger, ITrigger, TriggerOper, WpQualif,
                  WpTrigger, BpTrigger, LSSTrigger, ITrigger, TriggerOper, WpQualif,
                  BpQualif, LSSQualif, IQualif, QualifOper, RecordPC_Wp, RecordLSEA_Wp,
                  BpQualif, LSSQualif, IQualif, QualifOper, RecordPC, RecordLSEA,
                  RecordLDATA_Wp, RecordSDATA_Wp, RecordReadSPR_Wp, RecordWriteSPR_Wp,
                  RecordLDATA, RecordSDATA, RecordReadSPR, RecordWriteSPR,
                  RecordINSTR_Wp, RecordPC_Bp, RecordLSEA_Bp, RecordLDATA_Bp,
                  RecordINSTR,
                  RecordSDATA_Bp, RecordReadSPR_Bp, RecordWriteSPR_Bp, RecordINSTR_Bp,
 
                  WpTriggerValid, BpTriggerValid, LSSTriggerValid, ITriggerValid,
                  WpTriggerValid, BpTriggerValid, LSSTriggerValid, ITriggerValid,
                  WpQualifValid, BpQualifValid, LSSQualifValid, IQualifValid, ReadBuffer,
                  WpQualifValid, BpQualifValid, LSSQualifValid, IQualifValid, ReadBuffer,
                  WpStop, BpStop, LSSStop, IStop, StopOper, WpStopValid, BpStopValid,
                  WpStop, BpStop, LSSStop, IStop, StopOper, WpStopValid, BpStopValid,
                  LSSStopValid, IStopValid
                  LSSStopValid, IStopValid
                 );
                 );
Line 88... Line 90...
input        ReadBuffer;// Instruction for reading a sample from the Buffer
input        ReadBuffer;// Instruction for reading a sample from the Buffer
 
 
// from registers
// from registers
input ContinMode;
input ContinMode;
input TraceEnable;
input TraceEnable;
input RecSelDepend;
 
 
 
input [10:0] WpTrigger;
input [10:0] WpTrigger;
input        BpTrigger;
input        BpTrigger;
input [3:0]  LSSTrigger;
input [3:0]  LSSTrigger;
input [1:0]  ITrigger;
input [1:0]  ITrigger;
Line 108... Line 109...
input        BpStop;
input        BpStop;
input [3:0]  LSSStop;
input [3:0]  LSSStop;
input [1:0]  IStop;
input [1:0]  IStop;
input [1:0]  StopOper;
input [1:0]  StopOper;
 
 
input [10:0] RecordPC_Wp;
input RecordPC;
input [10:0] RecordLSEA_Wp;
input RecordLSEA;
input [10:0] RecordLDATA_Wp;
input RecordLDATA;
input [10:0] RecordSDATA_Wp;
input RecordSDATA;
input [10:0] RecordReadSPR_Wp;
input RecordReadSPR;
input [10:0] RecordWriteSPR_Wp;
input RecordWriteSPR;
input [10:0] RecordINSTR_Wp;
input RecordINSTR;
 
 
input RecordPC_Bp;
 
input RecordLSEA_Bp;
 
input RecordLDATA_Bp;
 
input RecordSDATA_Bp;
 
input RecordReadSPR_Bp;
 
input RecordWriteSPR_Bp;
 
input RecordINSTR_Bp;
 
 
 
input WpTriggerValid;
input WpTriggerValid;
input BpTriggerValid;
input BpTriggerValid;
input LSSTriggerValid;
input LSSTriggerValid;
input ITriggerValid;
input ITriggerValid;
Line 142... Line 135...
input IStopValid;
input IStopValid;
// end: from registers
// end: from registers
 
 
 
 
output [`OPSELECTWIDTH-1:0]  OpSelect; // Operation select (what kind of information is avaliable on the DataIn)
output [`OPSELECTWIDTH-1:0]  OpSelect; // Operation select (what kind of information is avaliable on the DataIn)
output        CpuStall;   // CPU stall (stalls the RISC)
output        RiscStall;  // CPU stall (stalls the RISC)
output [39:0] TraceChain; // Scan shain from the trace module
output [39:0] TraceChain; // Scan shain from the trace module
 
 
 
 
reg [`TRACECOUNTERWIDTH:0] Counter;
reg [`TRACECOUNTERWIDTH:0] Counter;
reg [`TRACECOUNTERWIDTH-1:0] WritePointer;
reg [`TRACECOUNTERWIDTH-1:0] WritePointer;
reg [`TRACECOUNTERWIDTH-1:0] ReadPointer;
reg [`TRACECOUNTERWIDTH-1:0] ReadPointer;
reg CpuStall;
reg RiscStall;
reg CpuStall_q;
reg RiscStall_q;
reg [`OPSELECTWIDTH-1:0] StallCounter;
reg [`OPSELECTWIDTH-1:0] StallCounter;
 
 
reg [`TRACESAMPLEWIDTH-1:0] Buffer[0:`TRACEBUFFERLENGTH-1];
reg [`TRACESAMPLEWIDTH-1:0] Buffer[0:`TRACEBUFFERLENGTH-1];
 
 
reg TriggerLatch;
reg TriggerLatch;
Line 262... Line 255...
end
end
 
 
 
 
/**********************************************************************************
/**********************************************************************************
*                                                                                 *
*                                                                                 *
*   CpuStall, counter and pointers generation                                     *
*   RiscStall, counter and pointers generation                                     *
*                                                                                 *
*                                                                                 *
**********************************************************************************/
**********************************************************************************/
reg BufferFullDetected;
reg BufferFullDetected;
reg [`OPSELECTIONCOUNTER-1:0] RecEnable;
wire [`OPSELECTIONCOUNTER-1:0] RecEnable;
 
 
wire BufferFull = Counter[`TRACECOUNTERWIDTH:0]==`TRACEBUFFERLENGTH;
wire BufferFull = Counter[`TRACECOUNTERWIDTH:0]==`TRACEBUFFERLENGTH;
wire BufferEmpty = Counter[`TRACECOUNTERWIDTH:0]==0;
wire BufferEmpty = Counter[`TRACECOUNTERWIDTH:0]==0;
wire IncrementCounter = CpuStall_q & ~(BufferFull | BufferFullDetected) & Qualifier & RecEnable[StallCounter];
wire IncrementCounter = RiscStall_q & ~(BufferFull | BufferFullDetected) & Qualifier & RecEnable[StallCounter];
wire IncrementPointer = CpuStall_q & (~BufferFull | ContinMode) & Qualifier & RecEnable[StallCounter];
wire IncrementPointer = RiscStall_q & (~BufferFull | ContinMode) & Qualifier & RecEnable[StallCounter];
 
 
wire WriteSample = IncrementPointer;
wire WriteSample = IncrementPointer;
 
 
wire Decrement = ReadBuffer & ~BufferEmpty & (~ContinMode | ContinMode & ~TraceEnable);
wire Decrement = ReadBuffer & ~BufferEmpty & (~ContinMode | ContinMode & ~TraceEnable);
wire CounterEn = IncrementCounter ^ Decrement;
wire CounterEn = IncrementCounter ^ Decrement;
Line 290... Line 283...
always @(posedge Mclk)
always @(posedge Mclk)
begin
begin
  Qualifier_mclk<=#Tp Qualifier;
  Qualifier_mclk<=#Tp Qualifier;
  BufferFull_q<=#Tp BufferFull;
  BufferFull_q<=#Tp BufferFull;
  BufferFull_2q<=#Tp BufferFull_q;
  BufferFull_2q<=#Tp BufferFull_q;
  CpuStall_q <=#Tp CpuStall;
  RiscStall_q <=#Tp RiscStall;
end
end
 
 
 
 
wire AsyncSetCpuStall = Qualifier & ~Qualifier_mclk & TriggerLatch | Qualifier_mclk & Trigger & ~TriggerLatch |
wire AsyncSetCpuStall = Qualifier & ~Qualifier_mclk & TriggerLatch | Qualifier_mclk & Trigger & ~TriggerLatch |
                        Qualifier & Trigger & ~Qualifier_mclk & ~TriggerLatch;
                        Qualifier & Trigger & ~Qualifier_mclk & ~TriggerLatch;
Line 358... Line 351...
 
 
 
 
always @(posedge Mclk or posedge AsyncSetCpuStall)
always @(posedge Mclk or posedge AsyncSetCpuStall)
begin
begin
  if(AsyncSetCpuStall)
  if(AsyncSetCpuStall)
    CpuStall<=#Tp 1;
    RiscStall<=#Tp 1;
  else
  else
  if(SyncSetCpuStall)
  if(SyncSetCpuStall)
    CpuStall<=#Tp 1;
    RiscStall<=#Tp 1;
  else
  else
  if(ResetCpuStall)
  if(ResetCpuStall)
    CpuStall<=#Tp 0;
    RiscStall<=#Tp 0;
end
end
 
 
 
 
always @(posedge Mclk)
always @(posedge Mclk)
begin
begin
  if(ResetStallCounter)
  if(ResetStallCounter)
    StallCounter<=#Tp 0;
    StallCounter<=#Tp 0;
  else
  else
  if(CpuStall_q & (~BufferFull | ContinMode))
  if(RiscStall_q & (~BufferFull | ContinMode))
    StallCounter<=#Tp StallCounter+1;
    StallCounter<=#Tp StallCounter+1;
end
end
 
 
assign ResetStallCounter = StallCounter==(`OPSELECTIONCOUNTER-1) & ~BufferFull | Reset;
assign ResetStallCounter = StallCounter==(`OPSELECTIONCOUNTER-1) & ~BufferFull | Reset;
 
 
Line 417... Line 410...
/**********************************************************************************
/**********************************************************************************
*                                                                                 *
*                                                                                 *
*   Selecting which parts are going to be recorded as part of the sample          *
*   Selecting which parts are going to be recorded as part of the sample          *
*                                                                                 *
*                                                                                 *
**********************************************************************************/
**********************************************************************************/
always @(posedge Mclk or posedge Reset)
assign RecEnable = {1'b0, RecordINSTR,  RecordWriteSPR,  RecordReadSPR,  RecordSDATA,  RecordLDATA,  RecordLSEA,  RecordPC};
begin
 
  if(Reset)
 
    RecEnable<=#Tp 0;
 
  else
 
  if(CpuStall)
 
    begin
 
      RecEnable<=#Tp {1'b0, RecordINSTR_Wp[0],  RecordWriteSPR_Wp[0],  RecordReadSPR_Wp[0],  RecordSDATA_Wp[0],  RecordLDATA_Wp[0],  RecordLSEA_Wp[0],  RecordPC_Wp[0]} & {`OPSELECTIONCOUNTER{Wp[0]}}   |
 
                     {1'b0, RecordINSTR_Wp[1],  RecordWriteSPR_Wp[1],  RecordReadSPR_Wp[1],  RecordSDATA_Wp[1],  RecordLDATA_Wp[1],  RecordLSEA_Wp[1],  RecordPC_Wp[1]} & {`OPSELECTIONCOUNTER{Wp[1]}}   |
 
                     {1'b0, RecordINSTR_Wp[2],  RecordWriteSPR_Wp[2],  RecordReadSPR_Wp[2],  RecordSDATA_Wp[2],  RecordLDATA_Wp[2],  RecordLSEA_Wp[2],  RecordPC_Wp[2]} & {`OPSELECTIONCOUNTER{Wp[2]}}   |
 
                     {1'b0, RecordINSTR_Wp[3],  RecordWriteSPR_Wp[3],  RecordReadSPR_Wp[3],  RecordSDATA_Wp[3],  RecordLDATA_Wp[3],  RecordLSEA_Wp[3],  RecordPC_Wp[3]} & {`OPSELECTIONCOUNTER{Wp[3]}}   |
 
                     {1'b0, RecordINSTR_Wp[4],  RecordWriteSPR_Wp[4],  RecordReadSPR_Wp[4],  RecordSDATA_Wp[4],  RecordLDATA_Wp[4],  RecordLSEA_Wp[4],  RecordPC_Wp[4]} & {`OPSELECTIONCOUNTER{Wp[4]}}   |
 
                     {1'b0, RecordINSTR_Wp[5],  RecordWriteSPR_Wp[5],  RecordReadSPR_Wp[5],  RecordSDATA_Wp[5],  RecordLDATA_Wp[5],  RecordLSEA_Wp[5],  RecordPC_Wp[5]} & {`OPSELECTIONCOUNTER{Wp[5]}}   |
 
                     {1'b0, RecordINSTR_Wp[6],  RecordWriteSPR_Wp[6],  RecordReadSPR_Wp[6],  RecordSDATA_Wp[6],  RecordLDATA_Wp[6],  RecordLSEA_Wp[6],  RecordPC_Wp[6]} & {`OPSELECTIONCOUNTER{Wp[6]}}   |
 
                     {1'b0, RecordINSTR_Wp[7],  RecordWriteSPR_Wp[7],  RecordReadSPR_Wp[7],  RecordSDATA_Wp[7],  RecordLDATA_Wp[7],  RecordLSEA_Wp[7],  RecordPC_Wp[7]} & {`OPSELECTIONCOUNTER{Wp[7]}}   |
 
                     {1'b0, RecordINSTR_Wp[8],  RecordWriteSPR_Wp[8],  RecordReadSPR_Wp[8],  RecordSDATA_Wp[8],  RecordLDATA_Wp[8],  RecordLSEA_Wp[8],  RecordPC_Wp[8]} & {`OPSELECTIONCOUNTER{Wp[8]}}   |
 
                     {1'b0, RecordINSTR_Wp[9],  RecordWriteSPR_Wp[9],  RecordReadSPR_Wp[9],  RecordSDATA_Wp[9],  RecordLDATA_Wp[9],  RecordLSEA_Wp[9],  RecordPC_Wp[9]} & {`OPSELECTIONCOUNTER{Wp[9]}}   |
 
                     {1'b0, RecordINSTR_Wp[10], RecordWriteSPR_Wp[10], RecordReadSPR_Wp[10], RecordSDATA_Wp[10], RecordLDATA_Wp[10], RecordLSEA_Wp[10], RecordPC_Wp[10]}& {`OPSELECTIONCOUNTER{Wp[10]}}  |
 
                     {1'b0, RecordINSTR_Bp,     RecordWriteSPR_Bp,     RecordReadSPR_Bp,     RecordSDATA_Bp,     RecordLDATA_Bp,     RecordLSEA_Bp,     RecordPC_Bp}    & {`OPSELECTIONCOUNTER{Bp}};
 
    end
 
end
 
 
 
 
 
endmodule // Trace
endmodule // Trace
 No newline at end of file
 No newline at end of file
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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