クラス Onikiri::PipelineLatch

#include <PipelineLatch.h>

Onikiri::PipelineLatchに対する継承グラフ

Inheritance graph
[凡例]
Onikiri::PipelineLatchのコラボレーション図

Collaboration graph
[凡例]
すべてのメンバ一覧

Public 型

typedef List::iterator iterator
typedef fixed_sized_buffer<
OpIterator, MAX_LATCH_SIZE,
MaxLatchSize
List
 MAX_LATCH_SIZE = 256
enum  MaxLatchSize { MAX_LATCH_SIZE = 256 }

Public メソッド

iterator begin ()
virtual void BeginStall ()
virtual void Delete (OpIterator op)
void EnableDumpStall (bool enable)
virtual void End ()
iterator end ()
virtual void EndStall ()
iterator erase (iterator i)
 PipelineLatch (const char *name="")
void pop_front ()
virtual void Receive (OpIterator op)
size_t size ()
virtual void Transition ()

Protected 型

typedef ClockedResourceBase BaseType

Protected メソッド

void DumpStallBegin ()
void DumpStallEnd ()
bool FindAndEraseFromLatch (List *latch, OpIterator op)
void UpdateLatch ()

Protected 変数

bool m_enableDumpStall
List m_latchIn
List m_latchOut
bool m_latchOutIsStalled

説明

PipelineLatch.h42 行で定義されています。


型定義

typedef ClockedResourceBase Onikiri::PipelineLatch::BaseType [protected]

PipelineLatch.h61 行で定義されています。

typedef List::iterator Onikiri::PipelineLatch::iterator

PipelineLatch.h51 行で定義されています。

typedef fixed_sized_buffer< OpIterator, MAX_LATCH_SIZE, MaxLatchSize > Onikiri::PipelineLatch::List

PipelineLatch.h50 行で定義されています。


列挙型

enum Onikiri::PipelineLatch::MaxLatchSize

列挙型の値:
MAX_LATCH_SIZE 

PipelineLatch.h49 行で定義されています。

00049 { MAX_LATCH_SIZE = 256 };


コンストラクタとデストラクタ

PipelineLatch::PipelineLatch ( const char *  name = ""  ) 

PipelineLatch.cpp85 行で定義されています。

00085                                                : 
00086     BaseType( name ),
00087     m_enableDumpStall( true ),
00088     m_latchOutIsStalled( false )
00089 {
00090 }


関数

iterator Onikiri::PipelineLatch::begin (  )  [inline]

PipelineLatch.h53 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::begin()m_latchOut.

参照元 Onikiri::Renamer::Evaluate()Onikiri::Dispatcher::Evaluate()Onikiri::Renamer::Update()Onikiri::Dispatcher::Update().

00053 {   return m_latchOut.begin();      }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void PipelineLatch::BeginStall (  )  [virtual]

Onikiri::ClockedResourceBaseを再定義しています。

PipelineLatch.cpp130 行で定義されています。

参照先 Onikiri::ClockedResourceBase::BeginStall()DumpStallBegin().

00131 {
00132     BaseType::BeginStall();
00133     DumpStallBegin();
00134 }

関数の呼び出しグラフ:

void PipelineLatch::Delete ( OpIterator  op  )  [virtual]

PipelineLatch.cpp142 行で定義されています。

参照先 FindAndEraseFromLatch()m_latchInm_latchOut.

参照元 Onikiri::PipelineNodeBase::Flush()Onikiri::PipelineNodeBase::Retire().

