通信のための簡単なデータフォーマット
ソフトウェアとデジタル回路、またはソフトウェアの異なるプロセス間で通信する際の利用できるアプリケーション・レベルでの簡単なデータフォーマットについて説明する。 データ通信にはシリアル通信、TCP/IP, PCIe, USB等様々な規格があるが、ここで導入するのはこれらに変わるものではなく、これらに乗っかったアプリケーション・データのフォーマットについてである。データは1バイト単位とする。
フォーマット
バイト順 |
意味 |
値 |
内容 |
0 |
先頭文字 |
'M' (0x4d) |
先頭バイトを示す目印 |
1 |
データ・タイプ |
整数 |
アプリケーション毎に決める任意の値 |
2 |
データ長(上位) |
4以上の整数 |
パケット全体のバイト数 |
3 |
データ長(下位) |
4以上の整数 |
パケット全体のバイト数 |
4~N-1 |
データの中身 |
|
アプリケーションによる |
個別のアプリケーション例
NexysVideoによるFEI4との通信
データ・タイプ
値 |
役割 |
データの内容 |
1 |
echo |
任意のデータ |
2 |
内部レジスタからの読み出し |
アドレス(1 byte) |
3 |
内部レジスタへの書き込み |
アドレス(1 byte)+データ(4 bytes) |
4 |
フロントエンドへのコマンド送信 |
FEI4へ送るコマンド列 |
これは、PCからパケットを受けとった後でデータをどのように処理すべきかを判断するためのものである。
内部レジスタ(一例なので使いやすいように決めて下さい。)1ワードは32 bitとする。
ワード順 |
意味 |
内容 |
ソフトウェアからのR/W |
回路ブロックからのR/W |
0 |
コマンド・タイプ |
下の表のとおり |
W |
- |
1 |
DELAY |
Delay値1+Delay値2 |
R/W |
R/W |
2 |
BERT_PRESET_N0 |
BERTでテストするビット数(下位の数字) |
R/W |
W |
3 |
BERT_PRESET_N1 |
BERTでテストするビット数(上位の数字) |
R/W |
W |
4 |
BERT_N0 |
BERTでテストしたビット数(下位の数字) |
R |
W |
5 |
BERT_N1 |
BERTでテストしたビット数(上位の数字) |
R |
W |
6 |
BERT_E0 |
BERTでのエラービット数(下位の数字) |
R |
W |
7 |
BERT_E1 |
BERTでのエラービット数(上位の数字) |
R |
W |
複数バイトのデータを送る場合、バイト列の並びはbig endianとする。
コマンド・タイプ(一例なので使いやすいように決めて下さい。)
値 |
役割 |
データの内容 |
5 |
IDELAYにDelay値を設定 |
無し。値は事前にレジスタに書き込んでおく。 |
6 |
BERT開始 |
無し |
7 |
BERT終了 |
無し |
この役割をデータ・タイプに担わせることも可能である。
回路への要求
PCからパケットを受け取ったら、ヘッダに書かれたデータ・タイプに応じて処理を適切に内容を処理する。 PCからできる操作としては内部レジスタの読み書きとフロントエンドに直接データを送るかのどちらかである。導入する目的は、パケットを受け取った回路がそのデータを次にどの回路ブロックに処理させるかを判断するためのものである。 echoは通信できているかをチェックするために使用することを目的としてものである。