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

評価ボードの使い方

ドキュメント内 FPGAを用いた行列計算専用プロセッサの設計 (ページ 126-131)

付録 I I 計算システム評価ボード 105

II.4 評価ボードの使い方

DIPスイッチを用いて設定する。ベースアドレスは0x0000 0xf8まで8byteを単位 として設定できる。例えば図I I.15のように設定すると0xf0 0xf7までを使用する

(下位3bitは設定しても無視される)。このとき、OFF1ON0である。当然、

他のデバイスが使用していないアドレスを使用する。この場合、表II.9のようにマッピ ングされる。このような設定をした後、ISA BUSに装着する。

ON OFF

II.15 DIP スイッチ15

I I.9 インターフェースカードのI/Oマッピング

I/O アドレス 割り当て

Base Address ポートA 下位

Base Address + 1 ポートA 上位

Base Address + 2 ポートB 下位

Base Address + 3 ポートB 上位

Base Address + 4 ポートC 下位

Base Address + 5 ポートC 上位

Base Address + 6 コントロール ワード 下位

Base Address + 7 コントロール ワード 上位

II.4

評価ボードの使い方

インターフェースのI/Oポートのモード

コンフィグレーションで使用するインターフェースの端子は、C0 C1 C2 C8 C9 C10

B14 B15 である。このため、インターフェースのI/Oポートのモードは表I I.10のよう に設定しなければならない。他のポートは自由に設定できる。

15ファイル名: ./g2/ifdip.eps

II.4 評価ボードの使い方 122

II.10 インターフェースのI/O ポートのモード

ポートC 下位 出力 C2:nCONFIG C1:DLCKC0:DATA0

ポートC 上位 出力 C8 C9 C10: FLEX選択

ポートB 上位 入力 B14:nSTATUSB15:CONF DONE

コンフィグレーション後のモード変更

PPI8255はモードを変更すると全ての出力バッファを0にクリアする。このため、

モードを 変更する と、nCONFIGLowにさ れてしまい、FPGAが コンフィグ レー ションモードに入ってしまう事がある。これを防ぐには以下のことを行う必要がある。

1. ポートC上位は出力にする。

2. コンフィグレーションのあとは、FPGAの選択を000に設定する。

コンフィグレーション後に使用可能な端子

コンフィグレーションを行った後は、ポートC上位に000を出力していれば、他の ポートは自由に使用できる。

FLEX 2ndのコンフィグレーション

Bポー ト 上 位 は コ ン フィ グ レー ショ ン 時 にFLEX 2ndか ら ド ラ イ ブ さ れ る。 も し

FLEX1stで使用している場合はFLEX1stの端子をハイインピーダンスか入力にして おく必要がある。

FLEX 1stのコンフィグレーションプログラム

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <dos.h>

#define BASE_8255 0xfff0

#define P_A BASE_8255

#define P_B BASE_8255 + 2

#define P_C BASE_8255 + 4

II.4 評価ボードの使い方 123

#define P_AL P_A

#define P_AH P_A + 1

#define P_BL P_B

#define P_BH P_B + 1

#define P_CL P_C

#define P_CH P_C + 1

#define P_CTRL_L P_CTRL

#define P_CTRL_H P_CTRL + 1

#define DATA0 0x1

#define DCLK 0x02

#define nCONFIG 0x04

#define CONF_DONE 0x40

#define nSTATUS 0x80

/* A:in m0 B:in m0 CH:in CL:out 0x9A */

/* A:in m0 B:in m0 CH:out CL:out 0x92 */

/* A: mode2 BL: out BH: in CL3: out CH3: in 0xDB(H) 0xD8(L) */

int main(int argc, char *argv[])

{

long i;

printf("TTF Downloader for FLEX10K100 Eval. Board.\n");

if(argc != 2)

{

printf("usage : flex10k foo.ttf \n");

exit(1);

}

FILE *fp;

if ((fp = fopen(argv[1], "rt") == NULL){

fprintf(stderr, "%s を開けません\n",argv[1]);

return 1;

}

outp( P_CTRL , 0xC8);

outp(P_CTRL_H , 0xCA );

outp(P_CL,0xff);

outp(P_CH,0x04);

{

printf("nSTATUS = H Check...");

unsigned char a;

a = inp(P_BH) & nSTATUS;

if ( a != nSTATUS ){

printf("nSTATUS High でない\n");

exit(1);

}

printf("OK!\n");

}

outp(P_CL , 0 );

printf("nCONFIG PLUS Check...");

while(1)

{

unsigned char a;

a = inp(P_BH) & nSTATUS;

if ( a != nSTATUS ) break;

}

outp(P_CL , nCONFIG );

while(1)

{

II.4 評価ボードの使い方 124

a = inportb(P_BH) & nSTATUS;

if ( a == nSTATUS ) break;

}

printf("OK!\n");

for (i = 0l ; i < 8l ; i++)

{

outp( P_CL , nCONFIG | 1 );

outp( P_CL , nCONFIG | DCLK | 1);

}

printf("Now Downloading...");

for ( i= 0l ; i < 150000l ; i++){

unsigned char c;

int c1;

if ( EOF == fscanf(fp,"%d,",&c1) ) break;

int j;

c = c1;

for ( j=0l ; j< 8l ; j++){

outp( P_CL , nCONFIG | ( c & 1 ) );

outp( P_CL , nCONFIG | DCLK | ( c & 1 ) );

c >>= 1;

}

if ( (inp( P_BH ) & 0xC0 ) == 0xC0 ) break;

if ( i == 149132l )

{

printf("Abnormal end.\n");

exit(1);

}

}

if ( i != 149131l)

{

printf("Abnormal end.\n");

exit(1);

}

for (i = 0l ; i< 8l ; i++)

{

outp( P_CL , nCONFIG );

outp( P_CL , nCONFIG | DCLK);

}

printf("Normal end.\n");

outp(P_CH,0x00);

return 0;

}

FLEX 2ndのコンフィグレーションプログラム

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <dos.h>

#define BASE_8255 0xfff0

#define P_A BASE_8255

#define P_B BASE_8255 + 2

#define P_C BASE_8255 + 4

#define P_CTRL BASE_8255 + 6

#define P_AL P_A

II.4 評価ボードの使い方 125

#define P_BL P_B

#define P_BH P_B + 1

#define P_CL P_C

#define P_CH P_C + 1

#define P_CTRL_L P_CTRL

#define P_CTRL_H P_CTRL + 1

#define DATA0 0x1

#define DCLK 0x02

#define nCONFIG 0x04

#define CONF_DONE 0x40

#define nSTATUS 0x80

/* A:in m0 B:in m0 CH:in CL:out 0x9A */

/* A:in m0 B:in m0 CH:out CL:out 0x92 */

/* A: mode2 BL: out BH: in CL3: out CH3: in 0xDB(H) 0xD8(L) */

int main(int argc, char *argv[])

{

long i;

printf("TTF Downloader for FLEX10K100 Eval. Board.\n");

if(argc != 2)

{

printf("usage : flex10k foo.ttf \n");

exit(1);

}

FILE *fp;

if ((fp = fopen(argv[1], "rt") == NULL){

fprintf(stderr, "%s を開けません\n",argv[1]);

return 1;

}

outp( P_CTRL , 0xC8);

outp(P_CTRL_H , 0xCA );

outp(P_CL,0xff);

outp(P_CH,0x05);

{

printf("nSTATUS = H Check...");

unsigned char a;

a = inp(P_BH) & nSTATUS;

if ( a != nSTATUS ){

printf("nSTATUS High でない\n");

exit(1);

}

printf("OK!\n");

}

outp(P_CL , 0 );

printf("nCONFIG PLUS Check...");

while(1)

{

unsigned char a;

a = inp(P_BH) & nSTATUS;

if ( a != nSTATUS ) break;

}

outp(P_CL , nCONFIG );

while(1)

{

unsigned char a;

a = inportb(P_BH) & nSTATUS;

if ( a == nSTATUS ) break;

printf("OK!\n");

for (i = 0l ; i < 8l ; i++)

{

outp( P_CL , nCONFIG | 1 );

outp( P_CL , nCONFIG | DCLK | 1);

}

printf("Now Downloading...");

for ( i= 0l ; i < 150000l ; i++){

unsigned char c;

int c1;

if ( EOF == fscanf(fp,"%d,",&c1) ) break;

int j;

c = c1;

for ( j=0l ; j< 8l ; j++){

outp( P_CL , nCONFIG | ( c & 1 ) );

outp( P_CL , nCONFIG | DCLK | ( c & 1 ) );

c >>= 1;

}

if ( (inp( P_BH ) & 0xC0 ) == 0xC0 ) break;

if ( i == 149132l )

{

printf("Abnormal end.\n");

exit(1);

}

}

if ( i != 149131l)

{

printf("Abnormal end.\n");

exit(1);

}

for (i = 0l ; i< 8l ; i++)

{

outp( P_CL , nCONFIG );

outp( P_CL , nCONFIG | DCLK);

}

printf("Normal end.\n");

outp(P_CH,0x00);

return 0;

}

ドキュメント内 FPGAを用いた行列計算専用プロセッサの設計 (ページ 126-131)