00143 {
00144     if( FindAndEraseFromLatch( &m_latchIn, op ) ){
00145         return;
00146     }
00147     if( FindAndEraseFromLatch( &m_latchOut, op ) ){
00148         return;
00149     }
00150 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void PipelineLatch::DumpStallBegin (  )  [protected]

PipelineLatch.cpp54 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::begin()Onikiri::Dumper::DumpStallBegin()Onikiri::fixed_sized_buffer< T, SIZE, Tag >::end()Onikiri::g_dumperm_enableDumpStallm_latchOutm_latchOutIsStalled.

参照元 BeginStall()Transition().

00055 {
00056     if( m_enableDumpStall && !m_latchOutIsStalled ){
00057         for( iterator i = m_latchOut.begin(); i != m_latchOut.end(); ++i ){
00058             g_dumper.DumpStallBegin( *i );
00059         }
00060         m_latchOutIsStalled = true;
00061     }
00062 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void PipelineLatch::DumpStallEnd (  )  [protected]

PipelineLatch.cpp64 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::begin()Onikiri::Dumper::DumpStallEnd()Onikiri::fixed_sized_buffer< T, SIZE, Tag >::end()Onikiri::g_dumperm_enableDumpStallm_latchOutm_latchOutIsStalled.

参照元 EndStall().

00065 {
00066     if( m_enableDumpStall && m_latchOutIsStalled ){
00067         for( iterator i = m_latchOut.begin(); i != m_latchOut.end(); ++i ){
00068             g_dumper.DumpStallEnd( *i );
00069         }
00070         m_latchOutIsStalled = false;
00071     }
00072 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void PipelineLatch::EnableDumpStall ( bool  enable  ) 

PipelineLatch.cpp152 行で定義されています。

参照先 m_enableDumpStall.

00153 {
00154     m_enableDumpStall = enable;
00155 }

void PipelineLatch::End (  )  [virtual]

Onikiri::ClockedResourceBaseを再定義しています。

PipelineLatch.cpp103 行で定義されています。

参照先 ASSERTOnikiri::ClockedResourceBase::End()Onikiri::ClockedResourceBase::IsStalledThisCycle()m_latchInm_latchOutOnikiri::fixed_sized_buffer< T, SIZE, Tag >::size()UpdateLatch().

00104 {
00105     ASSERT( 
00106         !( !IsStalledThisCycle() && m_latchOut.size() > 0 ), 
00107         "Outputs are not picked on an un-stalled cycle."
00108     );
00109 
00110     ASSERT( 
00111         !( m_latchIn.size() > 0 && m_latchOut.size() > 0 ), 
00112         "Data on the pipeline latch is overwritten by a upper pipeline. "
00113         "The data has not processed for pipeline stall."
00114     );
00115 
00116     UpdateLatch();
00117     BaseType::End();
00118 }

関数の呼び出しグラフ:

iterator Onikiri::PipelineLatch::end (  )  [inline]

PipelineLatch.h54 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::end()m_latchOut.

参照元 Onikiri::Renamer::Evaluate()Onikiri::Dispatcher::Evaluate()Onikiri::Renamer::Update()Onikiri::Dispatcher::Update().

00054 {   return m_latchOut.end();        }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void PipelineLatch::EndStall (  )  [virtual]

Onikiri::ClockedResourceBaseを再定義しています。

PipelineLatch.cpp136 行で定義されています。

参照先 DumpStallEnd()Onikiri::ClockedResourceBase::EndStall().

00137 {
00138     BaseType::EndStall();
00139     DumpStallEnd();
00140 };

関数の呼び出しグラフ:

iterator Onikiri::PipelineLatch::erase ( iterator  i  )  [inline]

PipelineLatch.h55 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::erase()m_latchOut.

参照元 Onikiri::Renamer::Update()Onikiri::Dispatcher::Update().

00056                             {   return m_latchOut.erase( i );   }

関数の呼び出しグラフ:

Here is the caller graph for this function:

bool PipelineLatch::FindAndEraseFromLatch ( List latch,
OpIterator  op 
) [protected]

PipelineLatch.cpp40 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::begin()Onikiri::fixed_sized_buffer< T, SIZE, Tag >::end()Onikiri::fixed_sized_buffer< T, SIZE, Tag >::erase().

参照元 Delete().

00041 {
00042     iterator target = 
00043         std::find( latch->begin(), latch->end(), op );
00044 
00045     if( target != latch->end() ){
00046         latch->erase( target );
00047         return true;
00048     }
00049     else{
00050         return false;
00051     }
00052 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void Onikiri::PipelineLatch::pop_front (  )  [inline]

PipelineLatch.h57 行で定義されています。

参照先 m_latchOutOnikiri::fixed_sized_buffer< T, SIZE, Tag >::pop_front().

00057 {   m_latchOut.pop_front();         }

関数の呼び出しグラフ:

void PipelineLatch::Receive ( OpIterator  op  )  [virtual]

PipelineLatch.cpp92 行で定義されています。

参照先 ASSERTOnikiri::ClockedResourceBase::IsStalledThisCycle()m_latchInOnikiri::fixed_sized_buffer< T, SIZE, Tag >::push_back().

参照元 Onikiri::PipelineNodeBase::ExitUpperPipeline().

00093 {
00094     ASSERT(
00095         !IsStalledThisCycle(),
00096         "The latch is written on a stalled cycle."
00097     );
00098     m_latchIn.push_back( op );
00099 }

関数の呼び出しグラフ:

Here is the caller graph for this function:

size_t Onikiri::PipelineLatch::size (  )  [inline]

PipelineLatch.h58 行で定義されています。

参照先 m_latchOutOnikiri::fixed_sized_buffer< T, SIZE, Tag >::size().

参照元 Onikiri::Scheduler::Begin().

00058 {   return m_latchOut.size();       }

関数の呼び出しグラフ:

Here is the caller graph for this function:

void PipelineLatch::Transition (  )  [virtual]

Onikiri::ClockedResourceBaseを再定義しています。

PipelineLatch.cpp120 行で定義されています。

参照先 DumpStallBegin()Onikiri::ClockedResourceBase::IsStalledThisCycle()Onikiri::ClockedResourceBase::Transition().

00121 {
00122     BaseType::Transition();
00123     if( IsStalledThisCycle() ){
00124         // BeginStall is only called 
00125         DumpStallBegin();
00126     }
00127 }

関数の呼び出しグラフ:

void PipelineLatch::UpdateLatch (  )  [protected]

PipelineLatch.cpp75 行で定義されています。

参照先 Onikiri::fixed_sized_buffer< T, SIZE, Tag >::begin()Onikiri::fixed_sized_buffer< T, SIZE, Tag >::end()Onikiri::fixed_sized_buffer< T, SIZE, Tag >::erase()m_latchInm_latchOutOnikiri::fixed_sized_buffer< T, SIZE, Tag >::push_back().

参照元 End().

00076 {
00077     typedef List::iterator iterator;
00078     for( iterator i = m_latchIn.begin(); i != m_latchIn.end(); ){
00079         m_latchOut.push_back( *i );
00080         i = m_latchIn.erase( i );
00081     }
00082 }

関数の呼び出しグラフ:

Here is the caller graph for this function:


変数

bool Onikiri::PipelineLatch::m_enableDumpStall [protected]

PipelineLatch.h65 行で定義されています。

参照元 DumpStallBegin()DumpStallEnd()EnableDumpStall().

List Onikiri::PipelineLatch::m_latchIn [protected]

PipelineLatch.h63 行で定義されています。

参照元 Delete()End()Receive()UpdateLatch().

List Onikiri::PipelineLatch::m_latchOut [protected]

PipelineLatch.h64 行で定義されています。

参照元 begin()Delete()DumpStallBegin()DumpStallEnd()end()End()erase()pop_front()size()UpdateLatch().

bool Onikiri::PipelineLatch::m_latchOutIsStalled [protected]

PipelineLatch.h66 行で定義されています。

参照元 DumpStallBegin()DumpStallEnd().


このクラスの説明は次のファイルから生成されました:
Onikiri2に対してTue Jun 18 15:14:22 2013に生成されました。  doxygen 1.4.7