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

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

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

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

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

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

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

このコンフィグレーションプログラムは、1997年度に松尾[3]により作成された、

FLEX1stをコンフィグレーションするときのプログラムのC言語のソースである。

最初の#deneの部分でPPI8255におけるベースアドレスを指定し、その後各ポー

トの上下8bitを割りふり、FPGAのコンフィグレーションに必要なアドレスを指定 している。そして、4行のoutp関数により、ポートのモード設定が行なわれる。あと は、Bポート上位の状態によりCポート下位からコンフィグレーションが行なわれる。

#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

#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)

{

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;

}

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

このコンフィグレーションプログラムは、1997年度に松尾[3]により作成された、

FLEX1stをコンフィグレーションするときのプログラムのC言語のソースである。

最初の#deneの部分でPPI8255におけるベースアドレスを指定し、その後、各ポー

トの上下8bitを割りふり、FPGAのコンフィグレーションに必要なアドレスを指定 している。そして、4行のoutp関数により、ポートのモード設定が行なわれる。あと は、Bポート上位の状態によりCポート下位からコンフィグレーションが行なわれる。

#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

#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,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;

}