理論グループのミーティングの報告

日時: 98/04/28
場所: コンピュータ室 西2-220

今回よりFLEX10k の載った大きな基盤を扱い、PCとの通信機能を持った動作をVHDLにより記述し、PC上で動作を検証した。

山岡は作成した加算、減算、ビットシフトなどの簡単な機能を持つプロセッサを、沼さんはカウンタの説明を行なった。

まず、沼さんが説明。

<カウンタ>ソースはここにあります。

(ソース説明)
まずport文でFPGAのクロック(1ビット)、出力、入力(各8ビット}を宣言し、attribute文で入出力およびクロックのFPGA内のピン番号を宣言する。そして、architecture文でFPGA内の内部信号を決める。
次にユーザークロックの設定を行なう。ここではFPGAの動作クロックである10MHzの2の24乗分の1(1677万分の1)に分周して、これをユーザークロックとする(この時の周期は約1.6秒)。次に、カウンタのスイッチの設定を行なう。ここでは入力の8ビット目(一番左)をスイッチとする。このスイッチは正負の符号を表すもので、'0'ならば'プラス'となり、'1'ならば'マイナス'となる。
そしてカウンタの設定を行なう。このカウンタでは入力された8ビットデータの下7ビットでカウンタの増減量を決め、8ビット目で前に示したスイッチによってカウンタの増減を決める。また、カウンタの出力は先に示した8ビットで行なわれるが、オーバーフローになった時(数が256以上に増えるもしくは0を下回る)には、ビットの桁がくり下がり、もしくはくり上がるようになっている。

(動作確認)Cソースはここにあります。
この動作専用のCプログラムにより動作確認をした。
このプログラムはDOS画面で8ビットの数値を入力し、その結果が1行ごとに一定間隔(カウンタの時間)で16進数によって表示されるプログラムである。
まず、#incluude文でライブラリを呼び出し、#define文でFPGAの各ポートのパソコンでの番地を定義します。そして、16進数を2進数に変換するための関数binarystrを呼び出します。その後、出力関数を呼び出し、パソコンのDOS画面に表示ができるようにします。
それから、if文により、キーボードから入力した8ビットの数値の8ビット目(カウンタの増減の符号を表すビット)による条件分岐を行なう。8ビット目が'0'(符号が+)ならばパソコンに"Increase"を表示、'1'(-)ならば"Decrease"を表示する。printf文により先の文字と"76543210"というビット番号を示す文字を表示する。
次のwhile文とprintf文により、キーボード入力しない時はFPGA内のカウンタの内容をパソコンに16進数で表示する。switch文はキーボードからの入力をするためのもので、各ビットの数値をここで入力する。また、ここで'q'や'Q'、もしくは何も入力しないときにはプログラムを終了させることができる。
次に、山岡が説明を行なった。

<加算器>ソースはここにあります。

(ソース説明)
まず、ヘッダの部分でライブラリの宣言を行ない、entity部ではインターフェースからの固有のA、B、Cポート、発振器からのクロックを指定し、各々 のポートに対するピン番号をattributeで割り当てる。つぎに、実際の動作をarchitecture部 でRTLで記述している。
動作はクロックの立ち上がりに同期させてBポートの上位8ビットの状態によりデータの処理を分岐している。ここでは、REG_1、REG_2という2つのレジスタを用意し、まずBポート下位8ビットのデータをレジスタに取り込み、このデータの加算、減算、反転、ビットシフトなどの処理を行なっている。そして最後に、処理した値をAポート下位8ビットに出力している。

(動作確認)Cソースはここにあります。
この動作専用のCプログラムにより動作確認をした。
このプログラムは作成したVHDLの動作をPC上で確認するために作られたものである。 まず、コントロールワードを"0x90"としてAポートを入力、Bポート、Cポートを出力、mode0に設定している。そして、キーが押されていない時にはAポートの下位8ビット(演算結果)、Bポートの下位8ビット(入力データ)、Bポートの上位8ビット(処理制御)を標準出力に表示している。このBポートの上位8ビット(処理制御)を変更するために、'0'から'7'をキーボードより入力でき、また、Bポートの下位8ビット(入力データ)を変更するには'I'を入力し値を代入できるようになっている。終了するには'Q'を入力すれば良い。関数"binarystr"は16進数値をビット列に変換し、ポートに出力できるようにするためのものである。

(齋藤先生より)
基盤にさらにメモリを積み、PCからのデータを記憶させ、FPGAと協調して動作させるよう勧められた。具体的には内積計算などで、PCからのベクトルの値をメモリに記憶させておき、FPGAがこの値を読みとって内積の計算をし、結果をPCに戻すという動作である。