• 検索結果がありません。

FPGA と CAM 間のインタフェース

ドキュメント内 master.dvi (ページ 38-41)

第 4 章 汎用 CAM による SpMT 機構シミュレータの高速化 30

4.3 FPGA と CAM 間のインタフェース

市販のCAMは厳密なタイミング制御が必要であり,一般的なプロセッサ上で 動作するソフトウェアシミュレータから利用するためには,FPGAを仲介した タイミング保証機構が必要である.すなわち,ソフトウェアシミュレータから 観測できるのは,CAMそのものではなく,FPGA上に実現されるインタフェー スとなる.

GP600M上のFPGAには,CAMにアクセスするための制御レジスタが用意

されている.CAM0制御レジスタを図19に示す.CAM0制御レジスタの詳細 は以下の通りである.CAM1についても,幅が144bitである以外は同様である.

E0CL STE0(STart Externalcam0)ビットに1を書き込むと,CAM0がE0SI および E0SDにより指定した動作を開始する.

BSY0 INS0

TCE0 STE0

FF0 MF0 E0CL

E0ST E0SI

E0SD

E0RD

E0RM

0 0 1

31 1

31 31 31

31

31

0 0

0

0 1 2

2 3 4 19

20

23 24

MM0 0 MA0

0

0

0

0

E0ID0 E0ID8 E0OD0 E0ODH

544 575

256 287

図19: CAM0制御レジスタ

E0ST TCE0(Termination Code of Externalcam0)ビットが1の場合,STE0 ビットへの1書き込み時に指定したE0SIが未定義命令であったことを示す.BSY0

(cam0 BuSY)ビットが1の場合,CAM0が動作中であることを示す.

E0SI INS0(INStruction for externalcam0)にCAM0の動作を指定する.主 な命令の詳細については後述する.

E0SD E0ID0-8(Externalcam0 Input Data 0-8)にCAM0に書き込むデータ を指定する.

E0RD E0OD0-H(Externalcam0 Output Data 0-H)にCAM0から読み出し た値が表示される.

E0RM 後述するSSGLおよびSFRE命令の実行結果が表示される.MA0(Match Address of externalcam0)にCAM0が出力する一致アド レ スが表示され る.

MM0(Multi Match flag of external cam0)ビットが0の場合は複数一致を検出 したことを示す.MF0(Match Flag of external cam0)ビットが0の場合は一 致を検出したことを示す.FF0(Full Flag of external cam0)ビットが0の場合 はFullを検出したことを示す.

制御レジスタへは,mmapシステムコールによりメモリにマッピングされた アドレ スに直接アクセスする.すなわち,

ureg = (unsigned char*) mmap((caddr_t)0, 0x200,

PROT_READ|PROT_WRITE, MAP_SHARED, fd, (off_t)0));

としてuregにマッピングすることにより,例えばアドレ ス0x148の制御レジス タE0CLに対してureg[0x148] = 1;のようにアクセスできる.

GP600M上のCAMはFPGAから命令を送信することにより動作する.GP600M

におけるCAMマクロ命令には,主に以下の命令がある.

RESET(RESET) DC18288に定義されているpowerup sequenceおよび gen-eralresetを実行し,CAMのConfigurationを行う.

CLEAR(CLEAR) CAMの全てのエントリにおいて Emptyビットを1に セットすることにより,全てのエントリを削除する.

WGMR(Write Global Mask Register) E0SDに格納されたマスクデー タをグローバルマスクレジスタ(GMR)に書き込む.

RGMR(Write Global Mask Register) 指定したGMRからマスクデー タをE0RDに転送し,E0RDからデータを読み込む.

WADRWrite ADdress Register) E0SDに格納されたアドレス値をアド レ スレジスタ(ADR)に書き込む.

RADRRead ADdress Register) ADRからアド レ ス値をE0RDに転送 し,R0RDから値を読み込む.

WMEM(Write MEMory) WADRにより指定したアドレスのエントリに,

E0SDに格納されたデータを書き込む.

RMEMRead MEMory) WADRにより指定したアドレスのエントリから データをE0RDに転送し,E0RDからデータを読み込む.

WSTBWrite STatus Bits) WADRにより指定したアド レ スのエント リ におけるステータスビットを変更する.

RSTBRead STatus Bits) WADRにより指定したアドレ スのエントリか らステータスビットをE0RDに転送し,E0RDから値を読み込む.

SSGL(Search SinGLe) WGMRにより指定したマスクデータと E0SDに 格納されたデータを用いてメモリ内を検索する.結果はE0RMに格納され,ヒッ トしたアドレ スを返す.どのエントリにもヒットしない場合,−1を返す.

SDEL(Search and DELete) SSGLと同様に検索を行い,該当した全エン トリのステータスビットにおけるEmptyビットを1にセットする.

SFRESearch for next FREe address) 空きエントリ(Emptyビットが 1でないエントリ)のうちアドレスが最も小さいものを検索する.結果はE0RM

0

CAM0 tsid rfid

key

tsid rfid

rt valm

tsid rfid

CAM1ᓟඨ RB

RA W1 CAM1೨ඨ

ࡑࠬࠢઃ߈val

adr

31

255

287

0 63

0 31

127

128 143

128 143

127

32 63

256

32 63

val[0]

val[1]

val[2]

val[3]

ec

図20: CAMへのデータの割り当て

に格納され,ヒットしたアドレ スを返す.空きエントリが存在しない場合,1 を返す.

ドキュメント内 master.dvi (ページ 38-41)

関連したドキュメント