[ < ] | [ > ] | [ << ] | [ 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] | [ ? ] |