[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. パケット

パケットはユニット間でやり取りされる情報として定義される。同期ユニット および非同期ユニットは、ポートを通じて他のユニットとパケットを送受信す ることで通信を行う。

全てのパケットはpacketクラスの派生クラスとして実装される。

5.1 packetクラス  
5.2 bus_packet_baseクラス  
5.3 bus_packetクラス  
5.4 network_packet_baseクラス  
5.5 network_packetクラス  


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 packetクラス

パケットを表す全てのクラスの基底クラス。ハードウェアユニット間でやり取 りされる情報は全てパケットとして取り扱う。バス上を通過する情報、ルータ 内を通過するパケットなどはこのpacketクラスの派生クラスとして実 装される。

packetクラスは抽象クラスであり、root_objectクラスを基底 クラスとしている。派生クラスはroot_objectクラスの全ての純粋仮想 関数に定義を与える必要がある。See section 4.1 root_objectクラス.

packetクラスは以下のメンバ関数を定義している。

packet* new_packet(void) const
同じ型のパケットを生成し、そのポインタを返す関数。root_objectnew_object関数の返り値をキャストするだけの関数である。

packet* clone_object(void) const
同じ型のオブジェクトを生成し、自分自身の値をコピーして、そのポインタを 返す関数。root_objectclone_object関数の返り値をキャス トするだけの関数である。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 bus_packet_baseクラス

バス上のメモリアクセスを表す抽象パケット。バス上でのリードトランザクショ ン、ライトトランザクションをサポートする。ブロック転送機能、スプリット トランザクション機能も持つ。このクラスは2つの型引数を取るクラステンプ レートで、第一引数でアドレスの型、第二引数でデータの型を指定する。

このパケットはアドレスとデータ以外の状態を内包せず、状態の問い合わせ関 数のみを純粋仮想関数および定義済み仮想関数として提供する。実際のパケッ トを送受信するためには、状態を追加した具体派生クラスを使用する必要があ る。純粋仮想関数のみを定義すれば具体派生クラスを実装できるが、実行時の 関数呼び出しのコストを低減させるためにその他の仮想関数についても再定義 した方が良い。

パケットの種類は大きく以下の5つに分類される。

request
read requestやwrite requestなど、何らかの要求を表す。通常、対象となる アドレスが示されている。このパケットに転送するデータ(例えばwriteするデー タ) を示しても良い。

grant
その要求が受理可能なものであることを表す。このパケットを受信した要求者 は、バスを一旦開放してack、nackまたはdataを待つ。

ack
その要求が受理可能であり、かつ自分が受理可能な状態になっていることを表 す。このパケットに応答となるデータ(例えばreadしたデータ)を示しても良い。

nack
その要求は通常なら受理可能だが、現在は受理不能な状態にあることを表す。

data
実際に転送するべきデータを表す。

以下にメンバ関数の一覧を示す。

address_type address(void) const
アドレスを参照する。

data_type data(void) const
データを参照する。

size_t total_packet_count(void) const
バストランザクションに使用するデータパケット数を参照する。

size_t packet_number(void) const
このパケットの番号を参照する。

bool is_single(void) const
単一ワード転送であれば真を返す。

bool is_multi(void) const
複数ワード転送であれば真を返す。

void set_single(void)
パケットを単一ワード転送にする。

void set_multi(size_t)
パケットを引数で与えられたワード数の複数転送にする。

void set_multi(size_t, size_t)
パケットを第一引数で与えられたワード数、第二引数で与えられたパケット番 号の複数転送にする。

virtual bool is_read(void) const = 0
readであれば真を返す。

virtual bool is_write(void) const = 0
writeであれば真を返す。

virtual bool is_request(void) const = 0
requestであれば真を返す。

virtual bool is_grant(void) const = 0
grantであれば真を返す。

virtual bool is_ack(void) const = 0
ackであれば真を返す。

virtual bool is_nack(void) const = 0
nackであれば真を返す。

virtual bool is_data(void) const = 0
dataであれば真を返す。

virtual void set_read(void) = 0
パケットをreadにする。

virtual void set_write(void) = 0
パケットをwriteにする。

virtual void set_request(void) = 0
パケットをrequestにする。

virtual void set_grant(void) = 0
パケットをgrantにする。

virtual void set_ack(void) = 0
パケットをackにする。

virtual void set_nack(void) = 0
パケットをnackにする。

virtual void set_data(void) = 0
パケットをdataにする。

virtual bool is_read_request(void) const
read_requestであれば真を返す。

virtual bool is_read_grant(void) const
read_grantであれば真を返す。

virtual bool is_read_ack(void) const
read_ackであれば真を返す。

virtual bool is_read_nack(void) const
read_nackであれば真を返す。

virtual bool is_read_data(void) const
read_dataであれば真を返す。

virtual bool is_write_request(void) const
write_requestであれば真を返す。

virtual bool is_write_grant(void) const
write_grantであれば真を返す。

virtual bool is_write_ack(void) const
write_ackであれば真を返す。

virtual bool is_write_nack(void) const
write_nackであれば真を返す。

virtual bool is_write_data(void) const
write_dataであれば真を返す。

virtual bool is_single_read_request(void) const
単一ワード転送のread_requestであれば真を返す。

virtual bool is_single_read_grant(void) const
単一ワード転送のread_grantであれば真を返す。

virtual bool is_single_read_ack(void) const
単一ワード転送のread_ackであれば真を返す。

virtual bool is_single_read_nack(void) const
単一ワード転送のread_nackであれば真を返す。

virtual bool is_single_read_data(void) const
単一ワード転送のread_dataであれば真を返す。

virtual bool is_single_write_request(void) const
単一ワード転送のwrite_requestであれば真を返す。

virtual bool is_single_write_grant(void) const
単一ワード転送のwrite_grantであれば真を返す。

virtual bool is_single_write_ack(void) const
単一ワード転送のwrite_ackであれば真を返す。

virtual bool is_single_write_nack(void) const
単一ワード転送のwrite_nackであれば真を返す。

virtual bool is_single_write_data(void) const
単一ワード転送のwrite_dataであれば真を返す。

virtual bool is_multi_read_request(void) const
複数ワード転送のread_requestであれば真を返す。

virtual bool is_multi_read_grant(void) const
複数ワード転送のread_grantであれば真を返す。

virtual bool is_multi_read_ack(void) const
複数ワード転送のread_ackであれば真を返す。

virtual bool is_multi_read_nack(void) const
複数ワード転送のread_nackであれば真を返す。

virtual bool is_multi_read_data(void) const
複数ワード転送のread_dataであれば真を返す。

virtual bool is_multi_write_request(void) const
複数ワード転送のwrite_requestであれば真を返す。

virtual bool is_multi_write_grant(void) const
複数ワード転送のwrite_grantであれば真を返す。

virtual bool is_multi_write_ack(void) const
複数ワード転送のwrite_ackであれば真を返す。

virtual bool is_multi_write_nack(void) const
複数ワード転送のwrite_nackであれば真を返す。

virtual bool is_multi_write_data(void) const
複数ワード転送のwrite_dataであれば真を返す。

virtual void set_read_request(void)
パケットをread_requestにする。

virtual void set_read_grant(void)
パケットをread_grantにする。

virtual void set_read_ack(void)
パケットをread_ackにする。

virtual void set_read_nack(void)
パケットをread_nackにする。

virtual void set_read_data(void)
パケットをread_dataにする。

virtual void set_write_request(void)
パケットをwrite_requestにする。

virtual void set_write_grant(void)
パケットをwrite_grantにする。

virtual void set_write_ack(void)
パケットをwrite_ackにする。

virtual void set_write_nack(void)
パケットをwrite_nackにする。

virtual void set_write_data(void)
パケットをwrite_dataにする。

virtual void set_single_read_request(address_type)
パケットを引数で示されたアドレスへの単一read_requestにする。

virtual void set_single_read_grant(void)
パケットを単一read_ackにする。

virtual void set_single_read_grant(void)
パケットを単一read_ackにする。

virtual void set_single_read_nack(void)
パケットを単一read_nackにする。

virtual void set_single_read_data(data_type)
パケットを引数で示されたデータを持つ単一read_dataにする。

virtual void set_single_write_request(address_type)
パケットを引数で示されたアドレスへの単一write_requestにする。

virtual void set_single_write_grant(void)
パケットを単一write_grantにする。

virtual void set_single_write_ack(void)
パケットを単一write_ackにする。

virtual void set_single_write_nack(void)
パケットを単一write_nackにする。

virtual void set_single_write_data(data_type)
パケットを引数で示されたデータを持つ単一write_dataにする。

virtual void set_multi_read_request(address_type, size_t)
パケットを第一引数で示されたアドレスへの第二引数ワード分の複数 read_requestにする。

virtual void set_multi_read_grant(void)
パケットを複数read_grantにする。

virtual void set_multi_read_ack(void)
パケットを複数read_ackにする。

virtual void set_multi_read_nack(void)
パケットを複数read_nackにする。

virtual void set_multi_read_data(data_type, size_t, size_t)
パケットを第一引数で示されたデータを持つ第二引数ワード分の複数 read_dataにする。第三引数でパケットの通し番号を指定する。

virtual void set_multi_write_request(address_type, size_t)
パケットを第一引数で示されたアドレスへの第二引数ワード分の複数 write_requestにする。

virtual void set_multi_write_grant(void)
パケットを複数write_grantにする。

virtual void set_multi_write_ack(void)
パケットを複数write_ackにする。

virtual void set_multi_write_nack(void)
パケットを複数write_nackにする。

virtual void set_multi_write_data(data_type, size_t, size_t)
パケットを第一引数で示されたデータを持つ第二引数ワード分の複数 write_dataにする。第三引数でパケットの通し番号を指定する。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3 bus_packetクラス

バス上のメモリアクセスを表す具体パケット。bus_packet_baseクラス の派生クラスで、bus_packet_baseクラスで用意されている機能のみを 実体化したものである。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4 network_packet_baseクラス

相互結合網内を流れるパケットを表すクラス。このクラスはネットワークアド レスの型を型引数とするクラステンプレートである。

パケットは必ず1つの送信ノードアドレスを格納している。ユニキャストの場 合は1つ、マルチキャストの場合は複数の宛先ノードアドレスを格納している。 ブロードキャストの場合は宛先ノードアドレスは格納しない。また、パケット 長と生成時刻を格納している。データは持たない。

void set_unicast(void)
ユニキャストに設定する。

void set_multicast(void)
マルチキャストに設定する。

void set_broadcast(void)
ブロードキャストに設定する。

void set_source(address_type)
送信ノードアドレスを設定する。

void set_destination(address_type)
ユニキャストの受信ノードアドレスを設定する。

void set_multicast_destination_number(size_t)
マルチキャストの受信ノードアドレス数を設定する。

void set_multicast_destination(size_t, address_type)
マルチキャストの受信ノードアドレスを設定する。

void set_length(size_t)
パケット長を設定する。

void set_timestamp(timestamp_type)
パケット生成時刻を設定する。

bool is_unicast(void) const
ユニキャストであれば真を返す。

bool is_multicast(void) const
マルチキャストであれば真を返す。

bool is_broadcast(void) const
ブロードキャストであれば真を返す。

address_type source(void) const
送信ノードアドレスを返す。

address_type destination(void) const
ユニキャストの受信ノードアドレスを返す。

address_type multicast_destination(size_t) const
マルチキャストの受信ノードアドレスを返す。

size_t length(void) const
パケット長を返す。

timestamp_type set_timestamp(void) const
パケット生成時刻を返す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5 network_packetクラス

network_packet_baseクラスにデータを追加したパケットクラス。

void set_data_size(size_type)
データサイズを設定する。

void set_data(size_type, data_type)
データを設定する。

size_type data_size(void) const
データサイズを参照する。

data_type data(size_type) const
データを参照する。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Masaki WAKABAYASHI on September, 3 2003 using texi2html