четверг, 4 декабря 2014 г.

Универсальный дискретный ввод-вывод в FPGA (UNIOxx-5)

Проект В23 - является универсальной прошивкой дискретного ввода-вывода, собственной разработки, под ПЛИС FPGA XC5204 платы UNIOxx-5 производства Fastwell.

Состав проекта (модуль адресации по договоренности):
  1. Проект B23 'b23_gen'.
  2. Прошивка проекта 'b23.bit'.
  3. Исходник тестового бенчмарка управления ЦАП через плату UNIOxx 'unio_gen.cpp'.
  4. ПО бенчмарка 'unio_gen.exe'.
  5. Методические указания и схема подключений 'mu.djvu'.

Дополнительные возможности:
  1. 12 каналов ввода-вывода на одну матрицу FPGA.
  2. Переконфигурация под "любую" ПЛИС.

Тестовый бенчмарк контроля ЦАП:
#include "dos.h"
#include "string.h"
#include <stdio.h>
#include <conio.h>
#include <bios.h>

#define BA 0xA110
#define L (4095-1) //длина посылки


int f_dba(int dba,int ss,int adb);
int af_dba(int dba,int ass,int adb);
void main(long int argc, char *argv[])
{
//переменные порта
int dba,adb;
//служебные переменные
int ss,s,r,i,ad,pp;
long int k,p;
unsigned int ass;

 clrscr();

 if(argc>1)
 {
  printf("argc=%d\n",argc);
  for(i=0;i<argc;i++)
   printf("%d = %s\n",i,argv[i]);
  if(strcmp(argv[1],"/?")==0)
  {
   printf("Program driver encoder\n");
  }
 else if(strcmp(argv[1],"indtest")==0){}
 }
//
clrscr();

k=0;
ass=0x0;
p=0;

puts("nFPGA(1...4)-?");
puts("Mode: manual(1),auto(n)-?");
puts("Adress-?");
scanf("%d %d %x",&s,&r,&ad);
if (r==1) {puts("Data-?");scanf("%x",&ss);}
else {puts("Delay,ms-?");scanf("%d",&ss);}

 if (s==1) {dba=0x0;}
 if (s==2) {dba=0x400;}
 if (s==3) {dba=0x800;}
 if (s==4) {dba=0xC00;}
 adb=ad;
 /*
 if (ad==1) {adb=0x0;}
 if (ad==2) {adb=0x02;}
 if (ad==3) {adb=0x04;}
 if (ad==4) {adb=0x08;}
 if (ad==5) {adb=0x10;}
*/
textcolor(YELLOW);
 do {
 s=0;
  clrscr();

  printf("Посылка:%d\n",k);
  if (r==1)
   {
    f_dba(dba,ss,adb);
    printf("Data: %x\n",ss);
    //delay(0);
   }
  else
   {
    printf("Delay,ms: %d\n",ss);
    printf("%x\n",ass);
    delay(ss);
    af_dba(dba,ass,adb);
    //ass=k%L; //задержка с сохранением счетчика
    //if(ass>=(L/2)) ass=L-ass;

    p=k>>8; //задержка без сохранения счетчика
    if(p&0x1) {ass--;}
    else {ass++;}

   }
//
k+=1;
//
if (bioskey(1)!=0) {s=bioskey(0);}
if (s==0xF09)
 {
  if (r==1) {puts("New data?");scanf("%x",&ss);}
  //else {puts("New delay?");scanf("%d",&ss);}
  else {k=0;ass=0;puts("New delay?");scanf("%d",&ss);}
 }

}
 while (s!=0x1C0D);
textmode(LASTMODE);
return;
}

//manual
int f_dba(int dba,int ss,int adb)
 {
 outp(BA+dba+0x0,ss);
 outp(BA+dba+0x1,adb);
 //outp(BA+dba+0x1,k);
 }
//auto
int af_dba(int dba,int ass,int adb)
 {
 outp(BA+dba+0x0,ass);
 outp(BA+dba+0x1,adb);
 //outp(BA+dba+0x1,k);
 }

Среда компиляции проекта под FPGA: Xilinx Foundation Series3.1i/4.1i
Cистемные требования: шина ISA & плата UNIOxx-5 Fastwell

забрать

Комментариев нет:

Отправить комментарий

В комментариях уважайте собеседника, внимательно читайте посты и не додумывайте. Просьбы и предложения из разряда: «можно ваш Skype/Viber/телефон», «напишите мне в vk/FB», а также другие им подобные — игнорируются. Выход новых версий ПО, внешняя ссылка, переставшая работать с течением времени и т.п. не является основанием для претензий. Желающие спокойно подискутировать и высказаться — Welcome. Желающие спонсировать блог — Donate. Нарушение этих простых правил ведет к бану и удалению комментариев без предупреждения.