[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
計算機内部のデバイスを表す以下のクラスが提供される。これらのデバイスは ユニットを実装する際にユーザに対してハードウェアの持つ機能のみを提供す るものであり、ポートとパケットによる通信やクロック入力による自律動作を 行うものではない。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
キャッシュラインを表すクラスの基底クラス。オブジェクト内にキャッシュラ インのアドレスタグ、キャッシュラインデータを内包している。このクラスは 3つの型引数を取るクラステンプレートで、第一引数はアドレスの型、第二引 数はデータの型、第三引数はコンテナの型である。キャッシュラインの状態は 定義されていない。実際のキャッシュラインの状態は派生クラスで定義する必 要がある。
派生クラスは、以下の仮想関数を定義しなければならない。
virtual bool is_valid(void) const
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
有効と無効の2状態を持つ単純なキャッシュラインを表すクラス。
cache_line_base
クラスの派生クラスである。See section 7.1 cache_line_baseクラス.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ウェイ数分のキャッシュラインを表すクラス。キャッシュラインの型を引数と するクラステンプレートである。例えば2ウェイのキャッシュなら、このクラ スのオブジェクトは2つのキャッシュラインを内包する。また、ラインの追い 出し制御のためのLRUカウンタのテーブルも内蔵している。 See section 7.1 cache_line_baseクラス.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ダイレクトマップ方式のキャッシュを表すクラス。キャッシュラインの型を引 数とするテンプレートクラスである。キャッシュサイズ、ラインサイズは2のn 乗の値で指定する。2のn乗でない値を指定しても、自動的に指定した値より大 きい2 のn乗の値に補整される。
directmap_cache(address_type a, address_type b)
address_type cache_size(void) const
address_type line_size(void) const
size_t line_size_in_word(void) const
address_type tag_address(address_type) const
bool is_hit(address_type) const
bool is_valid(address_type) const
address_type read_address(address_type) const
data_type read(address_type) const
void write(address_type a, data_type b)
void clear(void)
void resize(address_type, address_type)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
セットアソシアティブキャッシュデバイスを表すクラス。キャッシュラインを 型引数とするテンプレートクラスとして実装されている。 See section 7.1 cache_line_baseクラス.
set_associative_cache(address_type, address_type, size_t)
const line_set_type& cache_line_set(address_type) const
line_set_type& cache_line_set(address_type)
address_type cache_size(void) const
address_type line_size(void) const
size_t way_size(void) const
size_t line_size_in_word(void) const
int max_lru_counter(void) const
address_type tag_address(address_type) const
size_t line_offset(address_type) const
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
パイプライン化された命令バッファを表すクラス。命令の型を型引数とするク
ラステンプレートである。step
関数を呼び出すごとにステージがシフ
トされる機能を持つ。例えばある時点でステージ0で参照されたステージは、
次の時点ではステージ1で参照されるようになる。
size_t size(void) const
value_type& operator[](size_t i)
void clear(void)
void step(void)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
レジスタファイルを表すクラス。レジスタの型を型引数とするクラステンプレー
トである。機能的にはSTLのvector
のサブセットに近いが、オブジェク
ト構築後にサイズを変更することはできない。
const_reference operator[](size_t i) const
reference operator[](size_t i)
size_type size(void) const
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プロセッサ内部のライトバッファを表すクラス。アドレスとデータの対をワー
ド単位で格納する待ち行列である。アドレス型address_type
とデータ
型address_type
を型引数としたクラステンプレートである。
size_t size(void) const
size_t length(void) const
bool empty(void) const
bool full(void) const
bool buffered(address_type) const
data_type read(address_type) const
address_type address(void) const
data_type data(void) const
void clear(void)
void push(address_type, data_type&)
void pop(void)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ハードウェアの記憶装置を表現するクラステンプレートである。アドレスの型
はクラスの第一型引数、格納するデータの型はクラスの第二型引数で示される。
このクラス自身はユニットを表現してはいない。時間の概念を持たず、状態遷
移も行われない。このmemory
クラスをシミュレータ上で実際に使用す
るためには、メモリコントローラに相当する機能を付加する必要がある。
memory
クラスは記憶領域の大きさの情報を管理している。記憶領域サ
イズはバイト単位で扱われる。
アドレス指定は、ワード単位のアクセスではワード単位のみがサポートされ、 ワード境界にまたがったアドレスを指定しても、ワード境界に補整されたアド レスが使用される。バイト単位のアクセスは、設定したエンディアンに応じて 行われる。エンディアンは何も指定しなければビッグエンディアンに設定され ている。
7.9.1 memoryクラスの定義 7.9.2 memoryクラスの使い方
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
memory(void)
memory(address_type a)
address_type size(void) const
bool is_valid(address_type) const
void resize(address_type)
bool is_big_endian(void) const
bool is_little_endian(void) const
void set_big_endian(void)
void set_little_endian(void)
data_type read(address_type) const
char_type read_char(address_type) const
void write(address_type, data_type)
void write_char(address_type, char_type)
void clear(void)
void dump(ostream&) const
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
memory
クラスは内部で動的にページ単位で自由記憶領域管理を行って
おり、要求されたサイズのメモリをすぐには確保しない。0でない値が書き込
まれた時点でページ毎に実体が確保される。従って1Gといったような莫大な量
の記憶領域を要求しても、実際に巨大な領域を使用しなければリソースが不足
することはない。
以下は先頭アドレス0x10000000
、サイズ1Gのメモリを確保し、アドレ
ス0x2000
から0x3000
までに0xffffffff
を書き込む例で
ある。
typedef unsigned word; const word size = 1024 * 1024 * 1024; // size: 1G const word area_top = 0x2000, area_size = 0x1000; memory<word, word> mem(size); for (int i = 0; i < area_size; i += sizeof(word)) { write(area_top + i, 0xffffffffU); } |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
メモリマップ上に配置されたメモリブロックを表すクラス。先頭アドレスとサ
イズを管理する。バッファ内のメモリはmemory
クラスで実装されてい
る。
mapped_memory(void)
mapped_memory(address_type a, address_type b)
address_type top(void) const
size_type size(void) const
address_type bottom(void) const
bool is_valid(address_type) const
address_type top(address_type)
void resize(size_type)
bool is_big_endian(void) const
bool is_little_endian(void) const
void set_big_endian(void)
void set_little_endian(void)
data_type read(address_type) const
char_type& read_char(address_type) const
void write(address_type, data_type)
void write_char(address_type, char_type)
void clear(void)
void dump(ostream&) const
void dump(ostream&, address_type a, address_type b) const
virtual void disassemble(ostream&, address_type a, address_type b) const
memory
クラスで
は何も処理を行わない関数になっている。ディスアセンブル機能を持つ継承ク
ラスで使用するために用意されている。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
プロセッサから見たアドレス空間を統合して扱うメモリマップを提供するクラ ス。登録されているメモリ全体をまとめて取り扱うためのインタフェースを持 つ。
bool is_valid(address_type) const
data_type read(address_type) const
char_type read_char(address_type) const
void write(address_type, data_type)
void write_char(address_type, char_type)
void insert(const mapped_memory_type&)
void erase(const mapped_memory_type&)
void dump(ostream&) const
void dump(ostream&, address_type a, address_type b) const
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
アーキテクチャ固有の情報を格納するデータベースを作成するクラス。メモリ マップの受け渡しや実行結果の参照など、ホストマシンとシミュレータ上のソ フトウェア間の通信に用いられる。実体は変数名と値の対を記憶する連想配列 である。各変数には整数値または文字列を格納することが可能である。
void set(const string&, T)
void set(const string&, const string&)
void unset(const string&)
void clear(void)
bool is_defined(const string&)
bool is_integer(const string&)
bool is_string(const string&)
T get_integer(const string&)
const string& get_string(const string&)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ファイルテーブルを管理するデータベースを作成するクラス。シミュレータ上 のソフトウェアのファイルアクセスに用いられる。ソフトウェア側からのファ イルアクセス要求を、標準入出力を含めたストリーム操作に写像する。ファイ ルテーブルは0からの通し番号で管理される1次元配列で、各ファイルは以下の 3つの属性、およびストリーム実体で管理される。
void fileio_map(void)
void fileio_map(size_t)
void set_standard_io(void)
cin
、ファイル1がcout
、
ファイル2がcerr
に接続される。
size_t size(void) const
void resize(size_t)
bool is_readable(size_t)
bool is_writable(size_t)
bool is_opened(size_t)
void set_input_stream(size_t, istream&)
void set_output_stream(size_t, ostream&)
bool open(size_t, const char*, int)
IO_FILE_OPEN_*
で規定されている。成功すれば真を返す。
bool close(size_t)
bool eof(size_t) const
bool good_input_stream(size_t) const
bool good_output_stream(size_t) const
bool put(size_t, char)
bool get(size_t, &char)
long seek(size_t, long, int)
lseek
操作を行う。位置の指定
方法は第三引数、位置は第二引数で指定される。位置の指定方法は
`io_protocol.h'のマクロIO_FILE_SEEK_*
で規定されている。
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
コマンドライン引数を管理するデータベースを作成するクラス。シミュレータ 上のソフトウェアがコマンドライン引数を読み込む際に用いられる。
int argc(void) const
argc
を参照する。
const char* argv(size_t) const
argv
を参照する。
void set(const char* const*)
void clear(void)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
クロスバを表すクラス。入力線数、出力線数を設定して使用する。内部に入力 線数×出力線数のスイッチがあり、それらを切替えることで入力線と出力線間 の接続を切替える。1つの入力に対して複数の出力を接続することができる。
crossbar(void)
crossbar(size_t a, size_t b)
size_t input_size(void) const
size_t output_size(void) const
void resize(size_t a, size_t b)
void clear(void)
inline void connect_crosspoint(size_t a, size_t b)
inline void disconnect_crosspoint(size_t a, size_t b)
bool is_connected_input_channel(size_t)
bool is_connected_output_channel(size_t)
inline void disconnect_input_channel(size_t)
inline void disconnect_output_channel(size_t)
size_t input_to_output_size(size_t)
size_t input_to_output_index(size_t a, size_t b = 0)
size_t output_to_input_index(size_t)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ネットワークインタフェースユニットを実装するためのサポートクラス。ルー タに接続して使用する。入力されたパケットを、複数フリットに展開してネッ トワークに送出する。
virtual_channel_output& channel(void)
bool empty(void) const
bool full(void) const
void put(packet_type*)
void clock(void)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
ネットワークインタフェースユニットを実装するためのサポートクラス。ルー タに接続して使用する。ネットワークから入力されたフリットの集合を、1つ のパケットに戻す。
virtual_channel_input& channel(void)
bool full(void) const
packet_type* get(void)
void clock(void)
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |