Line 26... |
Line 26... |
|
|
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
|
|
// $Id$
|
// $Id$
|
|
|
|
|
#ifndef TAP_ACTION_DR_SCAN__H
|
#ifndef TAP_ACTION_DR_SCAN__H
|
#define TAP_ACTION_DR_SCAN__H
|
#define TAP_ACTION_DR_SCAN__H
|
|
|
#include <stdint.h>
|
#include <stdint.h>
|
|
|
#include "TapAction.h"
|
#include "TapAction.h"
|
#include "TapStateMachine.h"
|
#include "TapStateMachine.h"
|
|
|
|
|
//! Class to represent a TAP DR-Scan action.
|
//! Class to represent a TAP DR-Scan action.
|
|
|
//! JTAG data registers can be huge and are represented generically as arrays
|
//! JTAG data registers can be huge and are represented generically as arrays
|
//! of uint64_t. However for efficiency versions of methods are provided based
|
//! of uint64_t. However for efficiency versions of methods are provided based
|
//! on a single uint64_t.
|
//! on a single uint64_t.
|
|
|
//! The SystemC classes for large unsigned ints are fabulously inefficient in
|
//! The SystemC classes for large unsigned ints are fabulously inefficient in
|
//! the reference implementation, so are not used here.
|
//! the reference implementation, so are not used here.
|
|
|
class TapActionDRScan
|
class TapActionDRScan:public TapAction {
|
: public TapAction
|
|
{
|
|
public:
|
public:
|
|
|
// Constructors and destructor
|
// Constructors and destructor
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
uint64_t _dRegInArray[],
|
uint64_t _dRegInArray[], int _dRegSize);
|
int _dRegSize);
|
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
uint64_t _dRegIn,
|
uint64_t _dRegIn, int _dRegSize);
|
int _dRegSize);
|
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
uint64_t _dRegInArray[],
|
uint64_t _dRegInArray[],
|
int _dRegSize,
|
int _dRegSize,
|
int _goToPauseState,
|
int _goToPauseState, int _bitsBeforePauseState);
|
int _bitsBeforePauseState);
|
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
TapActionDRScan (sc_core::sc_event *_doneEvent,
|
uint64_t _dRegIn,
|
uint64_t _dRegIn,
|
int _dRegSize,
|
int _dRegSize,
|
int _goToPauseState,
|
int _goToPauseState, int _bitsBeforePauseState);
|
int _bitsBeforePauseState);
|
|
~TapActionDRScan ();
|
~TapActionDRScan ();
|
|
|
// Get the shifted out value
|
// Get the shifted out value
|
void getDRegOut (uint64_t dRegArray[]);
|
void getDRegOut (uint64_t dRegArray[]);
|
uint64_t getDRegOut ();
|
uint64_t getDRegOut ();
|
|
|
|
|
protected:
|
protected:
|
|
|
// Process the action for IR-Scan
|
// Process the action for IR-Scan
|
bool process (TapStateMachine *tapStateMachine,
|
bool process (TapStateMachine *tapStateMachine,
|
bool &tdi,
|
bool & tdi, bool tdo, bool & tms);
|
bool tdo,
|
|
bool &tms);
|
|
|
|
|
|
private:
|
private:
|
|
|
//! Number of bits in the data register
|
//! Number of bits in the data register
|
int dRegBitSize;
|
int dRegBitSize;
|