| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
パケットはユニット間でやり取りされる情報として定義される。同期ユニット および非同期ユニットは、ポートを通じて他のユニットとパケットを送受信す ることで通信を行う。
全てのパケットは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] | [ ? ] |
パケットを表す全てのクラスの基底クラス。ハードウェアユニット間でやり取
りされる情報は全てパケットとして取り扱う。バス上を通過する情報、ルータ
内を通過するパケットなどはこのpacketクラスの派生クラスとして実
装される。
packetクラスは抽象クラスであり、root_objectクラスを基底
クラスとしている。派生クラスはroot_objectクラスの全ての純粋仮想
関数に定義を与える必要がある。See section 4.1 root_objectクラス.
packetクラスは以下のメンバ関数を定義している。
packet* new_packet(void) const
root_objectの
new_object関数の返り値をキャストするだけの関数である。
packet* clone_object(void) const
root_objectのclone_object関数の返り値をキャス
トするだけの関数である。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
バス上のメモリアクセスを表す抽象パケット。バス上でのリードトランザクショ ン、ライトトランザクションをサポートする。ブロック転送機能、スプリット トランザクション機能も持つ。このクラスは2つの型引数を取るクラステンプ レートで、第一引数でアドレスの型、第二引数でデータの型を指定する。
このパケットはアドレスとデータ以外の状態を内包せず、状態の問い合わせ関 数のみを純粋仮想関数および定義済み仮想関数として提供する。実際のパケッ トを送受信するためには、状態を追加した具体派生クラスを使用する必要があ る。純粋仮想関数のみを定義すれば具体派生クラスを実装できるが、実行時の 関数呼び出しのコストを低減させるためにその他の仮想関数についても再定義 した方が良い。
パケットの種類は大きく以下の5つに分類される。
以下にメンバ関数の一覧を示す。
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] | [ ? ] |
バス上のメモリアクセスを表す具体パケット。bus_packet_baseクラス
の派生クラスで、bus_packet_baseクラスで用意されている機能のみを
実体化したものである。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
相互結合網内を流れるパケットを表すクラス。このクラスはネットワークアド レスの型を型引数とするクラステンプレートである。
パケットは必ず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] | [ ? ] |
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] | [ ? ] |