示例#1
0
文件: main.c 项目: farhanrahman/riffa
/**
 * Main entry point.
 */
int main(int argc, char* argv[]) 
{
	fpga_dev * fpgaDev;
  int rtn, channel, timeout;
	unsigned int arg0, arg1;
	struct timeval tv;
	double tempTime;

	timeout = 10*1000; // 10 secs.
	channel = 1;
	arg0 = (unsigned int)rand();
	arg1 = (unsigned int)rand();

	if ((rtn = fpga_init(&fpgaDev)) < 0) {
		printf("error opening fpga: %d\n", rtn);
		return rtn;
	}
	if ((rtn = fpga_channel_open(fpgaDev, channel, timeout)) < 0) {
		printf("error opening fpga channel: %d\n", rtn);
		return rtn;
	}

  printf("Opened.\n");

	while (1) {
		if ((rtn = fpga_send_args(fpgaDev, channel, arg0, arg1, 2, 1)) < 0) {
			printf("error sending args to fpga: %d\n", rtn);
			break;
		}
		printf("Called with args: 0x%x, 0x%x.\n", arg0, arg1);

		gettimeofday(&tv, NULL);
		tempTime = tv.tv_sec + tv.tv_usec / 1000000.0;

		if ((rtn = fpga_recv_data(fpgaDev, channel, (unsigned char *)gData, DATA_SIZE)) < 0) {
			printf("error receiving data from fpga: %d\n", rtn);
			break;
		}

		gettimeofday(&tv, NULL);
		tempTime = (tv.tv_sec + tv.tv_usec / 1000000.0) - tempTime;
		printf("Duration: %f  MBs: %f\n", tempTime, (rtn/tempTime)/(1024*1024));

		printf("Received data response, length: %d (0x%x)\n", rtn, rtn);
		printf("Values 1 & 2: 0x%x, 0x%x (from first half DMA transfer) should equal 0x%x, 0x%x\n", 
			gData[1], gData[2], arg0, arg1);
		printf("Values 64KB + 1 & 64KB + 2: 0x%x, 0x%x (from second half DMA transfer) should equal 0x%x, 0x%x\n", 
			gData[(64*1024/4) + 1], gData[(64*1024/4) + 2], arg0, arg1);

		break;
	}

  printf("Done.\n");

	fpga_channel_close(fpgaDev, 0);
  fpga_free(fpgaDev);
  printf("Exiting.\n");

	return 0;
}
示例#2
0
int main(int argc, char *argv[]) {

    FILE *in_file;
    FILE *out_file;
    char *file_header;
    char *file_data;
    int rtn;
    int sent = 0;
    int recv = 0;
    int len = 512*512;
    FILE *file;
    char *buffer;
    unsigned long fileLen;
    if(argc != 3) {
        printf("Wrong number of arguments\n");
        return -1;
    }
    in_file = fopen(argv[1],"rb");
    if (!in_file)
    {
	fprintf(stderr, "Unable to open image file\n");
	return;
    }
    file_header=(char *)malloc(header_size);
    fread(file_header, 1, header_size, in_file);
    //Save file data
    file_data=(char *)malloc(image_size);
    fread(file_data, 4, image_size, in_file);
    //Close the image file
    fclose(in_file);
    //Open a new file to store the result
    out_file = fopen(argv[2],"wb");
    //Store image header
    fwrite(file_header, 1, header_size, out_file);
    //Open partial bitstream file
    //Reset user logic
    rtn = fpga_reg_wr(UCTR_REG,0x0);
    rtn = fpga_reg_wr(UCTR_REG,0x1);
    rtn = fpga_reg_wr(CTRL_REG,0x0);
    rtn = fpga_reg_wr(CTRL_REG,0x1);
    while(sent < len){
        rtn = fpga_send_data(USERPCIE1,(unsigned char *) file_data+sent,512,1);
        rtn = fpga_send_data(USERPCIE2,(unsigned char *) file_data+sent+512,512,1);
        rtn = fpga_send_data(USERPCIE3,(unsigned char *) file_data+sent+1024,512,1);
        rtn = fpga_reg_wr(0x400,0x1);
        rtn = fpga_recv_data(USERPCIE1,(unsigned char *) gDATA+recv,512,1);
	rtn = fpga_reg_wr(0x400,0x0);
	sent += 512;
        recv += 512;
    }
    fwrite(gDATA,1,image_size+2,out_file);
    fclose(out_file);
    free(file_header);
    free(file_data);
    return 0;
}
示例#3
0
文件: filter.c 项目: h-nasiri/DyRact
int main(int argc, char *argv[]) {

    FILE *in_file;
    FILE *out_file;
    char *file_header;
    char *file_data;
    int rtn;
    int sent = 0;
    int recv = 0;
    int len = 512*512;
    int line_buff = 1;
    FILE *file;
    char *buffer;
    unsigned long fileLen;
    in_file = fopen(argv[1],"rb");
    if (!in_file)
    {
	fprintf(stderr, "Unable to open image file\n");
	return;
    }
    file_header=(char *)malloc(header_size);
    fread(file_header, 1, header_size, in_file);
    //Save file data
    file_data=(char *)malloc(image_size);
    fread(file_data, 4, image_size, in_file);
    //Close the image file
    fclose(in_file);
    //Open a new file to store the result
    out_file = fopen(argv[2],"wb");
    //Store image header
    fwrite(file_header, 1, header_size, out_file);
    //Open partial bitstream file
    file = fopen(argv[3], "rb");
    if (!file)
    {
	fprintf(stderr, "Unable to open partial bit file\n");
	return;
    }
    //Get file length
    fseek(file, 0, SEEK_END);
    fileLen=ftell(file);
    fseek(file, 0, SEEK_SET);
    //Allocate memory
    buffer=(char *)malloc(fileLen+1);
    if (!buffer)
    {
	fprintf(stderr, "Memory error!\n");
        fclose(file);
	return;
    }
    //Read file contents into buffer
    fread(buffer, 1, fileLen, file);
    fclose(file);
    //Send partial bitstream to FPGA
    rtn = fpga_send_data(ICAP, (unsigned char *) buffer, fileLen, 0); 
    free(buffer);
    //Reset user logic
    rtn = fpga_reg_wr(UCTR_REG,0x0);
    rtn = fpga_reg_wr(UCTR_REG,0x1);
    rtn = fpga_reg_wr(CTRL_REG,0x0);
    rtn = fpga_reg_wr(CTRL_REG,0x1);
    if(strcmp(argv[4],"s")==0) {
        printf("Streaming filter");
    	while(sent < len){
	        rtn = fpga_send_data(USERPCIE1,(unsigned char *) file_data+sent,4096,1);
	        rtn = fpga_recv_data(USERPCIE1,(unsigned char *) gDATA+sent,4096,1);
	        sent += 4096;
        }  
    }
    else if (strcmp(argv[4],"c")==0) {
      while(sent < len){
        rtn = fpga_send_data(USERPCIE1,(unsigned char *) file_data+sent,512,1);
        rtn = fpga_send_data(USERPCIE2,(unsigned char *) file_data+sent+512,512,1);
        rtn = fpga_send_data(USERPCIE3,(unsigned char *) file_data+sent+1024,512,1);
        //rtn = fpga_wait_interrupt(hostuser1);
        //rtn = fpga_wait_interrupt(hostuser2);
        //rtn = fpga_wait_interrupt(hostuser3);
        rtn = fpga_reg_wr(0x400,0x1);
        rtn = fpga_recv_data(USERPCIE1,(unsigned char *) gDATA+recv,512,1);
	//printf("Data receive done\n");
	rtn = fpga_reg_wr(0x400,0x0);
	sent += 512;
        recv += 512;
      }
    }
    else
        printf("Wrong filter type %s\n",argv[3]);
    fwrite(gDATA,1,image_size+2,out_file);
    fclose(out_file);
    free(file_header);
    free(file_data);
    return 0;
}